0

これは私の AsyncTask クラスです

private class UpdatingNews extends AsyncTask<Void, Void, String> {

    @Override
    protected String doInBackground(Void... params) {
        webservice.UpdateAllNews();
        webservice.updateallCatNews();
        return null;
    }

    @Override
    protected void onPostExecute(String result) {

    }
}

私はそれを

UpdatingNewsupdate = new UpdatingNews();
        update.execute();

それは実行します。次に、ボタンをクリックしたときにこのタスクのステータスが完了したかどうかを確認したいので、このように確認します。

if (update.getStatus().toString()
                            .equals(AsyncTask.Status.FINISHED.toString())) {
                        toast = Toast.makeText(Main_FormNewUser.this,
                                "Thanks for fill in our survey form!",
                                Toast.LENGTH_SHORT);
                        toast.setGravity(Gravity.CENTER_VERTICAL
                                | Gravity.CENTER_HORIZONTAL, 0, 0);
                        toast.show();
                        name = nametext.getText().toString();
                        email = emailtext.getText().toString();
                        webservice.InsertSurvey(name, email, ages, genders,
                                jobs, salaries, interesting);
                        webservice.insertFormSubmit(1);

                        startActivity(new Intent(Main_FormNewUser.this,
                                Main_AllLatestNews.class));
                        finish();
                    }

クリックすると、Main_AllLatestNews.class が開始されますが、NullPointerException が発生します。

AsyncTask を使用しないようにして、エラーを返さないでください。なぜ AsyncTask を呼び出すとエラーが発生するのかわかりませんか?

4

2 に答える 2

0

このようにonPostExecuteを使用するのはどうですか

AsyncTask が終了しているかどうかを判断するブール値を追加します

@Override
protected void onPostExecute(String result) {
    check = true;
}


//if (update.getStatus().toString().equals(AsyncTask.Status.FINISHED.toString())) {
if(check){
                    toast = Toast.makeText(Main_FormNewUser.this,
                            "Thanks for fill in our survey form!",
                            Toast.LENGTH_SHORT);
                    toast.setGravity(Gravity.CENTER_VERTICAL
                            | Gravity.CENTER_HORIZONTAL, 0, 0);
                    toast.show();
                    name = nametext.getText().toString();
                    email = emailtext.getText().toString();
                    webservice.InsertSurvey(name, email, ages, genders,
                            jobs, salaries, interesting);
                    webservice.insertFormSubmit(1);

                    startActivity(new Intent(Main_FormNewUser.this,
                            Main_AllLatestNews.class));
                    finish();
                }
于 2012-05-01T06:31:23.743 に答える
0

AsyncTask の基本を理解する このブログをチェックしてください。無痛のスレッド化 またはAsyncTask

onPostExecute(String result) で doInBackground() からの戻りを受け入れていません

doInBackground() は結果を onPostExecute に返します。したがって、ここで必要な値または UI を onPostExecute でのみ更新する必要があります。

于 2012-05-01T06:31:30.023 に答える