Android-SharedReference没有正常工作?

Android-SharedReference没有正常工作?,android,arraylist,sharedpreferences,Android,Arraylist,Sharedpreferences,我的活动中有一个字符串的ArrayList,我想在SharedReference中将它存储为onPause,并在onCreate()中检索它,但我无法做到这一点 这是我的密码-: public static ArrayList<String> ignoredTasks; public static final String PREF_FILE_NAME = "savedPreferences"; @Override public void onCreate(Bundle saved

我的活动中有一个字符串的ArrayList,我想在SharedReference中将它存储为onPause,并在onCreate()中检索它,但我无法做到这一点

这是我的密码-:

public static ArrayList<String> ignoredTasks;
public static final String PREF_FILE_NAME = "savedPreferences";

@Override
public void onCreate(Bundle savedInstanceState)
{
    ignoredTasks =  loadBackStates();
}
@Override
public void onPause()
{
    super.onPause();
    Log.e(TAG, "I am pause");
    saveState();
}
@Override
public void onStop()
{
    super.onStop();
    Log.e(TAG, "I am stop");
    saveState();
}
@Override
public void onDestroy()
{
    super.onDestroy();
    Log.e(TAG, "i am destroy");
    saveState();
}

public void saveState()
{
    SharedPreferences spr = getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = spr.edit();
    int size = ignoredTasks.size();
    editor.putInt("size", size);
    for(int k = 0; k < size-1; k++)
    {
        editor.putString(k+"4", ignoredTasks.get(k));
        editor.commit();
    }

    //editor.commit();
}
public ArrayList<String> loadBackStates()
{
     ArrayList<String> ignoredTask = new ArrayList<String>();
    SharedPreferences sp = getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE);
    int size = sp.getInt("size", 0);
    for(int k = 0; k < size-1; k++)
    {
        ignoredTask.add(k, sp.getString(k + "4", " "));
    }
    return ignoredTask;

}


public void createMenuDialog(final int i, Drawable icon, final String taskName, final String pkgName)
{
    final AlertDialog.Builder menuDialog = new AlertDialog.Builder(this);
    menuDialog.setIcon(icon);
     menuDialog.setTitle(taskName);
menuDialog.setItems(menuItems, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {

                    /* User clicked so do some stuff */
                    String[] items = menuItems;

                    if(items[which].equals("Ignore"))
                    {
                        HashMap<String,String> newItem = new HashMap<String,String>();
                        newItem.put("Process", pkgName);
                        newItem.put("Name", taskName);
                        ignored.add(newItem);
                        ignoredTasks.add(pkgName);
                    }                                               
                }
            });
     menuDialog.show();
}
publicstaticarraylistignoredtask;
public static final String PREF_FILE_NAME=“savedPreferences”;
@凌驾
创建时的公共void(Bundle savedInstanceState)
{
ignoredTasks=loadBackStates();
}
@凌驾
公共无效暂停()
{
super.onPause();
Log.e(标记“我正在暂停”);
saveState();
}
@凌驾
公共void onStop()
{
super.onStop();
Log.e(标记“我是站”);
saveState();
}
@凌驾
公共空间
{
super.ondestory();
Log.e(标记“我正在销毁”);
saveState();
}
public void saveState()
{
SharedReferences spr=GetSharedReferences(首选文件名,Context.MODE\u PRIVATE);
SharedReferences.Editor=spr.edit();
int size=ignoredTasks.size();
编辑器.putInt(“大小”,大小);
对于(int k=0;k
问题是,当我使用back键退出我的应用程序,然后再次重新启动时,我可以看到SharedReference,但当我强制关闭我的应用程序时,它就消失了。有什么问题吗

请帮忙

谢谢

尝试使用而不是getPreferences

编辑:我已经阅读了您在评论中发布的logcat行。当你强制关闭时,Android会向你的应用发送一个SIGKILL信号,所以我认为你什么都做不了。读这个

试试这个

SharedPreferences spr =  activity.getSharedPreferences("SPR", Context.MODE_PRIVATE);
试试这个,也许会有帮助

for(int k = 0; k < size-1; k++)
{
    editor.putString(k+"4", ignoredTasks.get(k));

}
editor.commit();
for(int k=0;k
强制关闭立即终止您的应用程序,而不调用任何其他代码。这并不奇怪,事情就是这样的

听起来您已经记录了当您按Back键时会调用onPause()。您还应该检查在移动到其他活动或应用程序时是否调用了onPause()。例如,长按Home按钮并选择另一个应用程序,您应该会看到onPause()日志


这对你的目的来说应该足够了。为什么您认为在强制关闭(这是不可能的)后需要onPause()才能被调用?

@Rafaesp仍然不起作用。强制关闭后,共享引用中的所有内容都消失了:(可能当您强制关闭时,活动不会暂停。请使用Logcat查看它是否正在保存。请尝试在onDestroy()中调用saveState)尝试过了,我也在里面放了Log.d,但奇怪的是,即使这个函数在强制关闭时也没有得到调用…奇怪!!感谢你的努力,我投票支持了你的答案。谢谢你尝试帮助我。干杯!!@CapDroid问题仍然存在:(@Capdroid实际上问题是,每当我强制关闭我的应用程序时,onPause都没有收到呼叫,这就是为什么它无法保存我的应用程序的状态。你知道为什么它没有收到呼叫以及如何解决这个问题吗?它在我的真实代码中……我只是忘了在这里写:(事情是甚至onDestroy()强制关闭时未调用!!!!多奇怪的情况。onPause()也未调用?否:(
05-02 17:29:17.672:INFO/ActivityManager(59):强制停止包com.varundroid.util.IgnoreList uid=10036 05-02 17:29:17.672:INFO/Process(59):正在发送信号。PID:1118 SIG:9
这是我在logcat中得到的,没有日志。e消息已打印。您好,我认为当您强制关闭onPause方法时,将不会调用…确保是否调用它…是的,您在onPause()上是正确的在强制关闭时没有收到呼叫…这个问题有什么解决方案吗?你能用onDestroy方法尝试一下吗…尝试过但即使onDestroy也没有收到呼叫…我的应用程序有严重问题..!!尝试过,我也在其中添加了Log.d,但奇怪的是,即使这个函数在强制关闭时也没有收到呼叫…奇怪!!