如何将上下文传递给异步任务?

2022-09-02 04:55:12

如何在类中传递上下文,该类在不同的java文件中编码,但它从主活动中调用?Async TaskMain 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();
    }

答案 1

您可以将实例作为构造函数参数传递(并保留 a 以避免内存泄漏)。ContextWeakReference

例如:

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();

答案 2

您只需在 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();

推荐