2

我正在尝试使用一个显示来自网站的信息的应用程序开始我的 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

4 回答 4

1

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

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

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

于 2012-09-10T14:37:00.067 回答
1

HTTP 状态 415 -在您的情况下,不支持的媒体类型表示服务器不支持请求资源的请求方法,因为您尝试使用 HTTP POST 方法而不是 GET。

规范的完整定义是:

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

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

于 2012-09-10T14:44:33.403 回答
0

尝试添加

httppost.setHeader("Accept", "application/json");
httppost.setHeader("Content-type", "application/json");
于 2012-09-10T14:42:32.540 回答
0

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

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

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

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

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

于 2012-09-10T14:52:12.320 回答