2016-06-10 102 views
-1

我对android非常陌生,并且在保存和加载数据时遇到问题。当应用程序重新启动时,ArrayList将无法加载

我试图与一个应用程序保存和加载按钮,这些按钮应该保存2周的ArrayList与x和y坐标。

我试着做SharedPreferences它和它的作品,直到重新启动应用程序或屏幕旋转。

当我把看在应用程序文件中的ArrayList文件在SharedPreferences文件夹,但如果我按下按钮负荷我的应用程序将不会加载这些。

任何人都可以帮助我们为什么这个不起作用,当应用程序重新启动?

这是我的加载和保存代码:

public void saveArrayList(ArrayList aList, String s) { 
    SharedPreferences sharedPrefs = getSharedPreferences(prefs, MODE_PRIVATE); 
    editor = sharedPrefs.edit(); 

    Gson gson = new Gson(); 
    String json = gson.toJson(aList); 

    editor.putString(s, json); 
    editor.commit(); 
} 

public void loadFloatList(ArrayList aList, String s) { 
    SharedPreferences sharedPrefs = getSharedPreferences(prefs, MODE_PRIVATE); 
    Gson gson = new Gson(); 
    String json = sharedPrefs.getString(s, null); 
    Type type = new TypeToken<ArrayList<Float>>() { 
    }.getType(); 
    aList = gson.fromJson(json, type); 
} 

回答

0

可能出现的错误;您正在重新初始化gson和sharedPrefs,然后采用具有相同键值的新状态。你应该在onCreate中做到这一点。

@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    sharedPrefs = getSharedPreferences(PREFS, MODE_PRIVATE); 
    json = sharedPrefs.getString(JSON_KEY, ""); 
    gson = new Gson(); 
} 

最好是使用应用(),因为这个保存sharedprefs作为实例的值(一个或多个),但提交()做到这一点,当应用程序关闭。

public void saveArrayList(ArrayList aList) { 

    String json = gson.toJson(aList); 

    editor = sharedPrefs.edit(); 
    editor.putString(JSON_KEY, json); 
    editor.apply(); 
} 

public void loadFloatList(ArrayList aList, String s) { 

    json = sharedPrefs.getString(JSON_KEY, ""); 
    Type type = new TypeToken<ArrayList<Float>>() { 
    }.getType(); 
    aList = gson.fromJson(json, type); 
} 

还要注意的PREFS和JSON_KEY是最后的键值

private final String PREFS = "prefs"; 
private final String JSON_KEY = "json"; 
private SharedPreferences sharedPrefs; 
private SharedPreferences.Editor editor; 
private String json; 
private Gson gson; 
相关问题