如何在Async Task
类中传递上下文,该类在Main Activity
的不同java文件中编码但是从主活动调用?
以下是我的代码:
@Override
protected void onPostExecute(List<Movie_ModelClass> result) {
super.onPostExecute(result);
if (result != null) {
Movie_Adapter movieAdapter = new Movie_Adapter(new MainActivity().getApplicationContext() , R.layout.custom_row, result);
MainActivity ovj_main = new MainActivity();
ovj_main.lv_main.setAdapter(movieAdapter);
} else {
Toast.makeText(new MainActivity().getApplicationContext() ,"No Data Found", Toast.LENGTH_LONG);
}
if (progressDialog.isShowing()) {
progressDialog.dismiss();
}
答案 0 :(得分:65)
您可以将Context
实例作为构造函数参数传递(并保留WeakReference
以避免内存泄漏。)
例如:
public class ExampleAsyncTask extends AsyncTask {
private WeakReference<Context> contextRef;
public ExampleAsyncTask(Context context) {
contextRef = new WeakReference<>(context);
}
@Override
protected Object doInBackground(Object[] params) {
// ...
}
@Override
protected void onPostExecute(Object result) {
Context context = contextRef.get();
if (context != null) {
// do whatever you'd like with context
}
}
}
执行:
new ExampleAsyncTask(aContextInstance).execute();
答案 1 :(得分:0)
您只需在AsyncTask的构造函数中传递上下文。
<强> MyAsyncTask.java 强>
public class MyAsyncTask extends AsyncTask<Void, Integer, List> {
private final Context mContext;
public MyAsyncTask(final Context context) {
mContext = context;
}
}
然后只需在onPostExecute()方法中使用mContext变量。
当您从MainActivity调用AsyncTask时,将上下文传递给MyAsyncTask的构造函数。
<强> MainActivity.java 强>
final MyAsyncTask task = new MyAsyncTask(getApplicationContext());
task.execute();
答案 2 :(得分:0)
在尝试使用Async类压缩图像时遇到了相同的问题。我有一个构造函数,所以我只添加了以下内容
public BackgroundImageResize(Context context, Bitmap bm) {
if (bm != null){
mBitmap = bm;
}
this.context =context;
}
然后我像下面这样叫课,
公共无效的uploadDevicePhoto(Uri imageUri){
BackgroundImageResize resize = new BackgroundImageResize(this,null);
resize.execute(imageUri);
}