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

Java Android应用程序从网站读取JSON,java,android,json,http-status-code-415,Java,Android,Json,Http Status Code 415,我正试图用一个显示网站信息的应用程序开始我的Android应用程序之旅。该网站来自一个电力牵引系统,它可以帮助我监测火的温度和我在吸烟者身上长时间烹饪的肉块 JSON页面位于http://192.168.101.101/stoker.json在我的本地网络上,数据如下所示: { "stoker": { "sensors": [ { "id": "620000116F01CA30", "name": "SS2",

我正试图用一个显示网站信息的应用程序开始我的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>
09-10 08:44:58.375:I/log_标签(748):
09-10 08:44:58.375:I/log_标签(748):415不支持的类型
09-10 08:44:58.375:I/log_标签(748):
我认为读取JSON信息会非常简单,但显然不是这样。我错过了什么


在这一点上,我只想显示我的手机上的信息,没有更多。接下来,我想在应用程序中添加更多功能,比如将更改发回JSON站点和本地警报,但不是现在

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

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

您可以向我们展示生成此JSON的服务器端代码吗?

尝试添加

httppost.setHeader("Accept", "application/json");
httppost.setHeader("Content-type", "application/json");
在您的案例中,表示服务器不支持请求的资源的请求方法,因为您试图使用HTTP POST方法而不是GET方法

本规范的完整定义为:

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


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

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

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

System.out.println(response.getStatusLine().getStatusCode());
并匹配来自的响应代码


你会得到确切的……到底出了什么事

stoker.json是静态文件吗?而且不是由PHP或任何框架/工具等生成的?我建议您使用谷歌的gson。更简单、更好的示例。请检查服务器日志以查看原因。信息技术s服务器问题。结果字符串不是有效的json字符串感谢HttpGet更改,它起作用了。日志显示了正在读取的正确信息,现在在解析JSON的代码的下一节中出现了一个错误。我会继续努力,看看我自己是否能解决这个问题。如果没有,我知道我可以从这里的人们那里得到一些很好的答案。