0

グローバル定義では、次のように宣言しました。private HashMap<String, Bitmap> map = new HashMap<String, Bitmap>();

コードの他の部分では、サーバーに接続して必要な情報を取得します。そのうちの 2 つは、イメージ アドレス (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 に Null Pointer Exception が表示され、行が示されますmap.put(flag.getTeamId().get(i), bm);

任意の提案をいただければ幸いです。

// Update、また使用map.put(flag.getTeamId().get(i), Bitmap.createBitmap(bm));しましたが、結果は同じでした。

4

3 に答える 3

0

nullのように見えるflag.getTeamId()、またはcheekenが言ったようにflag.getTeamId.get(i)null

assert(flag.getTeamId()!= null)assert(flag.getTeamId()。get(i)!= null)のようなアサーションを使用してみることができます

次に、-eaフラグ(enableアサーションの略)を使用してjvmを実行します。

于 2012-05-25T03:02:34.517 に答える
0

答えが見つかったようです。ただし、WeakReference<Bitmap>代わりにマップを値として使用することを検討してください。あれは、

Map<Integer, WeakReference<Bitmap>>

弱参照を保持することにより、ガベージコレクションが後で期待どおりに機能することを保証します。

于 2012-05-25T03:07:22.717 に答える
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 に答える