android - 如何从我的 doInBackground 任务中获取返回值?

标签 android android-studio android-asynctask

我是 android studio 的新手,我正在尝试为我的网络操作执行 AsyncTask。

问题是从它获取返回变量,以便能够在 imageview 中设置图像。 imgDisplay.setImageBitmap(var)

public class ZoomActivity  extends Activity {


    @SuppressLint("NewApi")



    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_zoom);

        Intent intent = getIntent();
        String url2 = intent.getStringExtra("image");


        ImageView imgDisplay;
        Button btnClose;


        imgDisplay = (ImageView) findViewById(R.id.imgDisplay);
        btnClose = (Button) findViewById(R.id.btnClose);


        //Bitmap var = return of doInBackground??????????
        imgDisplay.setImageBitmap(var);


        btnClose.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                ZoomActivity.this.finish();
            }
        });


    }

    private class MyTask extends AsyncTask<String, Integer, String> {

        @Override
        protected String doInBackground(String... Params) {
            String myString = Params[0];
            try {
                URL url = new URL(URL???); //how to pass url2 var here?
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                connection.setDoInput(true);
                connection.connect();
                InputStream input = connection.getInputStream();
                Bitmap myBitmap = BitmapFactory.decodeStream(input);
                return myBitmap; ??????????
            } catch (IOException e) {
                e.printStackTrace();
                return null;
            }
        }
    }

}

有什么例子吗?

最佳答案

首先,声明这个异步任务类:

class MyTask extends AsyncTask<String,Void,Bitmap>{

    @Override
    protected Bitmap doInBackground(String... strings) {
        String myString = Params[0];
        try {
            URL url = new URL(myString);
            Bitmap myBitmap = BitmapFactory.decodeStream(url.openConnection().getInputStream());
            return myBitmap;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
        return null;
    }

    @Override
    protected void onPostExecute(Bitmap bitmap) {
        super.onPostExecute(bitmap);
        imgDisplay.setImageBitmap(bitmap);
    }
}

您的 zoomActivity 更改为:

public class ZoomActivity  extends Activity {
ImageView imgDisplay;
@SuppressLint("NewApi")
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_zoom);

    Intent intent = getIntent();
    String url2 = intent.getStringExtra("image");



    Button btnClose;


    imgDisplay = (ImageView) findViewById(R.id.imgDisplay);
    btnClose = (Button) findViewById(R.id.btnClose);


    //call asynctask
    new MyTask().execute(url2);


    btnClose.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            ZoomActivity.this.finish();
        }
    });


}

希望这能行得通

关于android - 如何从我的 doInBackground 任务中获取返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42514461/

相关文章:

java - Android AsyncTask fragment 加载

java - Android、Web 服务、AsyncTask 请帮助菜鸟/确保我开始正确

android - 在 Nexus-S 上读写 Mifare Classic 1K RFID

java - 新安卓工作室 : Cannot resolve symbol 'ContextCompat'

android - 以 block 的形式保存位图图像

java - 如何在每次单击按钮时显示 Admob 插页式广告

java - 在 Android 上下载图像并保留 Exif 数据

android - 我如何使用android studio中下载的存档同步gradle

android - 无法合并 dex multiDexEnabled true 也不起作用

java - 在 AsyncTask 中运行 CountDownTimer 会抛出 java.lang.RuntimeException - Looper.prepare()