1

onProgressUpdate()/onPostExecute() メソッドから UI スレッドに Toast などを投稿する人を見てきましたが、JSONObject または JSONArray を UI スレッドに戻すことができるようにしたいと考えています。

私の AsyncTask では、JSONObject または JSONArray を返す Web サービスを呼び出しています。それを取得して、UI スレッドのページ フラグメントに表示したいと考えています。

誰かがこれを行う方法を知っていますか、または私に見せることができるチュートリアルを教えてくれますか?

本当にありがとう!

4

2 に答える 2

1

ドキュメントを見るAsyncTaskと、実際にはほとんどすべてをonPostExecuteandに渡すことができることがわかり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
     }
 }

以下の例は、ジェネリック型が次のように順序付けられている他のパラメーターに変更できます。

  1. 1 つ目は、 が受け取るタイプdoInBackgroundです。
  2. 2 番目は、 に渡されpublishProgressて受信される型onProgressUpdateです。
  3. 3 番目は からの戻り値の型でdoInBackgroundあり、 によって受信されonPostExecuteます。
于 2012-11-22T07:06:30.123 に答える
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;
  }

}
于 2012-11-22T07:07:19.253 に答える