如何使用HashMap为位图分配键?

时间:2012-05-25 02:25:03

标签: java hashmap keyvaluepair

在全球定义中,我已声明:private HashMap<String, Bitmap> map = new HashMap<String, Bitmap>();

在我的代码的其他部分,我连接到服务器并获取我需要的信息。其中两个是图像地址(url)和图像id。之后,我下载图像,我想为它分配自己的Id。这是我的代码:

private LinkedList<Bitmap> getFlagImages() {
    InputStream is= null;
    LinkedList<Bitmap> llBitmap = new LinkedList<Bitmap>();


    for(int i = 0; i < flag.getTeamLogo44x44().size(); i++) {
        String urlstr = flag.getTeamLogo44x44().get(i);

        try {
            HttpGet httpRequest   = new HttpGet(urlstr);
            HttpClient httpclient = new DefaultHttpClient();
            HttpResponse response = (HttpResponse) httpclient.execute(httpRequest);

            HttpEntity entity = response.getEntity();
            BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(entity);
            is = bufHttpEntity.getContent();
            Bitmap bm = BitmapFactory.decodeStream(is);

            llBitmap.add(bm);
            map.put(flag.getTeamId().get(i), bm);  // *Crash happens here

        }catch ( MalformedURLException e ){
            Log.d( "RemoteImageHandler", "Invalid URL passed" + urlstr );
        }catch ( IOException e ){
            Log.d( "RemoteImageHandler", "fetchImage IO exception: " + e );
        }finally{
            if(is != null) {
                try{
                    is.close();
                } catch(IOException e) {}
            }
        }
    }

    return llBitmap;        
}

当我运行时,应用程序崩溃并且logcat显示空指针异常并指向行map.put(flag.getTeamId().get(i), bm);

任何建议都将不胜感激。

// 更新, 我也使用map.put(flag.getTeamId().get(i), Bitmap.createBitmap(bm));但结果是一样的。

3 个答案:

答案 0 :(得分:0)

看起来flag.getTeamId()为空,或者像cheeken所说,flag.getTeamId.get(i)为空

您可以尝试使用类似的断言 assert(flag.getTeamId()!= null) assert(flag.getTeamId()。get(i)!= null)

现在使用-ea标志运行你的jvm(启用断言的简称)

答案 1 :(得分:0)

我改变了

map.put(flag.getTeamId().get(i), bm);

map.put(flag.getTeamId().get(i), Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight()));

现在好了。但我不知道为什么第一个不起作用!!!

答案 2 :(得分:0)

看起来你找到了答案。但是,您可以考虑让地图将WeakReference<Bitmap>作为值。也就是说,

Map<Integer, WeakReference<Bitmap>>

通过保留弱引用,可以确保垃圾收集在以后按预期工作。