Android - sharedPreference不能正常工作吗?

时间:2011-05-02 11:14:05

标签: android arraylist sharedpreferences

我的活动中有一个字符串ArrayList,我希望将它作为onPause存储在SharedPreference中,并在我的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();
}

问题是当我使用后退键退出我的应用程序然后如果我再次重新启动它,我可以看到共享首选项但是当我强制关闭我的应用程序然后它消失了。这是什么问题?

请帮助!!

由于

3 个答案:

答案 0 :(得分:1)

尝试使用getSharedPreferences代替getPreferences

编辑:我已阅读您在评论中发布的logcat行。当你强行关闭时,Android会向你的应用发送一个SIGKILL信号,所以我觉得你什么也做不了。读这个。 http://en.wikipedia.org/wiki/SIGKILL

答案 1 :(得分:0)

尝试这个..

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();

答案 2 :(得分:0)

强制关闭会立即终止您的应用,而不会调用任何其他代码。这并不奇怪,这就是事情的运作方式。

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

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