【问题标题】:"Result" returning NULL in Asynctask while calling API调用 API 时在 Asynctask 中返回 NULL 的“结果”
【发布时间】:2015-10-26 09:56:17
【问题描述】:

我正在通过 POST 方法调用 API,并且它不断返回 NULL。可能的原因是什么?我已经发布了整个代码。 protected void onPostExecute(Void result) 实际上是 NULL。

【问题讨论】:

  • 您要求工作吗?您可以发布您的 AsyncTask 代码吗?
  • 请发布您的 doInBackground 方法,因为结果是从那里发布的

标签: android apache android-asynctask http-post


【解决方案1】:

您正在做的事情的结构不正确。您正在使用返回类型为VoidAsyncTaskVoid 类型的唯一可能值是 null,因此这是您在 onPostExecute() 方法中唯一可能返回的值。当您从您的 doInBackground() 方法中 return null 时会发生这种情况。

Void 适用于泛型强制您使用类型但您实际上并不需要的情况。因此,只有在您实际上不需要退回任何东西时才使用它。在您的情况下,您想要检索调用产生的内容,您需要不同的类型。

如果你只想知道它是否成功,你可以使用Boolean,并让它在成功时返回true(你目前有return null),在失败时返回false (在您的 catch 块中)。

【讨论】:

  • @MuhammadAbdullah 我在您编辑帖子后编辑了我的答案,所以我的答案现在更清晰了。这是导致您的问题的 Void 返回类型。
【解决方案2】:

来自javadoc

Void 类是一个不可实例化的占位符类,用于保存对表示 Java 关键字 void 的 Class 对象的引用。

所以result 总是null

您必须更改您的 asyncTask 以返回不同于 Void 的内容

类似:

private class MyTask extends AsyncTask<String, Void, String> {
    @Override
    protected String doInBackground(String... params) {
        //Do request
        return "response"; //return request's response as String
    }

    @Override
    protected void onPostExecute(String result) {
        if(result.equals("response")){
            Toast.makeText(getApplicationContext(), "HTTP POST is working...", Toast.LENGTH_LONG).show();
        } else{
            Toast.makeText(getApplicationContext(), "Invalid POST req...", Toast.LENGTH_LONG).show();
        }
    }
}

【讨论】:

  • 它甚至没有给出“Invalid POST req...”
  • 你打电话给execute()了吗?为了更简单,我编辑了代码。
  • 是的……也叫它。我找不到真正的原因。
  • 你总是从doInBackground()返回东西吗?如果是,则在onPostExecute() 的第一行打印result。它的价值是什么?
  • 在哪里打印?因为 android studio 没有显示控制台。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-31
  • 2023-03-14
  • 1970-01-01
相关资源
最近更新 更多