Java PHP未使用AsyncTask从POST请求接收数据
我试图通过在Android Studio中使用POST请求从我的PHP脚本接收一个简单字符串。 例如,如果我写回音“你好”;我可以在我的应用程序中收到这条消息,但似乎只要我发送一个POST请求,我的Web服务器就没有收到这条消息 下面是我如何在我的异步任务中执行POST请求的:Java PHP未使用AsyncTask从POST请求接收数据,java,php,android,Java,Php,Android,我试图通过在Android Studio中使用POST请求从我的PHP脚本接收一个简单字符串。 例如,如果我写回音“你好”;我可以在我的应用程序中收到这条消息,但似乎只要我发送一个POST请求,我的Web服务器就没有收到这条消息 下面是我如何在我的异步任务中执行POST请求的: class HTTPReqTask extends AsyncTask<String, Void, String> { Activity activity; OnDataSendToActiv
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
}
}
}
生成我的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脚本有点问题
有什么建议吗?我现在发现了问题所在。
问题并不像我预料的那样严重
我在我的代码中记录了一些POST请求的信息,在那里我发现:
Log.i("LOG", urlConnection.getOutputStream().toString());
给我这个:
buffer(com.android.okhttp.internal.http.HttpConnection$ChunkedSink@843d1c8).outputStream()
所以我评论了这一行:
urlConnection.setChunkedStreamingMode(0);
而且效果很好。我得到了我需要的所有数据
我还将我的PHP脚本更新为:
$post = file_get_contents("php://input");
if (!empty($post))
{
$data = json_decode($post, true);
$a = $data['a'];
}
谢谢你的帮助 你想让我们猜猜打印输出的是什么。这就是问题所在。PHP没有从POST请求中恢复任何内容。Andy我现在添加了它,但是由于某些原因它没有执行onPostExecute方法。我写了一个“Log(…)”来在我的方法中检查它,当我添加writer.flush()时,我没有从日志中得到输出;谢谢你的建议。我会保留它,并试图找出我的onPostExecute无法工作的原因。
$post = file_get_contents("php://input");
if (!empty($post))
{
$data = json_decode($post, true);
$a = $data['a'];
}