2

Web サイトの情報を表示するアプリから 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リクエストをHttpGet1つに変更することです。

これが機能しない場合は、サーバーがリクエスト ヘッダーで特定のデータを待機している可能性があります (サーバーが特定のユーザー エージェント フィールドまたは言語を待機している場合もあります)。

この JSON を生成しているサーバー側のコードを教えていただけますか?

于 2012-09-10T14:37:00.067 に答える
1

HTTP ステータス 415 -サポートされていないメディア タイプは、GET の代わりに HTTP POST メソッドを使用しようとしているため、サーバーが要求されたリソースに対して要求されたメソッドをサポートしていないことを示しています。

仕様からの完全な定義は次のとおりです。

リクエストのエンティティが、リクエストされたメソッドのリクエストされたリソースでサポートされていない形式であるため、サーバーはリクエストの処理を拒否しています

したがって、代わりに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

どうやら... サーバーから間違った応答が返ってきたようです。最後に、なぜそうなのかを確認する必要があります

もう 1 つできることがあります...応答のステータス コードを確認してください。あなたまたはサーバーが行っている間違いを正確に把握できます。

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

http://en.wikipedia.org/wiki/List_of_HTTP_status_codesの応答コードと一致させます

あなたは正確になります........何が間違っているのか...

于 2012-09-10T14:52:12.320 に答える