Android - sharedPreference не работает как надо? - PullRequest
0 голосов
/ 02 мая 2011

У меня есть 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 ]

1 голос
/ 02 мая 2011

Попробуйте с getSharedPreferences вместо getPreferences

Редактировать: Я прочитал строки logcat, которые вы разместили в комментарии. Android посылает вашему приложению сигнал SIGKILL, когда вы закрываете его, поэтому я думаю, что вы ничего не можете сделать. Прочитай это. http://en.wikipedia.org/wiki/SIGKILL

0 голосов
/ 02 мая 2011

Принудительное закрытие закрывает ваше приложение мгновенно, без вызова какого-либо другого кода.Это не странно, вот как все работает.

Звучит так, как будто вы вошли в систему, что onPause () вызывается при нажатии Back.Вы также должны проверить, что onPause () вызывается при переходе в другое действие или приложение.Например, нажмите и удерживайте кнопку «Домой» и выберите другое приложение. Вы должны увидеть журнал onPause ().

Этого должно быть достаточно для ваших целей.Как вы думаете, почему вам нужно вызывать onPause () после принудительного закрытия (что невозможно)?

0 голосов
/ 02 мая 2011

попробуйте это ..

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