0

AsyncTaskクラスを使用して、クイズアプリケーションの画像をダウンロードしています。これはクラスです:

public class DownloadImagesTask extends AsyncTask<ImageView, Void, Bitmap>{

    ImageView imageView = null;

    @Override
    protected Bitmap doInBackground(ImageView... imageViews) {
        this.imageView = imageViews[0];
        return download_Image((String)imageView.getTag());
    }

    @Override
    protected void onPostExecute(Bitmap result) {
        // imageView.setImageBitmap(result);
        downloaded_image = new BitmapDrawable(result);
        //setting question image
        question_view.setCompoundDrawablesWithIntrinsicBounds(null, null, null, downloaded_image);
    }

    private Bitmap download_Image(String url) {

        //---------------------------------------------------
        Bitmap bm = null;
        try {
            URL aURL = new URL(url);
            URLConnection conn = aURL.openConnection();
            conn.connect();
            InputStream is = conn.getInputStream();
            BufferedInputStream bis = new BufferedInputStream(is);
            bm = BitmapFactory.decodeStream(bis);
            bis.close();
            is.close();
        } catch (IOException e) {
            Log.e("Hub","Error getting the image from server : " + e.getMessage().toString());
        } 
        return bm;

        //--------------------------------------------------
    }

}

画像がダウンロードされ、次のように質問TextView内に画像を配置しています。

downloaded_image = new BitmapDrawable(result);
//setting question image
question_view.setCompoundDrawablesWithIntrinsicBounds(null, null, null, downloaded_image);

私はこのような私の活動からこのクラスに電話をかけています

//image download
String imageURL = "http://cache.daylife.com/imageserve/074efG3gPV4oK/50x50.jpg";

image_downloadView.setTag(imageURL);
new DownloadImagesTask().execute(image_downloadView);

質問用の画像をダウンロードしているのか、TextViewsに回答しているのかを識別するために、いくつかの追加パラメーターを渡したいと思います。

どうすればこれを達成できますか?

前もって感謝します!

PS:質問のセットごとに、アプリケーションに1つの質問と4つのオプションがあります。

4

2 に答える 2

2

AsyncTaskコンストラクターにパラメーターを渡すことができます。

DownLoadImagesTask dt= new DownLoadImagesTask("hello",1); //passing string and integer value
dt.execute(image_downloadView);

asynctaskで

String s;
int value;
public DownLoadImagesTask(String string, int i) {
    // TODO Auto-generated constructor stub
    s=string;
    value=1; 
}  
于 2013-03-25T10:20:39.803 に答える
0

最初のパラメーターのタイプをオブジェクトに変更して(またはカスタムパラメータークラス/ハッシュを作成する-最良のオプション)、複数のアイテムをオブジェクトに渡すことができます。

ImageView imgView = (ImageView) findViewById(R.id.imageView1);
String param = "parameter";

MyAsyncTask task = new MyAsyncTask();
task.execute(param, imgView);

private class MyAsyncTask extends AsyncTask<Object, Void, Void> {

    private String parameter;
    private ImageView imgView;

    @Override
    protected Void doInBackground(Object... params) {

        //Looping option
        for (Object object : params) {
            if (object instanceof String) {
                this.parameter = (String) object;
                //do_something
            } else if (object instanceof ImageView) {
                //do_something_else 
            }
        }

        //Direct access option

        this.parameter = (String) params[0];
        this.imgView = (ImageView) params[1];

        return null;
    }   

}

あなたの場合、あなたはビューを渡すことができます

new DownloadImagesTask().execute(image_downloadView, question_resultView);

private class DownloadImagesTask extends AsyncTask<View, Void, Bitmap> {

    TextView questionView = null;
    ImageView imageView = null;

    @Override
    protected Bitmap doInBackground(View... views) {
        for (View view : views) {
            if (view instanceof ImageView) {
                this.imageView = (ImageView) view;
            } else if (view instanceof TextView) {
                this.questionView = (TextView) view;
            }
        }

        return download_Image((String)imageView.getTag());

    } 

    @Override
    protected void onPostExecute(Bitmap result) {
        // imageView.setImageBitmap(result);
        downloaded_image = new BitmapDrawable(result);
        //setting question image
        questionView.setCompoundDrawablesWithIntrinsicBounds(null, null, null, downloaded_image);
    }

}
于 2013-03-25T10:41:56.957 に答える