Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SharedReferences保存阵列列表<;整数>;在发布版本中使用双值_Java_Android_Arraylist_Sharedpreferences_Release - Fatal编程技术网

Java 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<>(); } 公共类注册

所以我有一个问题,我似乎找不到原因,所以我在这里寻求一些帮助。 我能找到问题的根源,但我不知道为什么会发生,以下是我所知道的

这是我试图保存在SharedReferences中的示例

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太大是否有原因?