"结果"在调用API时在Asynctask中返回NULL

时间:2015-10-26 09:56:18

标签: android apache android-asynctask http-post

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

2 个答案:

答案 0 :(得分:0)

你正在做的事情的结构是不对的。您使用的AsyncTask返回类型为Void。类型Void唯一可能的值是null,因此您可以在onPostExecute()方法中找到唯一可能的值。这就是您return null方法doInBackground()时的情况。

Void适用于泛型强制您使用某种类型,但实际上并不需要一种类型。因此,只有当您实际上不需要返回任何内容时才使用它。在您的情况下,如果您想要检索由调用产生的内容,则需要使用其他类型。

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

答案 1 :(得分:0)

来自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();
        }
    }
}