2

サーバーはHTTPPOST応答の本文を介してJSONオブジェクトを返しますが、アプリが文字列をJSONObjectに変換しようとすると、次のエラーが発生します。

06-02 09:05:34.380: E/JSONException_MyAppService(19913): org.json.JSONException: Value {"VALS":{"VAL1":"hello","VAL2":"hello2","VAL3":"hello3"}} of type java.lang.String cannot be converted to JSONObject

サーバーが許容可能なJSONエンコード文字列を返しているように見えますが、JSONObjectに変換されません。サーバーの応答ヘッダーのコンテンツタイプを「application/json」に変更しました。私がこれを修正するのを手伝ってください、私は一日中試みてきました。

編集-私は次のコードを使用します:

try {
    ResponseHandler<String> responseHandler=new BasicResponseHandler();
    String responseBody = client.execute(post, responseHandler);
    JSONObject response=new JSONObject(responseBody);
} catch (ClientProtocolException e) {
    e.printStackTrace();
    Log.e("ClientProtocol_"+TAG,""+e);
} catch (ClientProtocolException e) {
    e.printStackTrace();
    Log.e("IO_"+TAG,""+e);
} catch (ClientProtocolException e) {
    e.printStackTrace();
    Log.e("JSONException_"+TAG,""+e);
}

私はイムラン・カーンの提案も試しました:

try {
    HttpResponse response = client.execute(post);
    HttpEntity entity = response.getEntity();
    if (entity != null) {
        String retSrc = EntityUtils.toString(entity); 
        // parsing JSON
        JSONObject result = new JSONObject(retSrc); //Convert String to JSON Object
        JSONArray tokenList = result.getJSONArray("VALS");

        JSONObject oj = tokenList.getJSONObject(0);
        String token = oj.getString("VAL1"); 
        String token1 = oj.getString("VAL2");
        String token11 = oj.getString("VAL3");  
    }
} catch (ClientProtocolException e) {
    e.printStackTrace();
    Log.e("ClientProtocol_"+TAG,""+e);
} catch (ClientProtocolException e) {
    e.printStackTrace();
    Log.e("IO_"+TAG,""+e);
} catch (ClientProtocolException e) {
    e.printStackTrace();
    Log.e("JSONException_"+TAG,""+e);
}

:'(:'(

4

4 に答える 4

4

お元気ですか?それは動作するはずです:

JSONObject object = new JSONObject (yourString);
于 2012-06-02T19:10:05.983 に答える
2

次のように文字列をjsonに変換できます。

      String str="{\"VALS\":{\"VAL1\":\"hello\",\"VAL2\":\"hello2\",\"VAL3\":\"hello3\"}}";
  try {
    JSONObject result = new JSONObject(str);
    JSONObject resultf = result.getJSONObject("VALS");
    Toast.makeText(this, resultf.getString("VAL1").toString(), Toast.LENGTH_SHORT).show();
    Toast.makeText(this, resultf.getString("VAL2").toString(), Toast.LENGTH_SHORT).show();
    Toast.makeText(this, resultf.getString("VAL3").toString(), Toast.LENGTH_SHORT).show();
} catch (JSONException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

        }
于 2012-06-02T19:31:56.300 に答える
1
try {
        response = httpclient.execute(httpget);
        HttpEntity entity = response.getEntity();

        if (entity != null) {
           String retSrc = EntityUtils.toString(entity); 
           // parsing JSON
            JSONObject result = new JSONObject(retSrc); //Convert String to JSON Object

            JSONObject object2 = result.getJSONObject("VALS");

             String token = object2.getString("VAL1"); 
             String token = object2.getString("VAL2");
             String token = object2.getString("VAL3");  
        }
}
 catch (Exception e) {
  }
于 2012-06-02T20:02:15.867 に答える
0

それを私が直した!それは完全に私のサーバーのせいでした。サーバーが正しく応答していないことが判明しました。何が起こったのかというと、Webフレームワーク内にバグがあり、最新バージョンに更新した後、問題は自然に解決しました。古いバージョンのWebフレームワークが、誤ったコンテンツタイプの応答ヘッダーを返したか、奇妙なエンコーディングを使用したと思います。

したがって、ここではJavaに問題がなかったため、ここでのすべてのJavaコードは100%正しいはずです。あなたのすべての努力に感謝します!

ミゲルの答えが最も近い説明だったので、私は彼の答えを受け入れます。

于 2012-06-03T04:03:31.557 に答える