从onPostExecute返回一个对象()方法

问题描述 投票:0回答:2

我有我要处理多个API调用和返回一个列表返回到我的活动如下AsyncTask类。我有努力使这项工作的问题。

我怎样才能返回一个对象回到我的活动时onPostExecute()方法不返回任何东西?

public class NetworkCall extends AsyncTask<Call, Void, List<Student>> {

@Override
protected List<Students> doInBackground(Call... calls) {
    try {
        Call<Students> call = calls[0];
        Response<Students> response = call.execute();
        return response.body().getStudents();

    } catch (IOException e) {
        e.printStackTrace();
    }

    return null;
    }

    @Override
    protected void onPostExecute(List<Students> students) { 

    }
}
android rest android-asynctask retrofit2
2个回答
0
投票

其中一个选项是创建接口和回调使用。在异步任务等级:

public class NetworkCall extends AsyncTask<Call, Void, List<Student>> {

public interface NetworkCallback{
    void onResponse(List<Students> students);
}

private NetworkCallback callback;

public void setCallback(NetworkCallback callback){
    this.callback = callback;
}

@Override
protected List<Students> doInBackground(Call... calls) {
    try {
        Call<Students> call = calls[0];
        Response<Students> response = call.execute();
        return response.body().getStudents();

    } catch (IOException e) {
        e.printStackTrace();
    }

    return null;
    }

    @Override
    protected void onPostExecute(List<Students> students) { 
        callback.onResponse(students)
    }
} 

现在您的活动实现接口,并通过制定者提供异步任务。

public class StudentsActivity extends AppCompatActivity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //.... you setup for activity

    NetworkCall networkCall = new NetworkCall();
    networkCall.setCallback(new NetworkCall.NetworkCallback() {
      @Override
      public void onResponse(List<Students> students) {
        //update your UI here
      }
    });
  }
}

基于该Docs onPostExecute主UI线程上运行,因此没有必要在runOnUiThreadRunnable


0
投票

可以实现这样的:

你的界面:

public interface OnTaskCompleted{
  void onTaskCompleted(Object o);
}

您的活动:

public class YourActivity implements OnTaskCompleted{
// your Activity

@Override
void onTaskCompleted(Object o){

}

和你的AsyncTask:

public class YourTask extends AsyncTask<Object,Object,Object>{ //change Object 
to required type
private OnTaskCompleted listener;

public YourTask(OnTaskCompleted listener){
    this.listener=listener;
   }

// required methods

protected void onPostExecute(Object o){
    // your stuff
    listener.onTaskCompleted(o);
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.