2012-11-22 29 views
1

我見過的人敬酒或類似的東西后從onProgressUpdate()/ onPostExecute()方法在UI線程,但我想做些事情,我可以將JSONObject或JSONArray傳遞迴UI線程。傳遞的JSONObject/JSONArray從的AsyncTask到UI線程

在我的AsyncTask,我打電話Web服務,它返回一個JSONObject或JSONArray,我想採取並在UI線程上一個頁面片段顯示它。

有誰知道我能做到這一點,或可以點我一個教程,可以告訴我?

非常感謝!

+0

你可以從'doInBackground'方法返回'JSONObject'和接收/處理上'onPostExecute'該對象。在'onPostExecute'中,你可以訪問UI線程。 – sunil

回答

1

如果你看一看AsyncTask文件,你會看到,你可以幾乎一切實際上傳遞給onPostExecuteonProgressUpdate

private class JsonAsyncTask extends AsyncTask<URL, String, JSONObject> { 

    protected JSONObject doInBackground(URL... urls) { 
     // usrls to connect to server 
     publishProgress(/* some string you got, for example */ 
     // ... 
     return /* a json object you created from data received */; 
    } 

    protected void onProgressUpdate(String ... progress) { 
     // parse the string and display it 
    } 

    protected void onPostExecute(JSONObject result) { 
     // display results from the JSONObject 
    } 
} 

下面的例子可以更改爲任何其他參數,其中通用類型的排列方式如下:

  1. 第一種是doInBackground收到的類型。
  2. 第二是傳遞給publishProgress和由onProgressUpdate接收的類型。
  3. 三是從doInBackground返回類型和由onPostExecute接收。
0

你可以傳遞一個監聽器,你的異步任務,並把它onPostExecute

public interface MyListener { 
    public abstract void onResult(Object json); 
} 

MyTask mt = new MyTask(new MyListener() { 
    public void onResult(Object json) { 
    //catch your object here 
    } 
}); 
mt.execute(); 

class MyTask extends AsyncTask<Void, Void, Object> { 

    private MyListener listener; 

    public MyTask(MyListener listener) { 
    this.listener = listener; 
    } 

    protected void onPostExecute(Object result) { 
    if (listener != null) { 
     listener.onResult(result); 
    } 
    } 

    protected void doInBackground(Void... params) { 
    Object result = new Object(); 
    //your task 
    return result; 
    } 

}