Java SharedReferences保存阵列列表<;整数>;在发布版本中使用双值
所以我有一个问题,我似乎找不到原因,所以我在这里寻求一些帮助。 我能找到问题的根源,但我不知道为什么会发生,以下是我所知道的 这是我试图保存在SharedReferences中的示例Java SharedReferences保存阵列列表<;整数>;在发布版本中使用双值,java,android,arraylist,sharedpreferences,release,Java,Android,Arraylist,Sharedpreferences,Release,所以我有一个问题,我似乎找不到原因,所以我在这里寻求一些帮助。 我能找到问题的根源,但我不知道为什么会发生,以下是我所知道的 这是我试图保存在SharedReferences中的示例 public class Registo implements Serializable { int id; String name; ArrayList<Integer> commitedViolations= new ArrayList<>(); } 公共类注册
public class Registo implements Serializable {
int id;
String name;
ArrayList<Integer> commitedViolations= new ArrayList<>();
}
公共类注册表实现可序列化{
int-id;
字符串名;
ArrayList CommittedViolations=新建ArrayList();
}
我做了保存它的所有过程
public void addRegisto(Context context, Registo registo) {
ArrayList<Registo> registos = getRegistos(context);
if (registos == null)
registos = new ArrayList<>();
registos.add(registo);
saveRegistos(context, registos);
}
public void saveRegistos(Context context, ArrayList<Registo> favorites) {
// used for store arrayList in json format
SharedPreferences settings;
SharedPreferences.Editor editor;
settings = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
editor = settings.edit();
Gson gson = new Gson();
String jsonFavorites = gson.toJson(favorites);
editor.putString(REGISTOS, jsonFavorites);
editor.apply();
}
public void addRegisto(上下文上下文,Registo Registo){
arraylistregistos=getRegistos(上下文);
if(registos==null)
registos=newarraylist();
添加(registo);
saveRegistos(上下文,registos);
}
公共void保存注册表(上下文、ArrayList收藏夹){
//用于存储json格式的arrayList
共享引用设置;
SharedReferences.Editor;
设置=context.getSharedReferences(PREFS\u NAME,context.MODE\u PRIVATE);
editor=settings.edit();
Gson Gson=新的Gson();
字符串jsonFavorites=gson.toJson(收藏夹);
putString(REGISTOS,jsonFavorites);
editor.apply();
}
这就是神奇发生的地方,当我检索我保存在设备中的对象时,使用以下值保存的对象的arrayList[200,201,202],现在将它们作为双值返回[200.0,201.0,202.0]
我做了个变通办法,但我想知道为什么会这样
public ArrayList<Registo> getRegistos(Context context) {
SharedPreferences settings;
List<Registo> registos;
settings = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
if (settings.contains(REGISTOS)) {
String jsonFavorites = settings.getString(REGISTOS, null);
Gson gson = new Gson();
Registo[] registosItems = gson.fromJson(jsonFavorites, Registo[].class);
// <WORKAROUND>
for (Registo registosItem : registosItems) {
for (int i = 0; i < registosItem.getCommitedViolations().size(); i++) {
String str = String.valueOf(registosItem.getCommitedViolations().get(i));
double valueAsDouble = Double.parseDouble(str);
int valueAsInt= (int) valueAsDouble;
registosItem.getCommitedViolations().set(i, valueAsInt);
}
}
// </WORKAROUND>
registos = Arrays.asList(registosItems);
registos = new ArrayList<>(registos);
} else
return null;
return (ArrayList<Registo>) registos;
}
public ArrayList getRegistos(上下文){
共享引用设置;
登记册清单;
设置=context.getSharedReferences(PREFS\u NAME,context.MODE\u PRIVATE);
if(settings.contains(REGISTOS)){
String jsonFavorites=settings.getString(REGISTOS,null);
Gson Gson=新的Gson();
Registo[]registosItems=gson.fromJson(jsonFavorites,Registo[].class);
//
for(Registo registosItem:registosItems){
对于(int i=0;i
PS。最奇怪的是,调试版本工作得很好,这个错误只发生在发布版本上。for(Registo registosItem:registosItems){
for (Registo registosItem : registosItems) {
for (int i = 0; i < registosItem.getCommitedViolations().size(); i++) {
String str = String.valueOf(registosItem.getCommitedViolations().get(i));
int valueAsInt= Integer.parseInt(str);
registosItem.getCommitedViolations().set(i, valueAsInt);
}
}
对于(int i=0;i
这应该可以解决有关双精度的问题,为什么不直接解析字符串?这是
gson
的问题,与SharedReferences
无关,因为它们不会修改正在保存的字符串
错误出现在
gson
序列化和反序列化Integer
中。您可以看到一个问题。您的int太大是否有原因?