我想将自定义对象转换为字符串并保存在 SharedPreferences 中,这是我的最终目标。我尝试了下面的行但失败了。
String matchString = gson.toJson(userMatches);
Logcat :
10-11 15:24:33.245: E/AndroidRuntime(21427): FATAL EXCEPTION: main
10-11 15:24:33.245: E/AndroidRuntime(21427): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=4001, result=-1, data=null}
to activity {com.objectlounge.ridesharebuddy/com.objectlounge.ridesharebuddy.activities.RS_CreateTripActivity}:
java.lang.IllegalArgumentException: class android.text.BoringLayout declares multiple JSON fields named mPaint
10-11 15:24:33.245: E/AndroidRuntime(21427): at android.app.ActivityThread.deliverResults(ActivityThread.java:3302)
我尝试了很多选项,并相信自定义对象中有变量。错误日志中需要关注的事情是java.lang.IllegalArgumentException: class android.text.BoringLayout declares multiple JSON fields named mPaint
。不知道什么是mPaint。
有人有什么想法吗?
根据我的观察如果你发现multiple JSON fields for ANY_VARIABLE_NAME
,那么很可能是因为 GSON 无法将 object 转换为 jsonString 以及 jsonString 转换为 object。您可以尝试下面的代码来解决它。
添加以下类以告诉 GSON 仅保存和/或检索那些声明了序列化名称的变量。
class Exclude implements ExclusionStrategy {
@Override
public boolean shouldSkipClass(Class<?> arg0) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean shouldSkipField(FieldAttributes field) {
SerializedName ns = field.getAnnotation(SerializedName.class);
if(ns != null)
return false;
return true;
}
}
下面是您需要保存/检索其对象的类。
添加@SerializedName
用于需要保存和/或检索的变量。
class myClass {
@SerializedName("id")
int id;
@SerializedName("name")
String name;
}
将 Object 转换为 json String 的代码:
Exclude ex = new Exclude();
Gson gson = new GsonBuilder().addDeserializationExclusionStrategy(ex).addSerializationExclusionStrategy(ex).create();
String jsonString = gson.toJson(myObject);
从 jsonString 获取对象的代码:
Exclude ex = new Exclude();
Gson gson = new GsonBuilder().addDeserializationExclusionStrategy(ex).addSerializationExclusionStrategy(ex).create();
myClass myObject = gson.fromJson(jsonString, myClass.class);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)