按照教程进行操作我已经设置了一个应用程序,它应该能够从 URL 下载图像并将其放入 ImageView 中。唯一的问题是它找不到 findViewById,因为它位于 Activity 类而不是 AsyncTask 类中。代码在这里:
package com.example.weather2;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.ImageView;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class ImageDownloader
extends AsyncTask<String, Integer, Bitmap> {
protected void onPreExecute(){
//Setup is done here
}
@Override
protected Bitmap doInBackground(String... params) {
//TODO Auto-generated method stub
try{
URL url = new URL(params[0]);
HttpURLConnection httpCon =
(HttpURLConnection)url.openConnection();
if(httpCon.getResponseCode() != 200)
throw new Exception("Failed to connect");
InputStream is = httpCon.getInputStream();
return BitmapFactory.decodeStream(is);
}catch(Exception e){
Log.e("Image", "Failed to load image", e);
}
return null;
}
protected void onProgressUpdate(Integer... params){
//Update a progress bar here, or ignore it, I didn't do it
}
protected void onPostExecute(Bitmap img){
ImageView iv = (ImageView) findViewById(R.id.imageView); //here is where the issue is
if(iv!=null && img!=null){
iv.setImageBitmap(img);
}
}
protected void onCancelled(){
}
}
当我注释掉存在问题的行时,我没有收到任何错误,这让我认为它正在工作,但我无法判断,因为没有发布图像。
任何解决此问题的帮助将不胜感激。
findViewById
是 Activity 类的一个方法。
你有
public class ImageDownloader
extends AsyncTask<String, Integer, Bitmap> // not a activity class
如果您需要将数据返回到活动中,您可以使用接口作为活动的回调。
我会更新 Activity 本身的 ui。看@blackbelts的回答
如何从 AsyncTask 返回布尔值? https://stackoverflow.com/questions/16752073/how-do-i-return-a-boolean-from-asynctask
Or
使 AsyncTask 成为 Activity 类的内部类并更新 uionPostExecute
另外,您可能会发现 Alex Loockwood 的博客很有趣
http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)