gpt4 book ai didi

java - SharedPreferences 在应用程序被销毁时丢失数据

转载 作者:行者123 更新时间:2023-11-30 01:17:42 25 4
gpt4 key购买 nike

所以我试图在 onPaus() 方法中将数据保存在 sharePreferences 中,我也在 onCreate() 中尝试过同样的事情,但没有用,在这里是一个代码:

public class Favorite extends Activity implements ListView.OnItemClickListener
{
private static final String PREFS_FILE = "com.example.stewiesh.eduguide.preferences1";
private static final String KEY_FAVORITE = "Key_favorite";
static ArrayList<String> uniID = new ArrayList<String>();
/** SharedPreferences preferences;
SharedPreferences.Editor editor; **/
ArrayAdapter<String> adapter;
ListView list;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.favorite);
list = (ListView) findViewById(R.id.favoriteList);
adapter = new ArrayAdapter<String>(this, R.layout.list_layout);
list.setOnItemClickListener(this);
list.setAdapter(adapter);
// preferences = getSharedPreferences(PREFS_FILE, Context.MODE_PRIVATE);
// editor = preferences.edit();
// setData();
runOnUiThread(new Runnable() {
public void run() {
System.out.println("i am out");
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
adapter.add(settings.getString(KEY_FAVORITE,"none of them is here bitch"));
adapter.notifyDataSetChanged();
}
});;
}
/**
public void setData()
{
for (int i = 0; i < Page2.responses.length; i++)
{
for(int j=0;j<uniID.size();j++)
{
if(Page2.responses[i].getPrograma().toString().equals(uniID.get(j)))
{
editor.clear();
editor.putString(KEY_FAVORITE,Page2.responses[i].getFakulteti()+" -- "+Page2.responses[i].getUniversiteti()+" "+Page2.responses[i].getPrograma().toString());
// editor.commit();
// editor.apply();
}
}
}
}
**/
@Override
protected void onPause() {
super.onPause();
// preferences = getSharedPreferences(PREFS_FILE, Context.MODE_PRIVATE);
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor = preferences.edit();
for (int i = 0; i < Page2.responses.length; i++)
{
for(int j=0;j<uniID.size();j++)
{
if(Page2.responses[i].getPrograma().toString().equals(uniID.get(j)))
{
editor.clear();
editor.putString(KEY_FAVORITE,Page2.responses[i].getFakulteti()+" -- "+Page2.responses[i].getUniversiteti()+" "+Page2.responses[i].getPrograma().toString());
editor.commit();
}
}
}
//editor.apply();
}

public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{

}
}

当我销毁应用程序而不是启动它时,它什么也没给我,我不明白为什么它不保存数据,我尝试了各种方法但是......

最佳答案

首先你应该删除

runOnUiThread(new Runnable() 
{
public void run() {
});

这部分来自您的代码:

runOnUiThread(new Runnable() {
public void run() {
System.out.println("i am out");
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
adapter.add(settings.getString(KEY_FAVORITE,"none of them is here bitch"));
adapter.notifyDataSetChanged();
}
});

因为您已经在 UI 线程中运行了您的那部分代码,所以再次添加 runOnUiThread 是没有意义的。

你无法保存任何东西的原因是你调用了editor.clear() 在循环中。

根据文档:

clear() - Mark in the editor to remove all values from the preferences.

您只需要 put 和 commit(),无需调用 editor.apply()

        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor = preferences.edit();
for (int i = 0; i < Page2.responses.length; i++)
{
for(int j=0;j<uniID.size();j++)
{
if(Page2.responses[i].getPrograma().toString().equals(uniID.get(j)))
{
editor.putString(KEY_FAVORITE,Page2.responses[i].getFakulteti()+" -- "+Page2.responses[i].getUniversiteti()+" "+Page2.responses[i].getPrograma().toString());
}
}
}

editor.commit();

你不需要一直提交,只有当你完成数据放置时才提交。

关于java - SharedPreferences 在应用程序被销毁时丢失数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37588509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com