在我的android项目中,我试图调用一个返回字符串结果的web服务。执行后,将使用onPostExecution()在UI线程中更新结果,结果将决定是移动到下一个活动还是通知用户更正信息。
以上是我的意图,从下面的代码:
BackgroundTask bcktask = new BackgroundTask();
bcktask.execute(servicemethodname, urlparameter, bMap);
Thread.sleep(1000);
//do nothing
while (backgroundResult == null)
;
if (backgroundResult == "Sucessfully Registered") {
Intent intent = new Intent(this, VerifyDetail.class);
startActivity(intent);
} else {
Toast.makeText(this, backgroundResult, Toast.LENGTH_LONG)
.show();
}但问题是,当我试图运行上面的代码时,它会阻塞UI线程,后台线程没有运行,或者可能没有得到执行CPU的时间。请告诉我怎么做这件事。我需要保持活动,并显示消息(什么是错误的),如果结果不是成功注册的或屏幕将更改为下一个活动。
感谢和问候,
苏拉布
发布于 2013-07-11 12:27:36
您可以在任务的构造函数中添加一个回调来实现这一点。
伪码:
创建如下接口
public interface MyCallback {
public void onResult(String result);
}在代码中的某个位置实现此接口:
MyCallback callback = new MyCallback() {
@Override
public void onResult(String result) {
if(result.equals("Sucessfully Registered") {
// success
} else {
// not success
}
}
}将此回调传递到任务的构造函数中,并将其存储为局部变量mCallback;
new BackgroundTask(callback).execute(...);在onPostExecute()方法中:
mCallback.onResult("<web service result String>");请注意,上面的内容还没有经过测试,可能包含一些小的语法错误。祝好运。
发布于 2013-07-11 12:24:35
在onPostExecute中执行此操作,而不是在while循环之后执行异步任务。
protected void onPostExecute(Long result) {
if (backgroundResult == "Sucessfully Registered") {
Intent intent = new Intent(this, VerifyDetail.class);
startActivity(intent);
} else {
Toast.makeText(this, backgroundResult, Toast.LENGTH_LONG)
.show();
}
}删除会导致您的UI被击中的while循环。
发布于 2013-07-11 12:23:36
AsyncTask是你要找的东西!有一个例子。如果你有任何问题,请随便问!
https://stackoverflow.com/questions/17593133
复制相似问题