2014-04-14 39 views
0

我想在Android中執行後臺任務以向API發送請求,但我無法按照自己的方式工作。單獨對象中的AsyncTask

這是我的腳本:

Activity類

public class SampleActivity extends Activity { 

    private ApiRequest ar; 
    private String parameters; 

    ... 

    private void callApi() { 
     this.ApiRequest = new ApiRequest(this.parameters); 
    } 
} 

ApiRequest類

public class ApiRequest { 

    private String response; 

    public ApiRequest(parameters) { 
     new BackgroundTask().execute(parameters); 
    } 

    protected class BackgroundTask extends AsyncTask<String, String, String> { 

     @Override 
     protected String doInBackground(String... args) { 
      // Do stuff here 
     } 

     @Override 
     protected void onPostExecute(String response) { 
      this.response = response; 
     } 

    } 

不知怎的,我似乎無法更新從onPostExecute方法響應字符串。我知道onPostExecute應該更新UI線程,但我想先更新對象,這基本上在UI線程中運行(我認爲)。這是如何完成的?我真的找不到任何關於它的事情。

回答

0
@Override 
     protected void onPostExecute(String response) { 
      this.response = response; 
     } 

在此範圍內,this指BackgroundTask的情況下,不計算ApiRequest。我很驚訝你的代碼甚至可以編譯。

將其更改爲ApiRequest.this.response = response

+1

說真的,那是全部?好吧,我現在感到很傻。但它確實有效。我之前嘗試過,至少我開始輸入它,但由於Eclipse無法找到ApiRequest類的變量,我認爲這不是正確的方法。非常感謝! :) 編輯:哦,它沒有編譯;) – Yordi

+0

因爲你的代碼中有很多其他錯誤隱藏了這個錯誤... public ApiRequest(parameters)... protected String doInBackground(String ... args ){ //在這裏做東西 } ...全部無效。如果你填寫正確,你會看到你的錯誤。 – ElDuderino

+0

對不起,我沒有提到它。這是我寫的繪製圖片的示例代碼。這不是我的實際代碼。其餘的我的實際代碼運行:) – Yordi