如何应用同步任务改造android

时间:2016-05-17 12:14:18

标签: android synchronization retrofit

我在我的一款应用中使用了改装API。 以下是代码: -

for(int i=0; i< mFileArrayList.size();i++){


    WebServiceManager.getInstance().getFrogService().postNotes("HI", "Hello", "Done", new Callback<NotesResponse>() {

            @Override
            public void success(NotesResponse response, retrofit.client.Response response2) {
                System.out.println(response);
                Toast.makeText(AllKPIActivity.this, "Success", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void failure(RetrofitError error) {
                System.out.println(error);
                Toast.makeText(AllKPIActivity.this, "Fail", Toast.LENGTH_SHORT).show();
            }
        });


    }

正在发生的事情是在成功到来之前,循环继续并且失败来临。 我想要的是当第一次成功来临时,那么只有循环才会前进。 请帮忙,我该如何实现这个目标?

2 个答案:

答案 0 :(得分:7)

如果我是你,我会重新组织代码以手动完成循环。像这样的东西

int i = 0;

private void fowardLoop(){
   if(i => mFileArrayList.size()){
      return; //loop is finished;
   }

   i++;
   WebServiceManager.getInstance().getFrogService().postNotes("HI", "Hello", "Done", new Callback<NotesResponse>() {

        @Override
        public void success(NotesResponse response, retrofit.client.Response response2) {
            System.out.println(response);
            Toast.makeText(AllKPIActivity.this, "Success", Toast.LENGTH_SHORT).show();
            forwardLoop(); // loop continues only if you get the success callback from previous request.
        }

        @Override
        public void failure(RetrofitError error) {
            System.out.println(error);
            Toast.makeText(AllKPIActivity.this, "Fail", Toast.LENGTH_SHORT).show();
            // the loop breaks when there is failure callabck.
        }
    });
}

只需使用forwardLoop()方法启动你想要的循环

改造仍然是异步的,但应用程序的行为符合您的要求。 希望它有用,我没有测试这个解决方案。

答案 1 :(得分:0)

您可以通过不传递回调来进行同步改装请求

for(int i=0; i< mFileArrayList.size();i++){ 
        NotesResponse response = WebServiceManager.getInstance().getFrogService().postNotes("HI", "Hello", "Done");
}

确保从主线程运行此代码。有关参考,请参阅本教程https://futurestud.io/blog/retrofit-synchronous-and-asynchronous-requests