我有这堂课:
public class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
ImageFromWeb ifw;
private String url;
private final WeakReference<ImageView> imageViewReference;
public DownloadImageTask(ImageView imageView) {
imageViewReference = new WeakReference<ImageView>(imageView);
}
@Override
protected Bitmap doInBackground(String... params) {
url = params[0];
try {
return BitmapFactory.decodeStream(new URL(url).openConnection().getInputStream());
} catch (MalformedURLException e) {
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
@Override
protected void onPostExecute(Bitmap result) {
if (isCancelled()) {
result = null;
}
if (imageViewReference != null) {
ImageView imageView = imageViewReference.get();
if (imageView != null) {
imageView.setImageBitmap(result);
}
}
}
@Override
protected void onPreExecute() {
if (imageViewReference != null) {
ImageView imageView = imageViewReference.get();
if (imageView != null) {
---------> imageView.setImageResource(R.drawable.pw);
}
}
}
}
和主要活动:
public class ImageFromWeb extends Activity {
private String path = "http://....";
private ImageView imageView;
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.main);
ImageView mChart = (ImageView) findViewById(R.id.imview);
mChart.setTag(path);
new DownloadImageTask(mChart).execute(path);
}
}
我想在箭头(在DownloadImageTask类中)放置一个警告对话框!我怎样才能做到这一点?因为这个类不是活动。
谢谢:)
答案 0 :(得分:4)
更改构造函数并传递Context
对象
Context mContext;
public DownloadImageTask(ImageView imageView,Context mContext) {
imageViewReference = new WeakReference<ImageView>(imageView);
this.mContext = mContext;
}
现在您可以使用此 上下文 来创建对话框
您甚至可以将mContext
投射到您的Activity类并调用Activity
答案 1 :(得分:0)
将Async Task移动到您的活动中并使用它来调用您的DownloadImageTask类&amp;方法。这将使您的生活更轻松。
答案 2 :(得分:0)
将Activity实例传递给要显示对话框的类,然后选中
if(!actvity.isFinishing){
//show dialog
}
答案 3 :(得分:0)
您可以在应用程序中拥有静态上下文,如下所示:
public static Context CurrentContext;
和一个自定义抽象Activity,在创建时设置currentContext,如下所示:
public abstract class CustomActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyApplication.CurrentContext = this;
}
}
然后你会得到这样的背景:
AlertDialog.Builder dlgBuilder = new AlertDialog.Builder(MyApplication.CurrentContext);
dlgBuilder.setTitle("Context Example");
dlgBuilder.setMessage("I am being shown from the application Static context!");
dlgBuilder.setNeutralButton("Ok", null);
dlgBuilder.show();
通过这种方式,您无需担心上下文,无论您是在后台任务中还是直接在一个Activity中,它都适用于大多数情况。
希望这有帮助!