1

我有,我需要從Android的AsyncTask的onPostExecute()方法來訪問的方法在我的活動的問題訪問活動的方法無法從Android的AsyncTask

我有2個活動都包含如下的常用方法:

(1)活性1 - > refreshUI()
(2)活性2 ----> refreshUI()

我得到一個AsyncTask呼叫GetDataAsyncTask(Activity a)這需要調用活動作爲參數

現在從我的活動1我會打電話給新的GetDataAsyncTask(Activity1.this).execute
和我上面的活動2一樣,我會打電話給新的GetDataAsyncTask(Activity2.this).execute

我的AsyncTask是如下:

public class GetDataAsyncTask extends AsyncTask<String ,Void , String> { 
    public Activity context; 

    public PostAsyncTaskHelper(Activity c) { 
     context = c; 
    } 

    protected String doInBackground(String... arg0) { 
     // Webservice calls 
    } 

    protected void onPostExecute(String result) { 
     if(result.equals("qq")) { 
      //Where I am not able to access refreshUI() 
      //method of any one of my activities 
      context.refreshUI() 
     } 
    } 
} 

誰能幫助我如何從AsyncTask得到任何的所謂活動的參考?

回答

2

定義一個接口爲您的活動

public interface MyActivityRefreshInterface 
{ 
public void refreshUI(); 
} 

您的活動必須被定義爲implements MyActivityRefreshInterface

你onPostExecute則可以投的上下文(MyActivityRefreshInterface)方面

+0

請務必檢查@wsanville評論回覆:引用到活動,我們都回答了你在同一時間有類似的答案的問題,但他的回答更周到 – CSmith 2012-08-08 20:55:03

5

製作具有方法refreshUI()interface,並使Activity1和Activity2都實現它。然後,您只需要將類型context轉換爲接口的類型。

另外,您需要注意在AsyncTask之內對Activity的引用,因爲在配置更改(如屏幕旋轉)的情況下,您將保留一個銷燬的Activity實例。 See here瞭解詳情,以及相應的example solution

1

因爲refreshUI不是Activity中的方法。它在你的特定的Acivity1和Activity 2類中,而不是來自Android的Activity類。你應該重構所以活性1和活性2從具有refreshUI方法就可以了BaseActivity繼承和標記在的AsyncTask範圍內的BaseActivity