改造android - 如何进行顺序网络调用

时间:2015-07-17 17:45:48

标签: android retrofit

在我的Android应用程序中,我有3个网络呼叫,并且它们依赖于之前的呼叫。所以1必须完成,然后2可以去,最后3运行与前面的数据。所以我需要网络调用顺序运行才是目标。一个调用完成后,它会将数据传递给下一个调用,等等。我不想使用rxJava。有没有办法改造才能实现这一目标?我的项目已经在使用改造,因此我想继续使用它?我试过玩asynchTask,但它不干净,因为我使用改造,我想我会问。

1 个答案:

答案 0 :(得分:-1)

如果您正在使用异步Callbacks进行Retrofit,那么对于第一次网络呼叫,您可以传入生成的界面,该界面代表您正在与之交互的Web服务。在success方法中,您可以使用生成的接口的实例进行第二次网络调用,使用参数化类型success下的T中返回的数据,依此类推第二次回调中的第三次调用。例如:

class FirstCallback implements Callback<First> {

  private Api api;

  public FirstCallback(Api api) {
    this.api = api;
  }

  void success(First data, Response response) {
    api.secondCall(data, new SecondCallback(api))
  }
}

// somewhere else in your code
api.firstCall(new FirstCallback(api));

这是一个使用链接与异步调用的快速解决方案。使用同步调用,这很可能看起来更顺序,更容易在AsyncTask内读取,这将直接返回类型T。例如:

class MyTask extends AsyncTask<Void, Void, Void> {

  protected Void doInBackground(Void... params) {
    First first = api.firstCall();
    Second second = api.secondCall(first);
    // ...and so on until you return the final result
  }
}