2

outOfMemory エラーが発生した後、AsyncTask を使用してビットマップをロードしたかったので、Android 開発者の Web サイトからこのコード サンプルを取得しましたが、すべてを連携させるのに問題があります。

public class BitmapLoader {

public static int calculateInSampleSize(BitmapFactory.Options options,
        int reqWidth, int reqHeight) {
    // Raw height and width of image
    final int height = options.outHeight;
    final int width = options.outWidth;
    int inSampleSize = 1;

    if (height > reqHeight || width > reqWidth) {

        // Calculate ratios of height and width to requested height and
        // width
        final int heightRatio = Math.round((float) height
                / (float) reqHeight);
        final int widthRatio = Math.round((float) width / (float) reqWidth);

        // Choose the smallest ratio as inSampleSize value, this will
        // guarantee
        // a final image with both dimensions larger than or equal to the
        // requested height and width.
        inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
    }

    return inSampleSize;
}

public static Bitmap decodeSampledBitmapFromResource(String orgImagePath,
        int reqWidth, int reqHeight) {

    final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(orgImagePath, options);
    options.inSampleSize = calculateInSampleSize(options, reqWidth,
            reqHeight);
    options.inJustDecodeBounds = false;
    return BitmapFactory.decodeFile(orgImagePath, options);
}

class BitmapWorkerTask extends AsyncTask<Integer, Void, Bitmap> {
    private final WeakReference<ImageView> imageViewReference;
    private int data = 0;

    public BitmapWorkerTask(ImageView imageView) {
        // Use a WeakReference to ensure the ImageView can be garbage
        // collected
        imageViewReference = new WeakReference<ImageView>(imageView);
    }

    // Decode image in background.
    @Override
    protected Bitmap doInBackground(Integer... params) {
        data = params[0];
        return decodeSampledBitmapFromResource(getResources(), data, 100,
                100);
    }

    // Once complete, see if ImageView is still around and set bitmap.
    @Override
    protected void onPostExecute(Bitmap bitmap) {
        if (imageViewReference != null && bitmap != null) {
            final ImageView imageView = imageViewReference.get();
            if (imageView != null) {
                imageView.setImageBitmap(bitmap);
            }
        }
    }
}
}

エラーが発生しました: メソッド getResources() は、タイプ BitmapLoader.BitmapWorkerTask に対して未定義です。私はAndroidに比較的慣れていないので、間違った方法や何かを使用している可能性が非常に高いので、誰かが正しい使い方を教えてくれるか、少なくとも正しい方向に向けてくれることを望んでいました. 前もって感謝します。

コピーしたコードへのリンク

4

2 に答える 2

3

アクティビティ コンテキストが必要です。アクティビティ コンテキストを BitmapLoader のコンストラクターに渡します。

     public class BitmapLoader {
     Context context; 
     public BitmapLoader(Context mContext)
     {
       context = mContext;
     } 
     }

使用するcontext.getResources()

以下のリンクを確認してください

http://developer.android.com/reference/android/view/ContextThemeWrapper.html#getResources()

于 2013-07-02T18:46:36.463 に答える