我正在使用Asynctask进行网络操作。我正在使用第三方库从我的数据库中获取数据。
问题 我在我的asynctask的doInBackgroun方法中查询最终调用一个回调方法,该方法有结果显示。但是在回调方法调用itslef之前调用onPostExecute方法.Hence数据永远不会附加到我在onPostExecute中设置的适配器。
问题:如何等待doInbackground方法返回,直到callbackmethod被调用。所以我可以在数据可用后调用onPostExecute方法。
下面是我的asyntTask,回调方法是onCompleted。
在我的onPostExecute我使用数据在adapter.so中显示它我没有完全发布它因为它是一堆代码。
public class MyReviewLoadingTask extends AsyncTask<Void, Void, List<WYF_User_Items>>
{
ProgressDialog pdilog;
List<WYF_User_Items> result_to_send_to_adapter;
@Override
protected void onPreExecute()
{
// TODO Auto-generated method stub
super.onPreExecute();
pdilog=new ProgressDialog(SingleReviewActivity.this);
pdilog.setIndeterminate(true);
pdilog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
pdilog.setMessage("please wait");
pdilog.setTitle("Review Details");
pdilog.show();
}
@Override
protected List<WYF_User_Items> doInBackground(Void... params)
{
// TODO Auto-generated method stub
getDatabaseTable();
MobileServiceQuery<WYF_User_Items> query=new MobileServiceQuery<WYF_User_Items>();
query.select("review_rating","review_body","unique_user_id","userName");
wyf_user_item_table.where().field("brand_name").eq(review_name).execute(new TableQueryCallback<WYF_User_Items>() {
@Override
public void onCompleted(List<WYF_User_Items> result, int arg1,
Exception arg2, ServiceFilterResponse arg3) {
// TODO Auto-generated method stub
Log.i(TAG, "size is "+result.size());
result_to_send_to_adapter=result;
for(int i=0;i<result.size();i++)
{
Log.i(TAG, "unique user id of all user who has entered review is "+result.get(i).getUnique_user_id()+" and their names are "+result.get(i).getUserName());
}
}
});
wyf_user_item_table.select("review_rating").add(new MobileServiceQuery<WYF_User_Items>());
return result_to_send_to_adapter;
}
@Override
protected void onPostExecute(List<WYF_User_Items> result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
Log.i(TAG, "onPostExecute called");
pdilog.dismiss();
答案 0 :(得分:0)
这个用例imo需要AsyncTask
。如果MobileQueryService
已在不同的Thread
上运行,只需在提供的回调onCompleted
上实施您的逻辑。