我希望将自定义对象转换为字符串,并保存在SharePreferences中,这是我的最终目标。我试了下线,但失败了。
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。
有人知道吗?
发布于 2013-10-11 16:41:02
根据我的观察,如果您找到了multiple JSON fields for ANY_VARIABLE_NAME,那么很可能是因为GSON无法将对象转换为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;
}将myObject转换为jsonString的代码:
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);发布于 2014-08-20 10:42:38
看来你的问题已经解决了,但这是给那些没有得到答案的人(比如我):
您可能遇到的一个问题是,该字段已经存在于您扩展的类中。在这种情况下,字段已经存在于B类中。
可以这样说:
public class A extends B {
private BigDecimal netAmountTcy;
private BigDecimal netAmountPcy;
private BigDecimal priceTo;
private String segment;
private BigDecimal taxAmountTcy;
private BigDecimal taxAmountPcy;
private BigDecimal tradeFeesTcy;
private BigDecimal tradeFeesPcy;
// getter and setter for the above fields
}其中B类类似于(当然还有更多的重复):
public class B {
private BigDecimal netAmountPcy;
// getter and setter for the above fields
}只需将其移除字段"netAmountPcy“类A,您仍将拥有该字段(因为它扩展了类)。
https://stackoverflow.com/questions/19315431
复制相似问题