【发布时间】:2016-01-14 02:19:21
【问题描述】:
我有一个页面,用户输入手机号码以检查它是否存在于数据库中。我注意到的是,asynctask 只会在第一次成功运行并将结果存储在某个地方,所以当我下次输入一个不在数据库中的有效手机号码时,它仍然会告诉我手机号码无效!
我知道 asynctask 默认由单线程运行。有什么办法可以解决这个问题?
这是我的代码:
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.searchfor:
hp = handphone.getText().toString();
new AttemptLogin().execute(hp);
break;
default:
break;
class AttemptLogin extends AsyncTask<String, String, JSONObject> {
protected JSONObject doInBackground(String... args) {
try {
HashMap<String, String> params = new HashMap<>();
params.put("hp", args[0]);
Log.d("request", "starting");
JSONObject json = jsonParser.makeHttpRequest(
FIND_FRIENDS, "POST", params);
if (json != null) {
Log.d("JSON result", json.toString());
return json;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(JSONObject json) {
【问题讨论】:
-
你第一次得到正确的结果吗......?
-
是的。但问题是我需要重新运行,因为我正在尝试在同一页面上验证手机号码
-
好吧,我在工作……!一秒钟
-
请检查控制台,您是否收到任何警告,因为您知道默认情况下每个 Asynctask 在一个线程上