0

ユーザーがログインボタンをクリックしたときに、Webサービスにアクセスしたいと思います。私はそうするために次のコードを持っています。

public void onClick(final View view) {
  String orgKey = inputCompany.getText().toString();
  new getAppInfo().execute("http://example.webservice.com");

これが私のgetAppInfo

   private class getAppInfo extends AsyncTask<String, Void, String> {
    /** The system calls this to perform work in a worker thread and
      * delivers it the parameters given to AsyncTask.execute() */
    @Override
    protected String doInBackground(String... urls) {
        String xml = null;
        try {
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpGet httpGet = new HttpGet(urls[0]);

            HttpResponse httpResponse = httpClient.execute(httpGet);
            HttpEntity httpEntity = httpResponse.getEntity();
            xml = EntityUtils.toString(httpEntity);

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // return XML
        return xml;
    }

    /** The system calls this to perform work in the UI thread and delivers
      * the result from doInBackground() */
    @Override
    protected void onPostExecute(String result) {
        Document doc = GetDomElement(result); // getting DOM element

        NodeList nl = doc.getElementsByTagName("details");
        getChildElements(nl); 
    }

doBackground実行されていますが、実行されていonPostExecuteません。on Clickから移動しましたが、機能しましたが、onClick内に必要です。

onPostExecuteonClick内で実行するにはどうすればよいですか?

4

3 に答える 3

0

onPostExecute完了すると常に呼び出されdoInBackgroundます。この動作を確認するには、onPostExecuteにログインしてみてください。


doInBackgroundメソッドに一般的なcatchステートメントを追加します。

catch(Exception e){
    e.printStackTrace();
}
于 2012-08-24T16:12:32.647 に答える
0

まず、一般的なポインタ-Javaのクラス名は通常大文字のCamelCaseであり、メソッド名は小文字のキャメルケースです。

あなたの質問に移ります-あなたはたまたまアクティビティを終了するのですか、それともタスクを生成したダイアログを閉じるのですか?そのonclickハンドラーの外部で機能する場合、AsyncTaskがそのメソッドを実行しようとしているHandlerオブジェクトを何かが破壊していると思います。

Runnable(AsyncTaskを実行する)を現在のアクティビティのハンドラーに投稿してみてください。

于 2012-08-24T16:28:47.363 に答える
0

構文は正しいです。バックグラウンドプロセスで例外が発生し、バックグラウンドスレッドが停止する可能性があります。doInBackgroundの最後にログステートメントを配置するか、試行にキャッチ(Throwable t)を追加します。

信頼してください-doInBackgroundが正常に完了する限り、呼び出されます。

余談ですが、DOM解析はバックグラウンドでも実行する必要があります。現時点では、UIスレッドで実行しているため、ANRポップアップが発生する可能性があります。

于 2012-08-24T16:32:29.300 に答える