Java 为什么不';应用程序启动后是否立即加载我的SharedReferences?
我使用Java 为什么不';应用程序启动后是否立即加载我的SharedReferences?,java,android,android-listview,sharedpreferences,Java,Android,Android Listview,Sharedpreferences,我使用SharedReferences来存储用户输入,这样当应用程序关闭然后重新启动时,用户输入将保持在那里,而不是自动删除自身。但是,当我在关闭应用程序后重新启动应用程序时,用户输入不会显示在屏幕上,直到用户添加另一个输入。用户添加另一个输入后,在关闭应用程序之前在会话中添加的输入现在显示在屏幕上。知道为什么会这样吗?谢谢 是在需要可视化示例的情况下发生的事情 这是负责加载用户输入内容的方法,我在onCreate方法中调用此方法: public void loadSemesters()
SharedReferences
来存储用户输入,这样当应用程序关闭然后重新启动时,用户输入将保持在那里,而不是自动删除自身。但是,当我在关闭应用程序后重新启动应用程序时,用户输入不会显示在屏幕上,直到用户添加另一个输入。用户添加另一个输入后,在关闭应用程序之前在会话中添加的输入现在显示在屏幕上。知道为什么会这样吗?谢谢
是在需要可视化示例的情况下发生的事情
这是负责加载用户输入内容的方法,我在onCreate
方法中调用此方法:
public void loadSemesters() {
sharedPreferences = getSharedPreferences("shared preferences", MODE_PRIVATE);
Gson gson = new Gson();
String json = sharedPreferences.getString("SEMESTER_LIST", null);
Type type = new TypeToken<ArrayList<Semester>>() {
}.getType();
mySemesters = gson.fromJson(json, type);
if (mySemesters == null) {
mySemesters = new ArrayList<>();
}
}
public void loadsemests(){
sharedPreferences=getSharedPreferences(“共享首选项”,模式\私人);
Gson Gson=新的Gson();
String json=SharedReferences.getString(“学期列表”,null);
Type Type=new-TypeToken(){
}.getType();
mysemests=gson.fromJson(json,类型);
if(mysemests==null){
mysemests=newarraylist();
}
}
此方法负责保存用户输入:
public void saveSemesters() {
sharedPreferences = getSharedPreferences("shared preferences", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
Gson gson = new Gson();
Type type = new TypeToken<ArrayList<Semester>>() {
}.getType();
String json = gson.toJson(mySemesters, type);
editor.putString("SEMESTER_LIST", json);
editor.apply();
}
public void savesemests(){
sharedPreferences=getSharedPreferences(“共享首选项”,模式\私人);
SharedReferences.Editor=SharedReferences.edit();
Gson Gson=新的Gson();
Type Type=new-TypeToken(){
}.getType();
字符串json=gson.toJson(mysemests,type);
putString(“学期列表”,json);
editor.apply();
}
作为一种解决方案,我猜你忘记在应用程序重新启动后将数据设置到视图(更新UI),因此你需要更新UI
public void loadSemesters() {
sharedPreferences = getSharedPreferences("shared preferences", MODE_PRIVATE);
Gson gson = new Gson();
String json = sharedPreferences.getString("SEMESTER_LIST", null);
Type type = new TypeToken<ArrayList<Semester>>() {
}.getType();
mySemesters = gson.fromJson(json, type);
//Your have your semeters arraylist , now get the data from the list and
//set it to
// your views
if (mySemesters == null) {
mySemesters = new ArrayList<>();
}
}
public void loadsemests(){
sharedPreferences=getSharedPreferences(“共享首选项”,模式\私人);
Gson Gson=新的Gson();
String json=SharedReferences.getString(“学期列表”,null);
Type Type=new-TypeToken(){
}.getType();
mysemests=gson.fromJson(json,类型);
//你有你的semeters arraylist,现在从列表中获取数据并
//设定为
//你的观点
if(mysemests==null){
mysemests=newarraylist();
}
}
再次启动应用程序后,您是否检查了您的列表是否为空或null?我想它不是空的,因为添加新学期后,添加的其他学期现在显示在列表视图中。不管是哪种方式,我怎么能检查呢@Takieddines假设你的列表是学期,那么循环列表并将数据记录在其中是的,mysemests
是一个ArrayList
@Takieddines为你的ArrayList创建一个循环,然后在应用程序启动后立即检查,检查其中是否有数据我不知道如何将数据添加到视图中您是否使用带适配器的recyclerview?当您从edittext添加Semeter时,您在哪里显示它们?我正在使用ListView
和ArrayAdapter
一起使用,因此再次调用您的适配器,adapter adapter=new adapter(在这里传递您的列表)。。然后将适配器设置为listview