私は犯罪データをダウンロードし、SQLLiteデータベースに挿入してGoogleマップにプロットするアプリケーションを作成しました。Androidの非同期タスク - 複数のクラスからの進捗状況を取得
これで、犯罪データを取得し、Jsonを解析してデータベースに格納する必要があるため、処理に時間がかかります。
今私は3つのクラスを持っています。
PoliceAPI - これはJsonデータを取得して解析し、犯罪リストを返します。
CrimeMapBLL - 返されたPoliceAPIのデータは、このクラスが処理するデータベースに挿入されます。
CrimeMap - Asynctaskを実行するAndroidのフラグメント。
CrimeMapコード//
class GetCrimeData extends AsyncTask<Void, String, Void>
{
CrimeMapBLL crimeMapBLL;
@Override
protected Void doInBackground(Void... params) {
DateTime dateTime = DateTime.parse(_date);
crimeMapBLL = new CrimeMapBLL(lat, lng, dateTime, searchHistoryid);
crimeMapBLL.GetCrime();//This method takes a long long long time..
publishProgress(crimeMapBLL.GetProgressText());//this won't work, needs to wait for method above to finish
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
progressBarInclude.setVisibility(View.GONE);
SetMapAsync();
}
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
progressBarView.SetProgressMessage(crimeMapBLL.GetProgressText());
}
@Override
protected void onPreExecute() {
super.onPreExecute();
progressBarInclude.setVisibility(View.VISIBLE);
}
}
メソッドcrimeMapBLL.GetCrimeは()を実行するのに長い時間がかかります。このメソッドを最初に呼び出します。
List<Crimes> CrimesList = policeAPI.GetCrimes(lat, lng, date);
このメソッドはHTTP接続を作成し、jsonを解析します。
PoliceAPIおよびCrimeMapBLLクラスでGetProgressText()メソッドを作成しましたが、GetCrimesが実行を終了するまでテキストが表示されません。
これを処理する最善の方法は何ですか?
あなたが 'CrimeMapBLL'クラスを投稿した場合、私はこれに答えることができると思います。 –
ありがとうございますが、私はこの問題を解決しました。答えを見る – user7321559