我在一项活动中有一项功能,我会检查一些东西。我在该函数中调用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”返回的结果的另一种方法,以便在执行下一条指令之前等待我的处理
答案 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)
您可以Executor
将Callable
传递给FutureTask
,它会返回FutureTask.isDone
,然后您可以等待onCreate
,例如http://programmingexamples.wikidot.com/futuretask
不确定在{{1}}等待是否是一件好事