1

リクエストの作成と解析にksoap2-Androidを使用しています。ただし、それを使用したい場合は、非同期で実行する必要があります。だから私はそのための新しいスレッドを作成することを選択します。

このように見えます。この場合は重要ではないため、ロジックリクエストと解析をすべて投稿するわけではありません。

  new Thread(new Runnable() {
            public void run() {

                String answer = WebServiceRequests.About();

                     try{

                     }catch (Exception e) {
                        // TODO: handle exception
                         e.printStackTrace();
                    }
            }
          }).start();

だから私は答えの文字列でリクエストを受け取りますが、今私のGUIを更新する方法は?試してみると、そのスレッドで更新できないという例外が発生します。

これに対する解決策を投稿してください。HandlerまたはAsyncTaskを使用した場合、または私の例で動作するように作成した場合。

ありがとう。

4

2 に答える 2

0

非同期タスクの場合、AndroidはクラスAsyncTaskを備えています。

このクラスでは、2つのメソッドをオーバーライドできます。最初の方法は、バックグラウンド(別のスレッド)にある必要があるコード用です。2番目のメソッドは、最初のメソッドが終了した後にUIスレッドで呼び出されます。

詳しくはandroid.os.AsyncTaskをご覧ください

于 2012-04-06T10:19:42.447 に答える
0

AsnycTaskは常に最初の推奨事項です。これまでにこれを行ったことがない場合は、この公式開発ガイド、サンプルコードをお読みください。

private class MyAsyncTask extends AsyncTask<Void, Void, String> {
 protected String doInBackground(Void... params) {
   String answer = WebServiceRequests.About();
   return answer;
 }

 protected void onPostExecute(String answer) {
   // Update UI.
   showDialog("Answer " + answer);
 }

}

AsyncTaskを開始するには:

new MyAsyncTask().execute();

onPostExecuteメソッドは、バックグラウンドスレッド(別名doInBackground)が終了するとすぐに、将来のある時点でUIスレッドで呼び出されることが保証されています。基盤となるフレームワークは、私たちのためにすべての汚い仕事を処理します。

お役に立てれば。

于 2012-04-06T10:21:14.677 に答える