0

クラスに到達していませんonPostExecuteAsyncTask

onClickダイアログボックス内で、このようにタスクを呼び出します。

new HelpfulTask().execute(passing);

注: 上記のコードにカーソルを合わせると、次の警告が表示されます。

varargs パラメータに対して、ArrayList の汎用配列が作成されます。

それが何を意味するのかわかりませんが、それが私のタスクの実行さえ妨げているのですか?

タスクコードは次のとおりです。

protected class UnHelpfulTask extends
            AsyncTask<ArrayList<String>, Void, ArrayList<String>> {

        ArrayList<String> passed;

        protected ArrayList<String> doInBackground(ArrayList<String>... passing) {
            passed = passing[0];

            String url_select = "http://www.---.com/---/bad.php";

            ArrayList<NameValuePair> param = new ArrayList<NameValuePair>();
            param.add(new BasicNameValuePair("item", passed.get(0)));
            param.add(new BasicNameValuePair("text", passed.get(1)));
            param.add(new BasicNameValuePair("category", passed.get(2)));

            HttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url_select);

            try {
                httpPost.setEntity(new UrlEncodedFormEntity(param));
                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();

                // read content
                is = httpEntity.getContent();

            } catch (Exception e) {

                Log.e("log_tag", "Error in http connection " + e.toString());
            }

            return null;
        }

        InputStream is = null;
        String result = "";

        protected void onPostExecute(Void v) {


            Toast.makeText(getContext(), "You have voted this down!",
                    Toast.LENGTH_SHORT).show();

        }

    }

実行時にエラーが発生せずonPostExecute、Toast が表示されません。 (注: これは 内の内部クラスですArrayAdapter.) また、トーストを追加して、ArrayListラップが適切に展開されているかどうかを確認し、それを に入れましたonPostExecuteが、どちらも表示されませんでした。

このタスクが実行されているかどうかをテストするにはどうすればよいですか?

4

1 に答える 1

2

変化する

protected void onPostExecute(Void v) {

そうです

protected void onPostExecute(ArrayList<String> arr)

または、AsyncTask 宣言を変更して、

extends AsyncTask<ArrayList<String>, Void, Void>

あなたが に戻ってきたので、どちらがより良い考えnullですdoInBackground()。トーストが表示されなかった理由は、AsyncTask で指定したものとは異なるメソッドを作成していたためです。これが、@Override通常アノテーションを使用する理由です。これにより、実際のオーバーライドのチェックが強制されます。これは、AsyncTasks などのクラスで行う必要があります。

于 2013-01-20T22:32:54.473 に答える