我正在使用一个类来创建一个始终运行的后台服务。使用Android应用程序时,用户可以输入通过SharedPreferences存储的数据。存储工作良好,存储的数据在存储它的活动中可用。我正在使用这样的SharedPreferences:
SELECT N'' COLLATE <Your Collation>
在服务中,我试图访问存储在活动中的该值。因此,我以相同的方式使用SharedPreferences:
SharedPreferences mPrefs = getSharedPreferences("Identifier",Context.MODE_PRIVATE);
我正在活动中以这种方式存储对象:
SharedPreferences mPrefs = getSharedPreferences("Identifier",Context.MODE_PRIVATE);
并尝试以这种方式读取它,但是json返回null:
Gson gson = new Gson();
SharedPreferences.Editor prefsEditor = mPrefs.edit();
String json = gson.toJson(myObject);
prefsEditor.putString("value",json);
prefsEditor.commit();
有什么主意吗?上下文是否错误?但是应该怎么办?
答案 0 :(得分:1)
尝试使用默认的共享首选项实例,该实例在所有Activity和Service类之间共享,请使用以下方法。
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this/*context*/);
这是存储基本数据类型(如布尔值)或可序列化对象的最佳方法。但是,如果要捕获大量JSON数据,则可以考虑使用SQLite数据库。
答案 1 :(得分:0)
问题在于该服务正在不同的进程中运行。因此,我使用了适用于多个过程的托盘:https://github.com/grandcentrix/tray。