2017-07-26 56 views
0

我有一個方法,需要從另一個背景方法的值返回。問題是在返回數據之前,行返回總是運行。如何使方法在返回值之前等待偵聽器的結果?

請看下面的代碼,行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

這是直到一些異步後臺任務執行工作,停止你的主線程的最佳方法。你應該尋找其他更好的選擇,比如'AsynTask'或'Handler'。 –

回答

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 
    } 
} 
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 
} 
相關問題