我试图通过Gson从一个活动发送LinkedHashMap。但是在另一个活动中,当我试图获取LinkedHashMap的键时,它将被检索为String类型的键,而不是Object类型的键。我在下面提供了我的代码。
活动1:
LinkedHashMap<TravelMode, String> polyPoints=(LinkedHashMap<TravelMode, String>) gData.values().toArray()[0];
Gson gson = new Gson();
Type entityType= new TypeToken< LinkedHashMap<TravelMode, String> >(){}.getType();
String list = gson.toJson(polyPoints,entityType);
mapIntent.putExtra(EXTRA_MESSAGE, list);
活动2:
String str= getIntent().getStringExtra(EXTRA_MESSAGE);
Gson gson = new Gson();
Type entityType= new TypeToken< LinkedHashMap<TravelMode, String> >(){}.getType();
LinkedHashMap<TravelMode, String>polypoint = gson.fromJson(str, entityType);
这是我在执行程序时遇到的错误
com.google.gson.JsonSyntaxException) com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 3 android
TravelMode:
class TravelMode implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
public String travelMode;
/**
* @return the travelMode
*/
public String getTravelMode() {
return travelMode;
}
/**
* @param travelMode the travelMode to set
*/
public void setTravelMode(String travelMode) {
this.travelMode = travelMode;
}
public TravelMode(String travelMode) {
super();
this.travelMode = travelMode;
}
}
请帮帮我。
答案 0 :(得分:3)
Gson
是自定义对象,那么 keys
会出现问题。默认进程会在您的密钥上调用toString()
,因为密钥的toString()
未被覆盖,您可能会收到类似:TravelMode@138532dc
的输出,从而导致错误。
要解决此问题,您必须实现Gson Custom Serializer和Deserializer(请参阅user guide here以及他们对其他其他库类的建议。)
或者使用Map<String, String>
进行实施。