Android应用程序从网站上读取JSON

时间:2012-09-10 14:30:16

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

我正在尝试使用应用程序开始我的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站点和本地警报,但现在不行。

4 个答案:

答案 0 :(得分:1)

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

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

您能告诉我们生成此JSON的服务器端代码吗?

答案 1 :(得分:1)

在您的情况下,

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

规范中的完整定义是:

  

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

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

答案 2 :(得分:0)

尝试添加

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

答案 3 :(得分:0)

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

你可以做的另一件事......请检查 来自响应的状态代码。 您将准确了解您或服务器正在执行的错误。

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

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

你会得到确切的.........什么是错的......