如何Async Task在不同的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();
}
Run Code Online (Sandbox Code Playgroud)
ear*_*jim 71
您可以将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
}
}
}
Run Code Online (Sandbox Code Playgroud)
并执行:
new ExampleAsyncTask(aContextInstance).execute();
Run Code Online (Sandbox Code Playgroud)
您只需在 AsyncTask 的构造函数中传递上下文即可。
MyAsyncTask.java
public class MyAsyncTask extends AsyncTask<Void, Integer, List> {
private final Context mContext;
public MyAsyncTask(final Context context) {
mContext = context;
}
}
Run Code Online (Sandbox Code Playgroud)
然后只需在 onPostExecute() 方法中使用 mContext 变量。
当您从 MainActivity 调用 AsyncTask 时,您将上下文传递给 MyAsyncTask 的构造函数。
MainActivity.java
final MyAsyncTask task = new MyAsyncTask(getApplicationContext());
task.execute();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12612 次 |
| 最近记录: |