如何等待HTTP请求在下一次发送之前有响应

时间:2015-10-28 11:07:38

标签: android

我必须将一些东西从数据库发送到服务器。所以,我调用db方法,并获得一个有很多位置的游标。我需要为光标的每个位置发送一个httprequest,但只在服务器收到第一个请求时发送第二个请求,并发送正确的答案。我有这段代码:

final Cursor cursor = db.getData();
Thread thread=new Thread(new Runnable() {
      @Override
      public void run() {
           if(cursorContadores.moveToFirst()){
                  do{
                  Call<String> peticion = interfaz.saveToServer(cursor.getString(1), cursor.getString(2));
                  peticion.enqueue(new Callback<String>() {
                       @Override
                       public void onResponse(Response<String> response, Retrofit retrofit) {

                              if(response.message().equals("ok")){

                              }else{

                              }
                       }

                       @Override
                       public void onFailure(Throwable t) {

                                            }
                                        });

                  }while (cursorContadores.moveToNext());
           cursorContadores.close();
           db.close();
                  }
                            }
        });
thread.start();

这样,我认为它不会等到do while块中的每次迭代结束,才能开始下一次迭代。

我怎么能实现这个目标?我能读懂什么来学习如何?

谢谢。

2 个答案:

答案 0 :(得分:0)

在您的Http响应中,您可以检查响应代码。 例如,如果成功接收的响应为200,则可以执行以下操作:

HTTPResponse response;

if(response.getStatusLine().getStatusCode()==200){

 //SEND NEXT

}

这样,您可以在收到上一个请求后发送下一个请求。 我希望我能正确理解这个问题。 谢谢。

答案 1 :(得分:0)

这绝对可以完成AsyncTask...doInBackground()处理网络请求,一旦doInBackground()完成,就会在响应中触发onPostExecute()在那里你可以执行任何发送第二次请愿的代码。

如果你需要一些更通用和可重复使用的东西,你可能想要实现一个回调..我将下一步称为客户端,AsyncTask作为服务器。

创建一个新界面并创建一些方法存根。

public interface MyEventListener {
    public void onEventCompleted();
    public void onEventFailed();
} 

让您的客户端将MyEventListener的实例传递给服务器。执行此操作的典型方法是让客户端实现接口(MyEventListener)并将其自身传递给服务器。

public class MyActivity implement MyEventListener {

public void startEvent() {
    new MyAsyncTask(this).execute();
}           

@Override
public void onEventCompleted() {
    // TODO
}

@Override
public void onEventFailed() {
    // TODO
  }
}

在服务器的onPostExecute上,检查回调是否为null并调用相应的方法。

    public class MyAsyncTask extends AsyncTask<Void, Void, Void> {
    private MyEventListener callback;

    public MyAsyncTask(MyEventListener cb) {
        callback = cb;
    }

    [...]

    @Override
    protected void onPostExecute(Void aVoid) {
        if(callback != null) {
            callback.onEventCompleted();
        }
    }
}

Check similar reference

learn more reference