获取异步任务的返回

时间:2018-05-07 19:35:02

标签: java android

我有一个在线请求json的课程。工作正常,但功能无效,我需要对活动返回true或false的函数。这是一个例子:

public class Async extends AbstractService{
  public void getData(fina Context context){
    JSONObject param = new JSONObject();
    try {
        param.put("field_1",   "1");
        param.put("field_3",  "2");
        param.put("field_3", "3");

    }catch (Exception e) {}


    requester = new HttpRequestController().sendPost("auth/device", param, new HttpRequestController.CallBackRequest(){
        @Override
        public void run(final String result) {
            new Thread(new Runnable() {

                @Override
                public void run() {
                     if(resultObj.optBoolean("success")) {
                       //here return true or false
                     }
                }
            }).start();

            System.out.println("test auth 1: " + result);
        }
    });
  }
}

public class MainActivity extends baseActivity{
 ....
     protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

     Async auth = new Async();
     auth.getUserDevice(this); //how to test is true or false ?
   }

}

3 个答案:

答案 0 :(得分:1)

由于某种原因,该函数为void。异步函数由于其异步性质而不应返回某些内容。不可能依赖你不知道什么时候(或者甚至是否会)返回某些东西。

如果您有兴趣在成功完成异步任务的情况下执行某些操作,我认为是这种情况,您应该完全这样做。这是一个活动操作,它完全在您知道操作已完成的代码块内部开始。此操作可以重置状态,或发出事件以通知对此类事件感兴趣的任何人。

答案 1 :(得分:1)

像这样使用AsyncTask:

public class MyTask extends AsyncTask<Void,Boolean,Boolean> {
    JSONObject param;
    MyTask(){
        param = new JSONObject();
        try {
            param.put("field_1",   "1");
            param.put("field_3",  "2");
            param.put("field_3", "3");

        }catch (Exception e) {}
    }

    @Override
    protected Boolean doInBackground(Void... voids) {
            // do your request call and get result then,

             return resultObj.optBoolean("success");
    }
}

然后像这样执行:

public class MainActivity extends baseActivity {
      ....

    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        boolean b = new MyTask().execute().get();
    }
}

答案 2 :(得分:0)

将void更改为布尔值,并且在函数内你可以验证如果某个json确实已经发送到某个地方或者生成了,则放置一个条件: if(json.length()&gt; 0) return true;