使用onPostExecute的结果,并且在处理完成之前不执行下一条指令

时间:2012-07-04 09:33:52

标签: android android-intent android-asynctask android-activity

我在一项活动中有一项功能,我会检查一些东西。我在该函数中调用web服务(在doInbackground方法中),并根据结果启动另一个活动。

在活动的onCreate方法中调用该函数,问题是继续执行下一条指令而不等待函数的结果。

以下是代码:

public class EditAccountActivity extends Activity {

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.edit_account);

    save.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

                checkConflict();

                Log.i("VERIF",
                        "WE GO HERE WITHOUT WAITING THE RESULT");
//i don't want to go here if we start the other activity in checkConflict
...


}}}

public void checkConflict() {

    final Intent intent = new Intent(this, ConflictFieldActivity.class);

    new WSDataAccount() {
        @Override
        public void onPostExecute(final ArrayList<ArrayList<String>> result) {



            if (modifiedTimeOnServer > modifiedTimeLocal
                    && !conflictWithFields(fieldLocalFirstStateMap,
                            fieldServerMap.getAccountFieldMap(),
                            modifiedTimeLocal, modifiedTimeOnServer)
                            .isEmpty()) {



                Toast.makeText(getApplicationContext(),
                        " EDITION CONFLICT !!!! ", Toast.LENGTH_LONG)
                        .show();
                startActivity(intent);
            }
        }
    }.execute(sessionName, accountId, "retrieveModifiedTime");

}}

您是否知道使用“onPostExecute”返回的结果的另一种方法,以便在执行下一条指令之前等待我的处理

3 个答案:

答案 0 :(得分:1)

在您调用的类中添加OnPostExecute。

调用AsyncTask

 new WSDataAccount().execute(sessionName, accountId, "retrieveModifiedTime");

创建课程

class WSDataAccount extends AsyncTask<?,?,?>{


        doInBackGround(){

        }
       //add here

        @Override
        public void onPostExecute(final ArrayList<ArrayList<String>> result) {



            if (modifiedTimeOnServer > modifiedTimeLocal
                    && !conflictWithFields(fieldLocalFirstStateMap,
                            fieldServerMap.getAccountFieldMap(),
                            modifiedTimeLocal, modifiedTimeOnServer)
                            .isEmpty()) {



                Toast.makeText(getApplicationContext(),
                        " EDITION CONFLICT !!!! ", Toast.LENGTH_LONG)
                        .show();
                startActivity(intent);
            }
        }


}

答案 1 :(得分:1)

我想最简单的就是调用Activity的不同方法,具体取决于结果;

public class EditAccountActivity extends Activity {
   void foo(){}
   void boo(){}
}

然后

    @Override
    public void onPostExecute(final ArrayList<ArrayList<String>> result) {
        if(result){
            foo();
        }else{
            boo();
        }
    }

答案 2 :(得分:0)

您可以ExecutorCallable传递给FutureTask,它会返回FutureTask.isDone,然后您可以等待onCreate,例如http://programmingexamples.wikidot.com/futuretask

不确定在{{1}}等待是否是一件好事