我通过POST方法调用API并且不断返回NULL。可能的原因是什么?我已经发布了整个代码。 protected void onPostExecute(Void result)实际上是NULL。
答案 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();
}
}
}