0

Asynctask を使用してネットワーク操作を行っています。サードパーティのライブラリを使用してデータベースからデータを取得しています。

問題は、結果を表示するコールバック メソッドを最終的に呼び出す asynctask の doInBackgroun メソッドでクエリを実行しています。しかし、コールバック メソッドが itslef を呼び出す前に onPostExecute メソッドが呼び出されます。

問題:コールバックメソッドが呼び出されるまでdoInbackgroundメソッドが戻るのを待つ方法。データが利用可能になった後に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();
4

1 に答える 1

0

AsyncTaskこのユースケースには が必要です。MobileQueryServiceが既に別のもので実行されている場合は、提供さThreadれたコールバックにロジックを実装するだけです。onCompleted

于 2013-03-14T14:54:18.217 に答える