0

何かをチェックするアクティビティに機能があります。その関数で(doInbackgroundメソッドで)Webサービスを呼び出し、結果に応じて別のアクティビティを開始します。

その関数はアクティビティの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

結果に応じて、アクティビティのさまざまなメソッドを呼び出すのが最も簡単だと思います。

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

あなたはExecutorそれを渡すことができますCallable、それは戻ってきます、そしてあなたはこの例のようにFutureTask待つことができますhttp://programmingexamples.wikidot.com/futuretaskFutureTask.isDone

待つのonCreateが良いことかどうかはわかりませんが

于 2012-07-04T09:40:48.453 に答える