2011-12-21 4 views
0

わかりました。Android JSONの解析とsqliteへの挿入

現在、私はこのように動作しますasynctaskを持っている:

String doInBackground(Void... params) 
//Downloads a JSON and returns it to the onPostExecute(). 

void onPostExecute(String response) 
//Parses the JSON which has an array of stuff and insert into sqlite. 
Call changeCursosr and notifyDataSetChanged. 

これは、リストビューの挿入とリフレッシュを処理するための正しい方法ですか?現在、私はポスト実行に当たったときはいつでも少しハングしています。代わりにdoInBackgroundにデータを挿入すると、私は&を解析する必要がありますか? AsyncTask docsから

答えて

0

onPreExecuteおよびonPostExecuteは、プロセス集約的なものには適していません。彼らは一般的に、開始と停止などの作業を行うために予約されていますProgressDialog

doInBackgroundの中でネットワークコールとデータベース呼び出しを行う必要があります。これらのリソースからデータを処理する必要があります。

+0

データのフェッチとカーソルの変更はonPostExecuteで完了する必要がありますか? – Maurice

+0

いいえ、取り込みデータは 'doInBackground'で発生するはずです。 –

0

onPostExecute(結果)は、バックグラウンドの計算が終了した後にUIスレッド上で呼び出されました。バックグラウンド計算の結果は、このステップにパラメータとして渡されます。

UIスレッドで呼び出されるため、基本的にはブロック処理です。すべての重い持ち上げは、doOnBackgroundで行う必要があります。

+0

データのフェッチとカーソルの変更は、onPostExecuteで行う必要がありますか? – Maurice

+0

CursorAdapterを使用している場合は、(カーソルを戻すために)照会をセットアップし、postExecuteでアダプターに通知します。私はあなたが画面を再描画するためにメインスレッドに戻るまで、実際のクエリが実行されないとは思わない。また、私はそれが必要かどうかはわかりませんが、私はいつも "startManagingCursor(カーソル)"を呼び出すので、リソースは標準のアクティビティライフサイクルで管理されます。 Honeycomb以降(ICS)をターゲットにしている場合は、LoaderManagerとCursorLoaderでCursor Managementも参照できます。最後に、あなたはいつでもそれを試してみることができます:) –

関連する問題