0

我在检查某事的活动中有一个功能。我在该函数中调用一个 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”返回结果的方法,以便在执行下一条指令之前等待我的处理

4

3 回答 3

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);
            }
        }


}
于 2012-07-04T09:38:07.957 回答
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();
        }
    }
于 2012-07-04T09:44:50.687 回答
0

You can use Executor pass it a Callable, it will return FutureTask then you can wait for FutureTask.isDone as in this example http://programmingexamples.wikidot.com/futuretask

Not sure if waiting in onCreate is a good thing though

于 2012-07-04T09:40:48.453 回答