0

在全局定义中,我已经声明: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));,但结果是一样的。

4

3 回答 3

0

看起来flag.getTeamId()是空的,或者,就像checheen所说的那样,flag.getTeamId.get(i)是空的

您可以尝试使用断言,如 assert (flag.getTeamId() != null) assert (flag.getTeamId().get(i) != null)

现在使用 -ea 标志(启用断言的缩写)运行您的 jvm

于 2012-05-25T03:02:34.517 回答
0

我变了

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

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

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

于 2012-05-25T03:04:49.803 回答
0

看起来你找到了答案。但是,您可能会考虑将您的地图WeakReference<Bitmap>作为一个值。那是,

Map<Integer, WeakReference<Bitmap>>

通过保持弱引用,您可以确保垃圾收集稍后将按预期工作。

于 2012-05-25T03:07:22.717 回答