【问题标题】:Android app to read JSON from website从网站读取 JSON 的 Android 应用
【发布时间】:2012-09-10 14:30:16
【问题描述】:

我正在尝试从一个显示网站信息的应用开始我的 Android 应用之旅。该网站来自一个电力通风系统,它可以帮助我监测我在吸烟者身上长时间烹饪的火和肉块的温度。

JSON 页面位于我本地网络上的http://192.168.101.101/stoker.json,数据如下所示:

{
"stoker": {
    "sensors": [
        {
            "id": "620000116F01CA30",
            "name": "SS2",
            "al": 0,
            "ta": 66,
            "th": 75,
            "tl": 65,
            "tc": 69.1,
            "blower": null
        },
        {
            "id": "E20000116F0CDB30",
            "name": "brskt2",
            "al": 0,
            "ta": 203,
            "th": 32,
            "tl": 32,
            "tc": 71.7,
            "blower": null
        }

我尝试使用的代码一直失败,因此我在流程的第一步中添加了一个日志,以查看发现了什么。代码如下:

try {
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost("http://192.168.101.101/stoker.json");
    HttpResponse response = httpclient.execute(httppost);
    HttpEntity entity = response.getEntity();
    InputStream webs = entity.getContent();

try {
    BufferedReader reader = new BufferedReader(new InputStreamReader(webs,"iso-8859-1"),4);
    StringBuilder sb = new StringBuilder();
    String line = null;
    while ((line = reader.readLine()) != null) {
        sb.append(line + "\n");
    }

    webs.close();

    result=sb.toString();
    Log.i("log_tag", result);

这是调试期间的日志结果:

09-10 08:44:58.375: I/log_tag(748): <body>
09-10 08:44:58.375: I/log_tag(748): <h1>415 Unsupported Type</h1>
09-10 08:44:58.375: I/log_tag(748): </body>

我认为读取 JSON 信息会非常简单,但显然不是。我在这里错过了什么?

此时我只想在手机上显示信息,仅此而已。以后我想向应用程序添加更多功能,例如将更改发布回 JSON 站点和本地警报,但不是现在。

【问题讨论】:

  • stoker.json 是静态文件吗?不是从 PHP 或任何框架/工具/等生成的?
  • 我建议你使用谷歌的 gson。更简单更好的例子。
  • 检查您的服务器日志,看看是什么原因造成的。它的服务器问题。结果字符串不是有效的 json 字符串

标签: java android json http-status-code-415


【解决方案1】:

看起来像是服务器端错误。您可以尝试将您的 HttpPost 请求更改为 HttpGet 一个。

如果这不起作用,那么您的服务器可能正在等待请求标头中的某些特定数据(有时,服务器等待特定的用户代理字段或语言...)

你能告诉我们生成这个 JSON 的服务器端代码吗?

【讨论】:

  • 感谢 HttpGet 更改,这很有效。日志显示正在读取的正确信息,现在在解析 JSON 的代码的下一部分中出现错误。我会努力解决这个问题,看看我自己能不能解决它。如果没有,我知道我可以从这里的人们那里得到一些很好的答案。
【解决方案2】:

HTTP Status 415 - Unsupported Media Type 在您的情况下表示服务器不支持请求资源的请求方法,因为您尝试使用 HTTP POST 方法而不是 GET。

规范的完整定义是:

服务器拒绝为请求提供服务,因为请求实体的格式不受所请求方法的请求资源支持

所以我认为你应该改用HTTPGet。也就是说,您真的应该尝试使用支持将 JSON 对象绑定到 Java 类的库。有许多库封装了这个功能,应该让你的代码不那么复杂,因为你依赖的是一个(希望是经过良好测试的)库。

【讨论】:

    【解决方案3】:

    尝试添加

    httppost.setHeader("Accept", "application/json");
    httppost.setHeader("Content-type", "application/json");
    

    【讨论】:

      【解决方案4】:

      看起来...您从服务器收到了错误的响应。 所以最后你必须检查为什么会这样

      还有一件事你可以做...请检查 响应中的状态码。 您将准确了解您或服务器所犯的错误。

      System.out.println(response.getStatusLine().getStatusCode());
      

      并匹配您的响应代码 http://en.wikipedia.org/wiki/List_of_HTTP_status_codes

      你会得到准确的……出了什么问题……

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-25
        • 1970-01-01
        • 2013-04-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多