0

私はこれでかなり新しいです。このシンプルなアプリは、画像をネットからドローアブルとしてダウンロードし、それをビットマップに変換して(キャッシュに保存するため)、UIに表示します。これを実行すると、NullPointerExceptionが発生します。

コード:-

public class ImageActivity extends Activity {
    /** Called when the activity is first created. */
    private LruCache<String, Bitmap> mchache;
    ImageView imageview;
    Bitmap image;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


                imageview=(ImageView)findViewById(R.id.img);
        Log.i("shu","HERE @ calling loadimage");
       loadimage();

    }
    public void loadimage()

    {          Log.i("shu","HERE @ inside ");

        image = (Bitmap) mchache.get("img");
        Log.i("shu","HERE @line1passed");

        if (image==null)
        {        Log.i("shu","HERE @ imahe==null");

            downloadimage();
        }
        else if (image != null)
        {        Log.i("shu","HERE @ image!= null");

        imageview.setImageBitmap(image);
        }
    }
    // converts drawable to bitmap
    public static Bitmap drawableToBitmap (Drawable drawable) {
        Log.i("shu","HERE @ drawable to bitmap");

        if (drawable instanceof BitmapDrawable) {
            return ((BitmapDrawable)drawable).getBitmap();
        }

        Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap); 
        drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
        drawable.draw(canvas);

        return bitmap;
    }
    public void downloadimage()
    {        Log.i("shu","HERE @ download image");

        String address="http://abd.com/absde.jpg";
        try{ 
           URL url = new URL(address);
         InputStream content = (InputStream)url.getContent();
         Drawable d = Drawable.createFromStream(content , "src"); 
         imageview.setImageDrawable(d);
         Bitmap bmap = drawableToBitmap(d);
         mchache.put("img",bmap);
        }
        catch (IOException e)
        {        Log.i("shu","HERE @ exception");
}
    }

}

logcatによると、問題はここにあります

            image = (Bitmap) mchache.get("img");

コードb/w 2ログ情報なので、誰でもplzが原因を指摘できます。そして、api8には存在しないため、サポートライブラリの助けを借りてLRUCacheを使用しています。

4

1 に答える 1

1

を初期化していません

private LruCache<String, Bitmap> mchache;

で行うonCreate()

mchache = LruCache<String, Bitmap>();

loadimage();
于 2012-06-26T09:43:50.713 に答える