私はAsyncTask
バックグラウンド処理を行うために使用しています。つまり、サーバーからデータをフェッチしてList
indoInBackground()
メソッドに保存しています。この保存されたデータを で使用していonPostExecute()
ます。
私が直面している問題は、実行が完了するonPostExceute()
前に実行されることdoInBackground()
です。
誰かが何が間違っているのかを提案できますか?
コード:
AsyncTask<Void, Void, Void> read= new AsyncTask<Void, Void, Void>() {
ProgressDialog progress= new ProgressDialog(LastData.this);
ArrayList<String> testData;
DBAdapter db;
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
progress.setTitle("Please Wait");
testData= new ArrayList<String>();
db= new DBAdapter(LastData.this);
progress.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progress.setMessage("Fetching Data !!");
progress.show();
}
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
ParseQuery query = new ParseQuery("Details");
query.findInBackground(new FindCallback() {
public void done(List<ParseObject> dataList,
ParseException e) {
if (e == null) {
Log.d("Details", "Retrieved " + dataList.size()
+ " scores");
for (int idx = 0; idx < dataList.size(); idx++) {
data.add(dataList.get(idx).get("fname")
.toString());
}
} else {
System.out.println(e.getMessage());
}
for (int idx = 0; idx < data.size(); idx++) {
testData.add(data.get(idx));
}
System.out.println("size inside is " + testData.size());
}
});
return null;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
progress.dismiss();
Toast.makeText(LastData.this, "Size is "+testData.size(), Toast.LENGTH_LONG).show();
}
};
read.execute();
Toast
onPostExecute()
メソッドが実行される前でもメッセージが表示されますdoInBackground
。