如何使方法在返回值之前等待侦听器的结果?

时间:2017-07-26 18:16:15

标签: java android

我有一个方法需要从另一个背景方法的值返回。问题是返回总是在后台方法返回数据之前运行。

请查看以下代码,第8行始终在第5行之前运行。 我该如何处理这个案子?

 public String methodAbc(){
      int result = 0;
      doSomeWorkWithCallBack(new ResultListener() {
           @Override
           public void onFinish(int data)){
               result = data; //line 5
           }
      }
      return result; // line 8
    }

2 个答案:

答案 0 :(得分:2)

由于您正在使用回调,因此methodAbc()不应返回结果。

所以不要这样做:

public void methodExpectingResult(){
    int result = methodAbc();
    // do something with the result
}

你可以这样做:

public void methodExpectingResult(){
    methodAbc();
    // do nothing
}

public void methodAbc() {
    int result = 0;
    doSomeWorkWithCallBack(new ResultListener() {
        @Override
        public void onFinish(int data) {
            onMethodAbcReturn(data);
        }
    });

}

private void onMethodAbcReturn(int data) {
    // do something with the result
}

答案 1 :(得分:0)

除非这是线程,否则你不应该遇到这个问题。如果这是线程化的,那么最好将它包装在自定义的AsyncTask中。

class myAsyncTask extends AsyncTask<Void, Void, Result> {
    @Override
    protected Result doInBackground(Void... params) {
        Result result = new Result();
        // do some work
        // don't do anything in here that works on the UI :: this is a asynchronous call
        return result;
    }
    @Override
    protected void onPostExecute(Result result) {
        super.onPostExecute(result);
        // do something with result
    }
}