【发布时间】:2016-03-01 10:37:40
【问题描述】:
我想检查一个用户是否在数据库中注册,如果它是获取用户的信息。
通常,当我从服务器检索信息时,我会在Json 中放入一个变量,说明用户是否存在。然后在onPostExecute(Void result) 中处理Json,所以我不需要AsyncTask 返回任何值。
在我调用 AsyncTask 之前如下:
task=new isCollectorRegistered();
task.execute();
但现在我正在尝试一种不同的方法。我希望我的 asynktask 只返回一个布尔值,我称之为 AsyncTask。
AsyncTask 如下所示:
public class isCollectorRegistered extends AsyncTask<Void, Void, Void> {
private static final String TAG_SUCCESS = "success";
int TAG_SUCCESS1;
private static final String TAG_COLLECTOR = "collector";
public String collector;
JSONArray USER = null;
JSONObject jObj = null;
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... params) {
// Checks on the server if collector is registered
try {
jObj = ServerUtilities.UserRegistered(context, collector);
return null;
} finally {
return null;
}
}
@Override
protected void onPostExecute(Void result) {
try {
String success = jObj.getString(TAG_SUCCESS);
Log.d(TAG_COLLECTOR, "Final Info: " + success);
//This if sees if user correct
if (Objects.equals(success, "1")){
//GOOD! THE COLLECTOR EXISTS!!
}
} catch (JSONException e) {
e.printStackTrace();
Log.d(TAG_COLLECTOR, "JSON parsing didn't work");
}
}
}
我检查了几篇帖子,但我仍然没有找到方法来检索我调用 Asynktask 的布尔值,如下所示:
task=new isCollectorRegistered();
task.execute();
boolean UserRegistered = task.result();
什么是正确的方法?任何帮助将不胜感激
【问题讨论】:
-
@ritesht93 谢谢!所以实际上一旦 AsyncTask 正在执行就不可能检索一个值,因为它正在运行一个完全不同的线程不是吗?
-
是
doInBackground()在不同的线程中执行,但是您可以将值从doInBackground()传递到publishProgress()或onPostExecute()(这两个方法在活动的 UI 线程上运行,您可以使用它们坚持你的价值观) -
@ritesht93 - 你在下面查看我的答案了吗?您如何看待我使用的方法?让我知道。 O&O!。
标签: android json android-asynctask