我見過的人敬酒或類似的東西后從onProgressUpdate()/ onPostExecute()方法在UI線程,但我想做些事情,我可以將JSONObject或JSONArray傳遞迴UI線程。傳遞的JSONObject/JSONArray從的AsyncTask到UI線程
在我的AsyncTask,我打電話Web服務,它返回一個JSONObject或JSONArray,我想採取並在UI線程上一個頁面片段顯示它。
有誰知道我能做到這一點,或可以點我一個教程,可以告訴我?
非常感謝!
我見過的人敬酒或類似的東西后從onProgressUpdate()/ onPostExecute()方法在UI線程,但我想做些事情,我可以將JSONObject或JSONArray傳遞迴UI線程。傳遞的JSONObject/JSONArray從的AsyncTask到UI線程
在我的AsyncTask,我打電話Web服務,它返回一個JSONObject或JSONArray,我想採取並在UI線程上一個頁面片段顯示它。
有誰知道我能做到這一點,或可以點我一個教程,可以告訴我?
非常感謝!
如果你看一看AsyncTask
文件,你會看到,你可以幾乎一切實際上傳遞給onPostExecute
和onProgressUpdate
:
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
}
}
下面的例子可以更改爲任何其他參數,其中通用類型的排列方式如下:
doInBackground
收到的類型。publishProgress
和由onProgressUpdate
接收的類型。doInBackground
返回類型和由onPostExecute
接收。你可以傳遞一個監聽器,你的異步任務,並把它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;
}
}
你可以從'doInBackground'方法返回'JSONObject'和接收/處理上'onPostExecute'該對象。在'onPostExecute'中,你可以訪問UI線程。 – sunil