0

JSONObjectAndroidで作成しようとすると、このエラーが発生します

org.json.JSONException: Value {"0" : [{"original" : "car", "translation" : "araba"}]}の型java.lang.Stringに変換できませんJSONObject

を使用してサーバーから返された文字列を使用すると、上記のエラーが発生しますHttpClient

上記の同じ文字列を取得して静的文字列を定義し、それが問題ないと解析すると。HttpClientを使用して取得するときに考慮しなければならないデコードまたはエンコードの問題はありJSONますか?

テストとしてc#で文字列を手動で構築し、JSONそれを返しています

return "{\"0\" : [{\"original\" : \"car\", \"translation\" : \"araba\"}]}";

ここにコードがあります

    HttpClient httpClient = new DefaultHttpClient();
        HttpContext localContext = new BasicHttpContext();
        String s = "http://10.0.2.2:63200/OnlineArabic/api/datasen";
        HttpGet httpGet = new HttpGet(s);

    HttpResponse response = httpClient.execute(httpGet, localContext);
    HttpEntity entity = response.getEntity();
    InputStream instream = entity.getContent();

     BufferedReader reader = new BufferedReader(new InputStreamReaderinstream , "UTF-8"),8 );
         StringBuilder sb = new StringBuilder();

         String line = null;
        try {
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }


        String result= convertStreamToString(instream);             
    String jsonString = sb.toString();
    JSONObject jObject = new JSONObject(jsonString);

何か案が?

ログは次のとおりです。

12-01 13:48:08.156: W/System.err(22947): org.json.JSONException: Value {"0" : [{"original" : "car", "translation" : "araba"}]} of type java.lang.String cannot be converted to JSONObject
12-01 13:48:08.160: W/System.err(22947):    at org.json.JSON.typeMismatch(JSON.java:107)
12-01 13:48:08.160: W/System.err(22947):    at org.json.JSONObject.<init>(JSONObject.java:158)
12-01 13:48:08.160: W/System.err(22947):    at org.json.JSONObject.<init>(JSONObject.java:171)
12-01 13:48:08.170: W/System.err(22947):    at com.ls.audioplayer.MainActivity.call(MainActivity.java:137)
12-01 13:48:08.170: W/System.err(22947):    at com.ls.audioplayer.MainActivity$1.onClick(MainActivity.java:294)
12-01 13:48:08.180: W/System.err(22947):    at android.view.View.performClick(View.java:2408)
12-01 13:48:08.180: W/System.err(22947):    at android.view.View$PerformClick.run(View.java:8816)
12-01 13:48:08.190: W/System.err(22947):    at android.os.Handler.handleCallback(Handler.java:587)
12-01 13:48:08.190: W/System.err(22947):    at android.os.Handler.dispatchMessage(Handler.java:92)
12-01 13:48:08.221: W/System.err(22947):    at android.os.Looper.loop(Looper.java:123)
12-01 13:48:08.221: W/System.err(22947):    at android.app.ActivityThread.main(ActivityThread.java:4627)
12-01 13:48:08.221: W/System.err(22947):    at java.lang.reflect.Method.invokeNative(Native Method)
12-01 13:48:08.231: W/System.err(22947):    at java.lang.reflect.Method.invoke(Method.java:521)
12-01 13:48:08.231: W/System.err(22947):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
12-01 13:48:08.240: W/System.err(22947):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
12-01 13:48:08.240: W/System.err(22947):    at dalvik.system.NativeStart.main(Native Method)
4

3 に答える 3

2

サーバーが UTF-8 でエンコードされたデータを送信していることを確認してください。また、先頭/末尾に改行文字がないことも確認してください。

Eclipse の logcat ツールは、これらの特殊文字を見つけるのに役立ちます。コマンド ラインの Logcat では、特殊文字がレンダリングされないことがあります。

于 2012-12-02T10:30:34.980 に答える
0

あなたのコードでは、

BufferedReaderリーダー=newBufferedReader(new InputStreamReaderinstream、 "UTF-8")、8);

これをに変更します

BufferedReaderリーダー=newBufferedReader(new InputStreamReader(instream、 "UTF-8")、8);

于 2012-12-02T10:58:06.303 に答える
0

私の唯一のことは、httpgetコードに付属する文字列を何らかの形で破壊していることです。 EasyHttpClient などのhttpリクエスト用のライブラリを使用することをお勧めます。プロジェクトでそのクラスを作成し、すべてのコードの代わりに行う

EasyHttpClient client = new EasyHttpClient();
String jsonString = client.get("http://10.0.2.2:63200/OnlineArabic/api/datasen");

次に、それをオブジェクトに入れることができるかどうかを確認します。残念ながら、そのコードをテストすることはできません。ここには Android 4.2 しかインストールされていません。

于 2012-12-02T08:05:35.097 に答える