2016-07-23 107 views
0

我試圖在Android Studio中開發應用程序。我陷入這種情況。 我正在使用AsyncHttp客戶端從MySQL數據庫中獲取表名列表。我從UI活動調用下面的函數來填充Spinner中的值。但是我無法返回values.The值在內部類中獲取,並在返回類型爲void的重寫方法中進行檢索。請查看代碼以進一步瞭解。返回內部類中返回類型void的過度氾濫方法

public void fetchAvailableLocations() 
{ 
    AsyncHttpClient httpClient = new AsyncHttpClient(); 
    RequestParams requestParams = new RequestParams(); 

    String _URL = ""; // Enter URL here 

    byte[] retreivedBytes; 

    httpClient.post(_URL, requestParams, responseHandler, new AsyncHttpResponseHandler() { 


     @Override 
     public void onSuccess(int i, cz.msebera.android.httpclient.Header[] headers, byte[] bytes) { 
      retrievedBytes = bytes; //This is where I'm stuck 

     } 

     @Override 
     public void onFailure(int i, cz.msebera.android.httpclient.Header[] headers, byte[] bytes, Throwable throwable) { 
      //make toasts 
     } 
    }); 
} 

一個解決方案我想到的是在UI活動創建一個靜態場,做一個回調函數,它接受字節作爲參數,並將靜態字段的字節參數,然後從調用它onSuceed方法。但是這條路線看起來很醜。有一種更簡單的方法嗎?

我有點新的Android編程,所以請幫助。

+0

是的,有。使用[EventBus](https://github.com/greenrobot/EventBus)在'onSuccess'中發佈一個帶有所包含數據的事件,只需在需要的地方傾聽該事件,並根據傳遞的數據做任何事情。 – Vucko

+0

@Vucko。感謝您的解決方案。但是這個方法(我們稱之爲B)由另一個onClick方法調用(我們稱之爲A)。如果我使用它,是不是基本上調用另一個方法(suscriber方法,比如說C),它必須將值存儲在一個靜態字段中,這樣方法A可以在控制從方法B返回時使用它?和我上面寫的其他解決方案不一樣嗎? 如果我錯了,請糾正我。這意味着我不明白這是如何工作的。 – Akhil

回答

1

不是擴展使用繼承:

public class fetchAvailableLocationsClass implements AsyncHttpResponseHandler { 

    public void fetchAvailableLocations() { 
     AsyncHttpClient httpClient = new AsyncHttpClient(); 
     RequestParams requestParams = new RequestParams(); 

     String _URL = ""; // Enter URL here 

     byte[] retreivedBytes; 

     httpClient.post(_URL, requestParams, responseHandler, this); 


     @Override 
     public void onSuccess (int i, cz.msebera.android.httpclient.Header[] headers, byte[] bytes) 
     { 
      retrievedBytes = bytes; //This is where I'm stuck 

     } 

     @Override 
     public void onFailure (int i, cz.msebera.android.httpclient.Header[] headers, 
     byte[] bytes, Throwable throwable){ 
      //make toasts 
     } 

    } 
} 
+0

謝謝。但是這個方法是一個類的一部分,它有其他方法,每個方法在onSucess覆蓋中使用不同的邏輯。另外,我還沒有擴展響應處理程序。我直接使用它。 – Akhil