我目前正在开发一个显示用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);
我没有发现其他人有同样的问题,所以我不知道这是怎么发生的。
感谢您的帮助。
答案 0 :(得分:2)
事实上,问题出在语法上(这是正确的,但并不适用于所有地方)
从Map创建对象会生成一种特殊的JSON语法,该语法不适用于19以下的API。这就是我的应用程序在4.3下崩溃的原因。
为了从Map中获得正确的语法,我使用了这个诡计:
parseFeedData(new JSONObject(new Gson().toJson(object));