2015-08-16 60 views
0

我正在使用Android loopj庫有異步HTTP客戶端。我需要將responseBody設置爲像下面這樣的圖像對象的屬性,但由於是異步的,將會運行return語句,而圖像對象始終爲空。非空洞方法中的異步

public Image uploadImage(boolean async) { 
     Image image = new Image(); 

     HttpClient.post(getFinalUrl(async), makeRequestParams(), new AsyncHttpResponseHandler 
       () { 
      @Override 
      public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) { 
       UploadResponse[] uploadResponses = GsonParser.getArrayFromGson(responseBody, 
         UploadResponse[].class); 
       UploadResponse response = uploadResponses[0]; 
       String st = response.getContent(); 
       image.setImageAddress(st); 
      } 

      @Override 
      public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) { 
       Log.d("injaro", error.getMessage()); 
      } 
     }); 


    } 

回答

1

異步方法不以這種方式工作。您應該向它們傳遞一個回調對象,該回調對象將在響應可用時調用。

因此,如果你定義一個回調接口是這樣的:

public interface ImageCallback { 
    void onImageReceived(Image image); 
} 

然後,你可以創建2種方法(一種同步和異步一個)是這樣的:

public Image uploadImage() { 
... 
} 

public void uploadImageAsync(ImageCallback callback) { 
... 
} 

在這一點上,你會只需調用你需要的方法 - 即按鈕點擊監聽器會調用異步調用(因爲你不想阻塞UI線程),但你的後臺服務可以安全地調用同步調用。

+0

你救了我,教我一件新東西,謝謝。 – Alireza