从 Android 发送到计算引擎服务器的 JSON 返回 null

Posted

技术标签:

【中文标题】从 Android 发送到计算引擎服务器的 JSON 返回 null【英文标题】:JSON sent from Android to compute engine server returns null 【发布时间】:2016-08-02 04:18:59 【问题描述】:

我正在将 JSON 对象从我的 android 应用程序发送到我的服务器。在我的开发本地机器中,它工作正常。我得到数据并对其进行解码。但是当我将服务器部署到计算引擎时,我没有在服务器端收到数据。数据是从 Android 客户端发送的。我还从浏览器测试了 JSON,得到了 200 个响应代码。这是sn-ps的代码:

//客户端

//在这里创建JSONObject 这是我发送的 JSON "test", "1234"

JSONObject json = new JSONObject();
json.put("test", args[0]);

String postData=json.toString();

// Send POST output.
OutputStreamWriter os = new OutputStreamWriter(urlConn.getOutputStream(), "UTF-8");
os.write(postData);
Log.e("NOTIFICATION", "Sent");
os.close();

BufferedReader reader = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));
String msg="";
String line = "";
while ((line = reader.readLine()) != null) 
    msg += line; 

Log.i("msg=",""+msg);

//服务器

<?php

   $json = file_get_contents("php://input");
   var_dump($json); //this returns String(0)
   $decoded = json_decode($json, TRUE);
   $pasid = $decoded['test'];

   echo"test if it works";
   var_dump($pasid); //returns null

无论我做什么,Android 应用都会发送一个字符串,但在服务器端我得到的是空字符串。到目前为止我不知道为什么。

【问题讨论】:

如果你回显$json会发生什么?它是按照你的预期形成的吗? @Jon 谢谢你提醒我。我现在更新了我的问题。返回字符串(0)。我期待从 Android 发送的字母数字值。 【参考方案1】:

在向服务器发送帖子请求后,您可以使用以下代码获取帖子正文:

<?php

  $post_body = file_get_contents("php://input");
  $json = json_decode($post_body);
  $pasid = $json->"test";

  echo $pasid;
?>

【讨论】:

你必须使用 var_dump($pasid);你的代码就像我的一样返回 null。【参考方案2】:

你的代码很混乱 这不是将数据从应用程序发送到远程数据库的好方法 你可以这样做`

形成应用程序

String uri="But your http URL";
URL url = new URL(uri);
        HttpURLConnection con = (HttpURLConnection) url.openConnection();
        con.setRequestMethod("POST");
            con.setDoOutput(true);
            OutputStreamWriter writer=new     OutputStreamWriter(con.getOutputStream());
StringBuilder sb=new StringBuilder();
sb.append("username="+"Naham");
sb.append("password="+"passNaham");
            writer.write(sb.toString());
            writer.flush();

了解简单的php web服务

$data = array("结果" => 0, "消息" => "错误!"); if ($_SERVER['REQUEST_METHOD'] == "POST") $user_name = isset($_POST['username']) ? $_POST['user_name'] : ""; $user_password = isset($_POST['user_password']) ? $_POST['user_password'] : ""; // 在这里做一些事情 $data = array("result" => 1, "message" => "welcome"); 别的 $data = array("结果" => 0, "消息" => "错误!"); /* 输出头 */ header('内容类型:应用程序/json'); 回声 json_encode($data); ?>

【讨论】:

用户名不是必须匹配用户名吗?为什么是用户名?应该是用户名吗? 我在服务器端收到了 string(0),但没有收到与我的代码一起使用的 NULL。 是的,你是对的,我会编辑,谢谢 不客气,兄弟。谢谢您的帮助。我还想提醒您, sb.append() 接受一个字符串参数而不是两个。 对不起兄弟我已经写了代码快速查看编辑后的帖子【参考方案3】:

原来问题是由 HttpRLConnection 引起的。就像the accepted answer in this SO question, 一样,去掉`

urlConnection.setChunkedStreamingMode(0);

在哪里 `urlConnection = HttpUrlCooenction();

`

【讨论】:

以上是关于从 Android 发送到计算引擎服务器的 JSON 返回 null的主要内容,如果未能解决你的问题,请参考以下文章

如何将文本从 Android 设备发送到计算机 [关闭]

使用 GCM 从 java 服务器向 android 手机发送希伯来语推送通知时出现乱码

如何限制android中服务发送的通知数量?

工具 | 百度开源的函数计算服务引擎

帮助 android 到 chrome 通信

将字符串从控制台应用程序发送到 Windows 窗体应用程序