Android: ошибки SharedPreference после принудительного закрытия - PullRequest
0 голосов
/ 21 сентября 2011

Я получаю некоторые странные эффекты после принудительного закрытия приложения. Когда приложение закрывается с помощью finish (), все в порядке. У меня есть некоторые переменные, сохраненные в sharedPreferences, поэтому, когда приложение загружается снова, оно может восстановить эти переменные в пользовательском интерфейсе. Тем не менее, если я принудительно закрою приложение, а затем попытаюсь продолжить с того места, где оно было остановлено, некоторые переменные начнут «вести себя забавно». Под этим я подразумеваю (в onCreate), что я проверяю, равна ли строка, загруженная из sharedPreferences, значению (сжатая версия):

String namec;
private static final String TAG = "MyActivity";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //namec was set as "forest" in a previous activity
    //which is bypassed if the user selects continue
    //from the main menu
    SharedPreferences pathtaken = getSharedPreferences("pathtakenpref", MODE_WORLD_READABLE);
    namec = pathtaken.getString("namec", "Unknown");

    ImageView v1 = (ImageView) findViewById(R.id.pathpic1);
    RelativeLayout v2 = (RelativeLayout) findViewById(R.id.pathmain);

    Log.i(TAG, "namec= " + namec);
    if(namec == "forest"){
        v1.setImageResource(R.drawable.forest);
        v2.setBackgroundResource(R.drawable.forestrepeat);
    }

}

То, что происходит здесь, это namec, фактически, равнозначно «лесу». Я отправляю значение в журнал, и оно показывает переменную в точности так, как и должно быть («лес»). Тем не менее, он не будет запускать код внутри if {}. Это дает мне кошмары. Я застрял на этой неделе!

В том же коде я загружаю другой набор sharedPreferences (помеченный как TRHprefs), и каждая из них (6 целых и 3 строки) загружается и отображается просто отлично. Я даже добавил if {} для проверки 1 строки и 1 целого числа из TRHprefs ... они оба вернулись.

В.1: Есть ли что-то, что может привести к тому, что мои sharedPreferences xml каким-то образом повредятся при закрытии принудительно?

В.2: Есть ли способ просмотреть файл XML до и после применения принудительного закрытия, чтобы помочь отладить ситуацию. Спасибо!

Ответы [ 2 ]

1 голос
/ 21 сентября 2011

Если вы хотите сравнить две строки, вам нужно использовать это:

if(namec.equals("forest")){
        v1.setImageResource(R.drawable.forest);
        v2.setBackgroundResource(R.drawable.forestrepeat);
    }
1 голос
/ 21 сентября 2011

Это строка. Попробуйте это:

if("forest".equals(namec)){
...