POJO 的 ArrayList 未保存在所有设备共享首选项上
ArrayList of POJOs not saving on all device sharedpreferences
我正在制作一个简单的预算应用程序,我的应用程序中有一个名为 budgetLedger 的 POJO,它看起来像这样:
import java.io.Serializable;
public class budgetDateAndTime implements Serializable {
int hour, minute, year, month, day;
double amount;
public budgetDateAndTime(int hour, int minute, int year, int month, int day, double amount) {
this.year = year;
this.month = month;
this.day = day;
this.hour = hour;
this.minute = minute;
this.amount = amount;
}
.....
以及一些 getter 和 setter。我制作了这些的 ArrayList 并试图让它们保存在 SharedPreferences 中。问题是它在我的 phone(Samsung Galaxy Note 9)上保存,但在其他 phone 上似乎没有保存,而且在 AndroidStudio 模拟器中也没有保存。以下是我保存和加载 ArrayList 的方法:
public static final String LEDGER_PREFS = "LEDGER_PREF";
public static final String NAME_OF_LED = "ledger";
public void saveLedger() {
SharedPreferences sharedPref = getActivity().getSharedPreferences(LEDGER_PREFS, getContext().MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
Gson gson = new Gson();
String json = gson.toJson(budgetLedgerList);
editor.putString(NAME_OF_LED, json);
editor.apply();
}
public ArrayList<budgetDateAndTime> getLedger() {
SharedPreferences sharedPref = getActivity().getSharedPreferences(LEDGER_PREFS, getContext().MODE_PRIVATE);
Gson gson = new Gson();
String json = sharedPref.getString(NAME_OF_LED, null);
Log.d("BTAG", "json in getledger: " + json);
Type type = new TypeToken<ArrayList<budgetDateAndTime>>() {}.getType();
ArrayList<budgetDateAndTime> theList = gson.fromJson(json, type);
return theList;
}
我只在 onDestroy() 中调用了 saveLedger(),并且我只在 onCreate() 中将 getLedger() 分配给一个 ArrayList 变量。同样,它适用于我的 phone,但不适用于我尝试过的任何其他 phone。有人知道为什么会这样吗?日志显示当应用程序关闭或 phone 重新启动时 json 为空,因此这不是显示问题。任何帮助将不胜感激!
我通过在 onPause() 中调用 saveLedger() 修复了它。不确定为什么会起作用。
我正在制作一个简单的预算应用程序,我的应用程序中有一个名为 budgetLedger 的 POJO,它看起来像这样:
import java.io.Serializable;
public class budgetDateAndTime implements Serializable {
int hour, minute, year, month, day;
double amount;
public budgetDateAndTime(int hour, int minute, int year, int month, int day, double amount) {
this.year = year;
this.month = month;
this.day = day;
this.hour = hour;
this.minute = minute;
this.amount = amount;
}
.....
以及一些 getter 和 setter。我制作了这些的 ArrayList 并试图让它们保存在 SharedPreferences 中。问题是它在我的 phone(Samsung Galaxy Note 9)上保存,但在其他 phone 上似乎没有保存,而且在 AndroidStudio 模拟器中也没有保存。以下是我保存和加载 ArrayList 的方法:
public static final String LEDGER_PREFS = "LEDGER_PREF";
public static final String NAME_OF_LED = "ledger";
public void saveLedger() {
SharedPreferences sharedPref = getActivity().getSharedPreferences(LEDGER_PREFS, getContext().MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
Gson gson = new Gson();
String json = gson.toJson(budgetLedgerList);
editor.putString(NAME_OF_LED, json);
editor.apply();
}
public ArrayList<budgetDateAndTime> getLedger() {
SharedPreferences sharedPref = getActivity().getSharedPreferences(LEDGER_PREFS, getContext().MODE_PRIVATE);
Gson gson = new Gson();
String json = sharedPref.getString(NAME_OF_LED, null);
Log.d("BTAG", "json in getledger: " + json);
Type type = new TypeToken<ArrayList<budgetDateAndTime>>() {}.getType();
ArrayList<budgetDateAndTime> theList = gson.fromJson(json, type);
return theList;
}
我只在 onDestroy() 中调用了 saveLedger(),并且我只在 onCreate() 中将 getLedger() 分配给一个 ArrayList 变量。同样,它适用于我的 phone,但不适用于我尝试过的任何其他 phone。有人知道为什么会这样吗?日志显示当应用程序关闭或 phone 重新启动时 json 为空,因此这不是显示问题。任何帮助将不胜感激!
我通过在 onPause() 中调用 saveLedger() 修复了它。不确定为什么会起作用。