getJSONObject在android 4.3下抛出JSONException但在android 4.4.2上工作正常

时间:2014-10-07 10:08:47

标签: java android json

我目前正在开发一个显示用JSON序列化的对象的Android应用程序。 它在我的Nexus 5(4.4.2)上工作正常,但在三星Galaxy S3(4.3)上崩溃。应用程序崩溃,因为此设备上特别发生JSONException。

我的JSON是从Map生成的,如下所示:

Map<String, Object> dataMap = new HashMap<String, Object>();
//
// filling the map
//
new JSONObject(map);

日志:

Caused by: org.json.JSONException: Value {dealer={logo=null, name=Au café Bonheur}, title=Un mocha à 3€, price=3.0, feed_picture=https://shotgun-staging.s3.amazonaws.com/deals/tutorial1/feed, original_price=5.0} at deal of type java.lang.String cannot be converted to JSONObject
            at org.json.JSON.typeMismatch(JSON.java:100)
            at org.json.JSONObject.getJSONObject(JSONObject.java:577)
            at com.shotguntheapp.android.adapters.StackAdapter.getView(StackAdapter.java:33)
            at com.shotguntheapp.android.views.StackView.computeLayout(StackView.java:74)
            at com.shotguntheapp.android.views.StackView.setAdapter(StackView.java:60)
            at com.shotguntheapp.android.activities.FeedActivity.displayFeed(FeedActivity.java:91)
            at com.shotguntheapp.android.activities.Tuto1FeedActivity.reload(Tuto1FeedActivity.java:97)
            at com.shotguntheapp.android.activities.RequestsActivity.onResume(RequestsActivity.java:62)
            at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1209)
            at android.app.Activity.performResume(Activity.java:5450)
            at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2909)
            at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2948)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2354)

JSON似乎没有错。 提出异常的行

JSONObject deal = shotgun.getJSONObject(Api.JSON_DEAL);

我没有发现其他人有同样的问题,所以我不知道这是怎么发生的。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

事实上,问题出在语法上(这是正确的,但并不适用于所有地方)

从Map创建对象会生成一种特殊的JSON语法,该语法不适用于19以下的API。这就是我的应用程序在4.3下崩溃的原因。

为了从Map中获得正确的语法,我使用了这个诡计:

parseFeedData(new JSONObject(new Gson().toJson(object));