2011-06-09 44 views
1

我有一個活動對象myAct。 myAct創建並調用我的httpGetter對象,它擴展了AsyncTask將AsyncTask對象的html傳遞迴調用活動

httpGetter做得很好!我的進度條工作得很好。它獲取HTML數據。我在httpGetter.onPostExecute裏面放了一杯吐司.....有HTML!

如何將該數據傳回給onPostExecute中的活動?我甚至不知道該如何谷歌。我嘗試了幾件事,我看到的所有示例都更新了textView,或者只是在onPostExecute中顯示了數據。我想恢復調用Activity中的事情。在我的httpGetter類中,我創建了一個方法來設置調用Activity的句柄,以爲我可以用結果String調用方法。沒有運氣。

回答

1

好的,所以有更多的Google搜索提出了以下解決方案。

myAct需要一個接口

public interface WebServiceListener 
{ 
    public void onHTTPGetComplete (ArrayList<String> arrayList); 
} 
public void onHTTPGetComplete (ArrayList<String> arrayList) { 
     String Response = arrayList.get(0); 
     Toast worked = Toast.makeText(mainPage.this, Response, Toast.LENGTH_LONG); 
     worked.show(); 
} 

和異步在onPostExecute需要調用它

listener.onHTTPGetComplete(myList中);

0

如何使用intent.putExtra()將意圖從httpGetter發送到myAct來傳回您的數據?爲了這個工作,當你創建AsyncTask時,你需要讓httpGetter知道myAct的上下文。

+0

我也想過這個解決方案,但是擔心首先播放這個打算並聽取它的開銷。 – wired00 2012-05-31 06:19:25

0

從您的AsyncTask中傳回一個包含HTML的包。例如:

@Override 
protected Bundle doInBackground(String... params) { 

    Bundle b = new Bundle(); 

    HttpGet get = new HttpGet("myurl"); 

    HttpResponse response = HttpManager.execute(get); 
    HttpEntity entity = response.getEntity(); 
    String raw_result = EntityUtils.toString(entity); 
    entity.consumeContent(); 

    b.putString(IService.RESULT, raw_result); 
    b.putInt(IService.STATUS, IService.STATUS_FINISHED); 

    return b; 

} 


// override this in your activity as an anon inner class 
@Override 
protected void onPostExecute(Bundle b) { 
    int resultCode = b.getInt(IService.STATUS); 
} 
0

我做的是增加一個抽象的消費者方法我HttpAsyncTask,而我將通過將數據從onPostExecute返回服務器的方式。現在調用它的活動需要實現消費者方法,從而使活動訪問數據:-)