【发布时间】:2020-02-02 18:15:16
【问题描述】:
我正在尝试通过在 Android Studio 中使用 POST 请求从我的 PHP 脚本中接收一个简单的字符串。 例如,如果我写 echo "Hello";我可以在我的应用程序中收到此消息,但似乎只要我发送一个 POST 请求,我的网络服务器并没有真正收到该消息。
这是我在 AsyncTask 中执行 POST 请求的方式:
class HTTPReqTask extends AsyncTask<String, Void, String>
{
Activity activity;
OnDataSendToActivity dataSendToActivity;
Context context;
public HTTPReqTask(Context context)
{
this.context = context;
dataSendToActivity = (OnDataSendToActivity) ((Activity) context);
}
@Override
public String doInBackground(String... params)
{
HttpURLConnection urlConnection = null;
String param1 = params[0];
String line = "";
String result = "";
try
{
JsonObject postData = new JsonObject();
postData.addProperty("a", "1");
URL url = new URL(param1);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestProperty("Content-Type", "application/json");
urlConnection.setRequestMethod("POST");
urlConnection.setDoOutput(true);
urlConnection.setDoInput(true);
urlConnection.setChunkedStreamingMode(0);
OutputStream out = new BufferedOutputStream(urlConnection.getOutputStream());
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out,"UTF-8"));
writer.write(postData.toString());
int code = urlConnection.getResponseCode();
if (code != HttpURLConnection.HTTP_OK) {
throw new IOException("Invalid response from server: " + code);
}
BufferedReader rd = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
while ((line = rd.readLine()) != null)
{
result += line;
}
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
if (urlConnection != null)
{
urlConnection.disconnect();
}
}
return result;
}
@Override
protected void onPostExecute(String s)
{
try
{
if(dataSendToActivity != null)
{
Log.i("Data", s);
dataSendToActivity.sendData(s);
}
}
catch(Exception e)
{
// Nichts
}
}
}
如你所见,我正在使用这个:
JsonObject postData = new JsonObject();
postData.addProperty("a", "1");
生成我的 POST 请求。
postData 字符串为:{"a":"1"}
这是我的 PHP 脚本:
$post = file_get_contents("php://input");
$data = json_decode($post, true);
print_r($data);
更新 1
我现在添加了 writer.flush(); (感谢安迪) 现在我在发送请求后收到此异常:
java.io.IOException: Invalid response from server: 500
所以我的 PHP 脚本有问题。
有什么建议吗?
【问题讨论】:
-
你希望我们猜到
print_r输出什么? -
u_mulder 你好,print_r 是空的。那就是问题所在。 PHP 没有从 POST 请求中接收任何内容。 Andy 我现在添加了它,但由于某种原因它不执行 onPostExecute 方法。我写了一个“Log(...)”来在我的方法中检查它,当我添加 writer.flush(); 时我没有从 Log 中得到输出;
-
感谢您的建议。我会保留它并尝试弄清楚为什么我的 onPostExecute 不起作用。