0
public class HttpPostTask extends AsyncTask<Void, Integer, Void> {

    TextView txtStatus = (TextView)findViewById(R.id.txtStatus);

    @Override
    protected Void doInBackground(Void... params) {

        EditText editText1 = (EditText)findViewById(R.id.editText1);

        try {

            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("http://83.254.xx.xx/android/service.php");

            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
            nameValuePairs.add(new BasicNameValuePair("action", "savedata"));
            nameValuePairs.add(new BasicNameValuePair("data", editText1.getText().toString()));
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

            HttpResponse response = httpclient.execute(httppost);

        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    protected void onPreExecute(){

        Log.i("debug", "onPreExecute");
    }

    protected void onProgressUpdate(Integer... progress) {

        Log.i("debug", "onProgressUpdate, " + progress[0]);
    }

    protected void onPostExecute() {

        Log.i("debug", "onPostExecute");
    }
}

ログに表示されるのはonPreExecute. のコードはdoInBackground正常に動作し、例外はありません。テキストビューを現在のステータスで更新したいのですが、すべてのステップが呼び出されないのはなぜですか?

ありがとう

4

2 に答える 2

2

2 つの問題:

  1. onPostExcuteの戻り値と同じ型のパラメーターを取るためdoInBackground、使用しているバージョンは同じメソッド シグネチャではなく (実際にはメソッドをオーバーライドしていません)、呼び出されません。そのはずonPostExecute(Void result)
  2. onProgressUpdatepublishProgressバックグラウンドメソッドから呼び出すたびにのみ呼び出されます。publish を呼び出さない場合、更新は発生しません。

注意点として、この@Override属性を使用する習慣があれば、#1 のような問題がコンパイラによってキャッチされます。

HTH

于 2012-06-18T21:48:39.553 に答える
0

編集:質問が編集されたようです...これは、AsyncTaskメソッドに対して宣言した型が原因だと思います。あなたが持っている

AsyncTask<Void, Integer, Void>

しかし、3 つのメソッドはすべてVoids です。に変更IntegerしてVoidみ てください。

AsyncTask<Void, Void, Void>

元の答え:

は、UI (したがって TextView) を制御するAsyncTaskメインの UI スレッドとは異なるスレッドで実行されます。メイン UI スレッドで TextView を更新する必要があります。これを行う 1 つの方法は、メッセージをメイン スレッドに送り返し、Message ハンドラを実装して TextView を更新することです。

于 2012-06-18T21:31:34.393 に答える