我有一个方法需要从另一个背景方法的值返回。问题是返回总是在后台方法返回数据之前运行。
请查看以下代码,第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
}
答案 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
}
}