【问题标题】:How to re-execute asynctask again?如何再次重新执行异步任务?
【发布时间】: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 在一个线程上

标签: android android-asynctask


【解决方案1】:

可能是一次在单个 Asynctask 上运行的问题......! 请进行可能的检查,

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
    task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} else {
    task.execute();
}

通过this链接...!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-21
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多