2

POSTデータをphpスクリプトに送信し、JSON応答を取得してリストビューに入れる単純なアプリに取り組んでいます。UI が機能しており、スクリプトから JSON 応答を取得していますが、アプリがクラッシュし、デバッグ ログfatal error: mainに AsyncTask のみを指す のみが表示されます。JSON が正しく解析されていないだけですか?

4

1 に答える 1

2

可能性 1

ステップ 1クレジット @Weibo

これを onCreate に移動してください。doInBackground は UI 操作を実行できませ。AsyncTask の基本ルールです。必要に応じて、AsyncTask クラスを必要なアクティビティに移動します。findViewByIdonCreateが必要なため、静的にしないでください。

    final Spinner numPoke = (Spinner) findViewById(R.id.SpinnerNumPokemon);
    final Spinner dexRegion = (Spinner) findViewById(R.id.SpinnerRegion);
    final Spinner pokeType = (Spinner) findViewById(R.id.SpinnerType);
    final ToggleButton incNFE = (ToggleButton) findViewById(R.id.toggleNFE);
    final ToggleButton incLegendary = (ToggleButton) findViewById(R.id.toggleLegendary);

ステップ2

onPostExecute では、最初のステートメントに

super.doPostExecute(result) ;

可能性 2

あなたのlistorpokemonListnullです。これをチェックしてください。Toast'sデバッグに使用します。

アドバイス

Android のドキュメントから、4 つの手順をお読みください。

4つのステップ

非同期タスクが実行されると、タスクは次の 4 つのステップを経ます。

  1. タスクが実行される前に UI スレッドで呼び出される onPreExecute()。このステップは、通常、タスクをセットアップするために使用されます。たとえば、ユーザー インターフェイスに進行状況バーを表示します。
  2. doInBackground(Params...) onPreExecute() が実行を終了した直後にバックグラウンド スレッドで呼び出されます。このステップは、時間がかかる可能性のあるバックグラウンド計算を実行するために使用されます。非同期タスクのパラメーターがこのステップに渡されます。計算の結果は、このステップによって返される必要があり、最後のステップに戻されます。このステップでは、publishProgress(Progress...) を使用して、進行状況の 1 つ以上のユニットを公開することもできます。これらの値は、UI スレッドの onProgressUpdate(Progress...) ステップで発行されます。
  3. onProgressUpdate(Progress...) は、publishProgress(Progress...) の呼び出し後に UI スレッドで呼び出されます。実行のタイミングは未定義です。このメソッドは、バックグラウンド計算がまだ実行されている間に、ユーザー インターフェイスに任意の形式の進行状況を表示するために使用されます。たとえば、進行状況バーをアニメーション化したり、テキスト フィールドにログを表示したりするために使用できます。
  4. onPostExecute(Result) は、バックグラウンドの計算が終了した後に UI スレッドで呼び出されます。バックグラウンド計算の結果は、パラメーターとしてこのステップに渡されます。
于 2013-07-06T04:02:17.417 に答える