【问题标题】:Android JSON doesnt parse on samsung gioAndroid JSON 不解析三星 gio
【发布时间】:2013-09-25 22:22:36
【问题描述】:

尝试在 samsung gio(运行 2.3.6)上解析一些 JSON 时遇到一个奇怪的异常,我在 xperia neo(运行 4.0)上尝试过它,它运行良好,我也尝试过不同的 JSON适用于两种设备,我已经验证了 JSON 并且它是有效的!我提供代码、json 文件和 logcat,不胜感激。

解析器

public static JSONObject getJSONObject(String url) throws ClientProtocolException, IOException, JSONException
{
    DefaultHttpClient httpclient = new DefaultHttpClient(new BasicHttpParams());
    HttpPost httppost = new HttpPost(url);
    httppost.setHeader("Content-type", "application/json");
    InputStream inputStream = null;
    HttpResponse response;
    response = httpclient.execute(httppost);
    HttpEntity entity = response.getEntity();
    inputStream = entity.getContent();
    //buildJSONString( inputStream );
    String s = buildJSONString( inputStream );
    Log.v("", s); // note that s is printed along all json files and all devices
    JSONObject jObj = new JSONObject( s );
    Log.v("", jObj +""); // it doesnt print on samsung, prints on xperia
    return jObj ;
} 
private static String buildJSONString( InputStream inputStream ) throws IOException
    {
        BufferedReader reader;
        StringBuilder stringBuilder=null;
        reader = new BufferedReader(new InputStreamReader(inputStream,"UTF-8"), 8);
        stringBuilder = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null)
            stringBuilder.append(line + "\n");
        if (inputStream != null)
            inputStream.close();
        return stringBuilder.toString();
    }

工作 json

{
    "song_list": [
        {
            "id": "4",
            "title_en": "Aces High",
            "artist_en": "IRON MAIDEN",
            "thumb_url": "http://192.168.0.81:8080/content/iron_maiden.jpg",
            "media_url": "http://192.168.0.81:8080/content/iron_maiden.mp3",
            "preview_url": "blabla",
            "num_download": "2846",
            "price": "0.50",
            "rating" : "4"
        },
        {
            "id": "8",
            "title_en": "Wasted Years",
            "artist_en": "IRON MAIDEN",
            "thumb_url": "http://192.168.0.81:8080/content/iron_maiden.jpg",
            "media_url": "http://192.168.0.81:8080/content/iron_maiden.mp3",
            "preview_url": "blabla",
            "num_download": "1984",
            "price": "0.50",
            "rating" : "4"
        }
    ]
}

json 不工作

{
    "artist_list": [
        {
            "id": "1",
            "artist_en": "MOTORHEAD",
            "artist_ar": "موتورهيد",
            "thumb_url": "http://192.168.0.81:8080/content/motorhead.jpg",
            "num_download": "2846"
        },
        {
            "id": "2",
            "artist_en": "WHITESNAKE",
            "artist_ar": "وايتسنيك",
            "thumb_url": "http://192.168.0.81:8080/content/whitesnake.jpg",
            "num_download": "1984"
        }
    ]
}

服务器命中

@Override
protected String doInBackground(String... arg0)
{
    try
    {   jObject = JSONParser.getJSONObject(url);    }
    catch (Exception e)
    {   cancel(true);   Log.v("", "failed");    }
    return null;
}

日志猫

09-25 16:04:31.869: V/(10704): ?{
09-25 16:04:31.869: V/(10704):     "artist_list": [
09-25 16:04:31.869: V/(10704):         {
09-25 16:04:31.869: V/(10704):             "id": "1",
09-25 16:04:31.869: V/(10704):             "artist_en": "MOTORHEAD",
09-25 16:04:31.869: V/(10704):             "artist_ar": "موتورهيد",
09-25 16:04:31.869: V/(10704):             "thumb_url": "http://192.168.0.81:8080/content/motorhead.jpg",
09-25 16:04:31.869: V/(10704):             "num_download": "2846"
09-25 16:04:31.869: V/(10704):         },
09-25 16:04:31.869: V/(10704):         {
09-25 16:04:31.869: V/(10704):             "id": "2",
09-25 16:04:31.869: V/(10704):             "artist_en": "WHITESNAKE",
09-25 16:04:31.869: V/(10704):             "artist_ar": "وايتسنيك",
09-25 16:04:31.869: V/(10704):             "thumb_url": "http://192.168.0.81:8080/content/whitesnake.jpg",
09-25 16:04:31.869: V/(10704):             "num_download": "1984"
09-25 16:04:31.869: V/(10704):         }
09-25 16:04:31.869: V/(10704):     ]
09-25 16:04:31.869: V/(10704): }
09-25 16:04:31.869: W/AsyncTask(10704): java.lang.InterruptedException
09-25 16:04:31.869: W/AsyncTask(10704):     at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1272)
09-25 16:04:31.869: W/AsyncTask(10704):     at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:220)
09-25 16:04:31.869: W/AsyncTask(10704):     at java.util.concurrent.FutureTask.get(FutureTask.java:83)
09-25 16:04:31.869: W/AsyncTask(10704):     at android.os.AsyncTask$3.done(AsyncTask.java:196)
09-25 16:04:31.869: W/AsyncTask(10704):     at java.util.concurrent.FutureTask$Sync.innerCancel(FutureTask.java:294)
09-25 16:04:31.869: W/AsyncTask(10704):     at java.util.concurrent.FutureTask.cancel(FutureTask.java:76)
09-25 16:04:31.869: W/AsyncTask(10704):     at android.os.AsyncTask.cancel(AsyncTask.java:325)
09-25 16:04:31.869: W/AsyncTask(10704):     at com.dwaik.jsonparser.ServerHit.doInBackground(ServerHit.java:36)
09-25 16:04:31.869: W/AsyncTask(10704):     at com.dwaik.jsonparser.ServerHit.doInBackground(ServerHit.java:1)
09-25 16:04:31.869: W/AsyncTask(10704):     at android.os.AsyncTask$2.call(AsyncTask.java:185)
09-25 16:04:31.869: W/AsyncTask(10704):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
09-25 16:04:31.869: W/AsyncTask(10704):     at java.util.concurrent.FutureTask.run(FutureTask.java:138)
09-25 16:04:31.869: W/AsyncTask(10704):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
09-25 16:04:31.869: W/AsyncTask(10704):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
09-25 16:04:31.869: W/AsyncTask(10704):     at java.lang.Thread.run(Thread.java:1019)

【问题讨论】:

  • 您是否尝试在加载时添加UTF-8
  • 加载什么?在哪里做呢?
  • 我已经有了,我会发布 buildJSONString() 实现
  • 尝试设置 `httpost.setHeader("Content-type", "application/json; charset=utf-8");` 代替你的标题
  • 没有工作:(我确实在 buildJSONString() 方法中设置了编码,并且 logcat 打印了没有编码问题的字符串,我的问题是当我尝试实例化新的 jsonobject,JSONObject jObj = new JSONObject ( s );

标签: android json


【解决方案1】:

试试这个

response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
String s = EntityUtils.toString(entity, HTTP.UTF_8);

来自Android Java UTF-8 HttpClient Problem

您必须导入 apache 依赖项。

【讨论】:

  • Oups 抱歉,我遇到了一个与您的问题相似的问题。我认为这是解决方案... ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多