我继承了一些使用 Gson 将我们的应用程序状态保存为 JSON 的代码,然后使用fromJson读取它。
Gson gson = createGson();
gson.fromJson(objString, myClass);
正在保存的字段之一是Location。不幸的是,由于我保存的位置在其 mExtras 中包含一个 mClassLoader,并且 Gson 库无法创建该 ClassLoader 并出现此错误,因此该保存数据的解析偶尔会失败:
RuntimeException:无法在没有参数的情况下调用受保护的 java.lang.ClassLoader()
有谁知道为什么 ClassLoader 被包含在我的位置的附加内容中,以及它是否应该以 JSON 表示形式结束?
我假设我可以通过单独保存 Location 对象中的关键字段(例如,经度、纬度、高度、时间、准确性)来解决此问题,但如果可能的话,最好保存 Location 对象。
我看到有一个ExclusionStrategy对象我可以用来排除字段,但我不确定我是否可以/应该使用它来排除我位置内部的额外内容......
仅供参考,这是我的 Location 对象的 JSON 数据(更改了经度和纬度以隐藏我):
{
<snip>
"lastKnownLocation": {
"mResults": [
0,
0
],
"mProvider": "gps",
"mExtras": {
"mParcelledData": {
"mOwnObject": 1,
"mObject": 5525040
},
"mClassLoader": {
"packages": {}
},
"mMap": {},
"mHasFds": false,
"mFdsKnown": true,
"mAllowFds": true
},
"mDistance": 0,
"mTime": 1354658984849,
"mAltitude": 5.199999809265137,
"mLongitude": -122.4376,
"mLon2": 0,
"mLon1": 0,
"mLatitude": 37.7577,
"mLat1": 0,
"mLat2": 0,
"mInitialBearing": 0,
"mHasSpeed": true,
"mHasBearing": false,
"mHasAltitude": true,
"mHasAccuracy": true,
"mAccuracy": 16,
"mSpeed": 0,
"mBearing": 0
},
<snip>
}
以下是代码不崩溃时 mExtras 包含的示例:
"mExtras": {
"mParcelledData": {
"mOwnsNativeParcelObject": true,
"mNativePtr": 1544474480
},
"mHasFds": false,
"mFdsKnown": true,
"mAllowFds": true
}