gpt4 book ai didi

java - 在主代码中使用 AsyncTask 中的变量

转载 作者:行者123 更新时间:2023-11-29 05:22:44 24 4
gpt4 key购买 nike

<分区>

我想要什么

我正在确定用户是否在我的数据库中。

为此,我查看了网页中的 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返回我的主要方法以获得正确的结果。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com