Сохранение и восстановление состояния в Android

1

Я просмотрел этот и несколько других сайтов для ответа, но я не смог его найти. Я пытаюсь сохранить логическое и int с использованием onSaveInstanceState и onRestoreInstanceState, но я не могу заставить его работать. Это не сбой или что-то еще, но он либо не сохраняет его, либо не восстанавливает, либо я глуп и понятия не имею, что я делаю.


Вот что я имею для своей деятельности, мне нужно, чтобы она была в моем onCreate где-то или что-то в этом роде?

public class CannonBlast extends Activity {
/** Called when the activity is first created. */
private panel panelStuffz;

@Override
public void onCreate(Bundle savedInstanceState) {
    final Window win = getWindow();
    super.onCreate(savedInstanceState);
    panelStuffz = new panel(this);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    win.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    setContentView(panelStuffz);
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState){
    savedInstanceState.putInt("HighLevel", panelStuffz.getLevel());
    savedInstanceState.putBoolean("soundstate", panelStuffz.getSound());
    super.onSaveInstanceState(savedInstanceState);
}

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    panelStuffz.setHighLevel(savedInstanceState.getInt("HighLevel"));
    panelStuffz.setSound(savedInstanceState.getBoolean("soundstate"));
}

@Override
public void onResume(){
    super.onResume();
}

@Override
public void onPause(){
    super.onPause();
    panelStuffz.setThread(null);

}

@Override
public void onStop(){

}

Я попытался положить материал в onStop, но он сработает, поэтому его пустой, в случае, если это важно, спасибо заранее

Теги:

2 ответа

2

Многие приложения могут предоставить способ захвата пользовательских настроек в настройках конкретного приложения или активности. Для поддержки этого Android предлагает простой набор API.

Предпочтения - это, как правило, пары значений имени. Они могут храниться как "Общие предпочтения" в различных действиях в приложении (обратите внимание, что в настоящее время они не могут быть разделены между процессами). Или это может быть что-то, что необходимо сохранить для конкретной деятельности.

  • Общие предпочтения: общие настройки могут использоваться всеми компонентами (действия, службы и т.д.) для приложений.

  • Действия, обработанные обработкой: эти настройки могут использоваться только в действии и не могут использоваться другими компонентами приложения.

Общие настройки:

Общие настройки управляются с помощью метода getSharedPreferences класса Context. Настройки сохраняются в файле по умолчанию (1) или вы можете указать имя файла (2), которое будет использоваться для ссылки на настройки.

(1) Вот как вы получаете экземпляр при указании имени файла

public static final String PREF_FILE_NAME = "PrefFile";
   SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);

MODE_PRIVATE - это режим работы для предпочтений. Это режим по умолчанию и означает, что к созданному файлу будет обращаться только вызывающее приложение. Поддерживаются два других режима: MODE_WORLD_READABLE и MODE_WORLD_WRITEABLE. В MODE_WORLD_READABLE другое приложение может читать созданный файл, но не может его изменить. В случае MODE_WORLD_WRITEABLE у других приложений также есть права на запись для созданного файла.

(2) Рекомендуемый способ должен использоваться по умолчанию, без указания имени файла

SharedPreferences preferences = PreferencesManager.getDefaultSharedPreferences(context);

Наконец, как только у вас есть экземпляр предпочтений, вот как вы можете извлечь сохраненные значения из настроек:

 int storedPreference = preferences.getInt("storedInt", 0);

В сохранить значения в файле предпочтения SharedPreference.Editor должен использоваться объект. Editor - это вложенный интерфейс класса SharedPreference.

SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

Редактор также поддерживает такие методы, как remove() и clear(), чтобы удалить значение предпочтения из файла.

Настройки активности:

Общие настройки могут использоваться другими компонентами приложения. Но если вам не нужно делиться предпочтениями с другими компонентами и вы хотите, чтобы у вас были личные предпочтения. Вы можете сделать это с помощью метода getPreferences() активности. Метод getPreference использует метод getSharedPreferences() с именем класса активности для имени файла предпочтения.

Ниже приведен код для получения предпочтений

SharedPreferences preferences = getPreferences(MODE_PRIVATE);
int storedPreference = preferences.getInt("storedInt", 0);

Код для хранения значений также тот же, что и в случае общих настроек.

SharedPreferences preferences = getPreference(MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

Вы также можете использовать другие методы, такие как сохранение состояния активности в базе данных. Примечание. Android также содержит пакет под названием android.preference. Пакет определяет классы для реализации пользовательского интерфейса приложений.

Чтобы увидеть еще несколько примеров, зарегистрируйтесь на сайте разработчиков Хранилище данных.

0

Этот метод предназначен только для сохранения состояния, связанного с текущим экземпляром Activity. Вы переходите к другому действию и пытаетесь получить значения снова, когда вернетесь к этому действию? Я предположил, что:: "Я попытался положить материал в onStop, но он сработает".

рекомендация, НЕ БЕЗОПАСНО использовать onSaveInstanceState() и onRestoreInstanceState(), в соответствии с http://developer.android.com/reference/android/app/Activity.html

рассмотрите возможность использования Sharedpreferences или базы данных SQLite.

Пример SharedPreferences (из веб-мира):

 /**
   * get if this is the first run
   *
   * @return returns true, if this is the first run
   */
      public boolean getFirstRun() {
      return mPrefs.getBoolean("firstRun", true);
   }

   /**
   * store the first run
   */

   public void setRunned() {
      SharedPreferences.Editor edit = mPrefs.edit();
      edit.putBoolean("firstRun", false);
      edit.commit();
   }

   SharedPreferences mPrefs;

   /**
   * setting up preferences storage
   */
   public void firstRunPreferences() {
      Context mContext = this.getApplicationContext();
      mPrefs = mContext.getSharedPreferences("myAppPrefs", 0); //0 = mode private. only this app can read these preferences
   }
  • 0
    о0о, я думал на Save WAS Sharepreferences: / спасибо, разберёмся с этим
  • 0
    сохраните эти значения в SharedPreferences, и вы восстановите эти значения для любой активности вашего приложения =)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню