[英]How to pass Context to AsyncTask?
如何在Async Task
類中傳遞上下文,該類是在與Main Activity
不同的 java 文件中編碼的,但它是從Main Activity
調用的?
下面是我的代碼:
@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();
}
您可以將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();
您可以在 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 的構造函數。
主活動.java
final MyAsyncTask task = new MyAsyncTask(getApplicationContext());
task.execute();
我在嘗試使用 Async 類壓縮圖像時遇到了同樣的問題。 我有一個構造函數,所以我只是添加了如下上下文
public BackgroundImageResize(Context context, Bitmap bm) {
if (bm != null){
mBitmap = bm;
}
this.context =context;
}
然后我像下面這樣打電話給班級,
public void uploadDevicePhoto(Uri imageUri){
BackgroundImageResize resize = new BackgroundImageResize(this,null);
resize.execute(imageUri);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.