<分区>
我想要什么
我正在确定用户是否在我的数据库中。
为此,我查看了网页中的 JSON 响应。这是在内部类中确定的 HasUser
哪个extends AsyncTask<String, Void, String>
.
这是一个运行后台进程来查找用户。
我想在我的主要方法中得到返回的结果。所以后台进程应该寻找用户,然后是boolean
。回到我的主要方法应该是 true
如果找到用户。
我做了什么
我在 HasUser
中添加了一个方法类名为 hasUser()
它返回是否找到了用户(作为 boolean 值)。该类有一个名为 found
的实例变量这是在 onPostExecute
中分配的方法。
所以在我的main方法中,我执行后台进程,然后赋值是否找到用户的 boolean 值是hasUser.hasUser()
.是这样的:
private class HasUser extends AsyncTask<String, Void, String> {
boolean found = false;
String user;
public HasUser(String user) { this.user = user; }
@Override
protected String doInBackground(String... params) {
String result = "";
// return the JSON string response from webpage
}
@Override
protected void onPostExecute(String result) {
try {
// JSON stuff
if (/*success == 0*/) { // user not found
found = false;
} else { // found user
found = true;
}
} catch(JSONException e) {
// handle exception
}
}
public boolean hasUser() {
return found;
}
@Override protected void onPreExecute() { }
@Override protected void onProgressUpdate(Void... values) { }
}
然后在我的主要方法中,我尝试获得适当的结果:
public void logIn() {
HasUser hasUser = new HasUser("username");
hasUser.execute();
boolean found = hasUser.hasUser();
}
问题
即使正确找到了用户(通过烘烤成功消息进行验证),found
logIn()
中的变量将始终为 false,因为它是在后台进程完成之前分配的。
有什么方法可以确保后台进程在我从中检索变量之前完成(我知道这与后台进程的含义相反)?或者我怎样才能做到这一点?我想要一个 boolean
返回我的主要方法以获得正确的结果。