Урок 33. Хранение данных. Preferences.
Урок 33. Хранение данных. Preferences.
Последний раз редактировалось damager82 01 май 2017, 16:38, всего редактировалось 5 раз.
Re: Урок 33. Хранение данных. Preferences.
Добрый день!
У меня есть две Activity.
Одна Рабочая, одна Настройки
Из Рабочей с помощью меню, захожу в Настройки.
Меняю, сохраняю, выхожу назад в Рабочую.
В моменты Рабочей onCreate, onStart(), onRestart()
Поставил Load()
Но настройки в этот момент еще не сохранились (Preferences старый - видимо еще не записался файл).
Как поступать? Писать задержку или есть какие то другие подходы?
У меня есть две Activity.
Одна Рабочая, одна Настройки
Из Рабочей с помощью меню, захожу в Настройки.
Меняю, сохраняю, выхожу назад в Рабочую.
В моменты Рабочей onCreate, onStart(), onRestart()
Поставил Load()
Но настройки в этот момент еще не сохранились (Preferences старый - видимо еще не записался файл).
Как поступать? Писать задержку или есть какие то другие подходы?
Re: Урок 33. Хранение данных. Preferences.
Там все пишется в том же процессе. Должен сначала записать, потом продолжить работу.zavbak писал(а): Но настройки в этот момент еще не сохранились (Preferences старый - видимо еще не записался файл).
Выложите здесь код сохранения и чтения. Может в них что не так?
Re: Урок 33. Хранение данных. Preferences.
Это не удачное решение, данные следует сохранять в onPause, так как onPause будет обязательно вызван в приложении, а onDestroy не всегда, таким образом можно попросту потерять данные.а метод saveText - в onDestroy
Because onPause() is the first of the three, once the activity is created, onPause() is the last method that's guaranteed to be called before the process can be killed—if the system must recover memory in an emergency, then onStop() and onDestroy() might not be called. Therefore, you should use onPause() to write crucial persistent data (such as user edits) to storage. However, you should be selective about what information must be retained during onPause(), because any blocking procedures in this method block the transition to the next activity and slow the user experience.
Methods that are marked "No" in the Killable column protect the process hosting the activity from being killed from the moment they are called. Thus, an activity is killable from the time onPause() returns to the time onResume() is called. It will not again be killable until onPause() is again called and returns.
http://developer.android.com/guide/topi ... ities.html
Re: Урок 33. Хранение данных. Preferences.
Да, имеет смысл в уроке уточнить, что я использую onDestroy только для примера.btx писал(а): Это не удачное решение, данные следует сохранять в onPause, так как onPause будет обязательно вызван в приложении, а onDestroy не всегда, таким образом можно попросту потерять данные.
Спасибо!
Re: Урок 33. Хранение данных. Preferences.
Спасибо большее
Re: Урок 33. Хранение данных. Preferences.
Подскажите пожалуйста. Можно ли как-то шифровать данные? Если я не хочу,чтобы кто-то мог зайти в папку и посмотретт,например логин и пароль,которые сохранились в файле.
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 33. Хранение данных. Preferences.
Для этого есть javax.crypto.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 33. Хранение данных. Preferences.
Как удалить данные из ключа?
Re: Урок 33. Хранение данных. Preferences.
Подробнизируйте вопрос. Не оч понятноromanzi писал(а):Как удалить данные из ключа?
Re: Урок 33. Хранение данных. Preferences.
final String SAVED_TEXT = "saved_text";
final в этой строке означает что переменная глобальна?
в чём разница между этой строкой и такой же но без final?
final в этой строке означает что переменная глобальна?
в чём разница между этой строкой и такой же но без final?
Re: Урок 33. Хранение данных. Preferences.
Это означает, что строка является константой и изменить её в процессе выполнения кода невозможно. В большинстве случаев её значение связывается (или даже подставляется) уже на этапе компиляции при формировании байт-кода виртуальной машины, т.е. осуществляет раннее связывание, что ускоряет работу с ней.daiz123 писал(а):final String SAVED_TEXT = "saved_text";
final в этой строке означает что переменная глобальна?
в чём разница между этой строкой и такой же но без final?
Re: Урок 33. Хранение данных. Preferences.
Код: Выделить всё
final String SAVED_TEXT = "saved_text";
лучше
Код: Выделить всё
static final String SAVED_TEXT = "saved_text";
Код: Выделить всё
static final boolean USE_DB = false;
if(USE_DB) {
// работа с базой данных
} else {
// работа без базой данных
}
Re: Урок 33. Хранение данных. Preferences.
Оказывается, можно сохранять Preference так:
(Mark L. Murphy, Beginning Android 2)
Пока не пробовал
Код: Выделить всё
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<CheckBoxPreference
android:key="checkbox"
android:title="Checkbox Preference"
android:summary="Check it on, check it off" />
<RingtonePreference
android:key="ringtone"
android:title="Ringtone Preference"
android:showDefault="true"
android:showSilent="true"
android:summary="Pick a tone, any tone" />
</PreferenceScreen>
Код: Выделить всё
public class EditPreferences extends PreferenceActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
}
Пока не пробовал
Re: Урок 33. Хранение данных. Preferences.
Доброго времени суток.
При отсутствии сохраненных Preferences, метод .getAll должен выбрасывать NullPointerException.
При оборачивании в try/catch
SharedPreferences sPref = getPreferences(MODE_PRIVATE);
try {
sPref.getAll();
} catch (NullPointerException e) {
Log.e("getAll", "Error");
}
приложение все равно падает. Подскажите в чем проблема.
При отсутствии сохраненных Preferences, метод .getAll должен выбрасывать NullPointerException.
При оборачивании в try/catch
SharedPreferences sPref = getPreferences(MODE_PRIVATE);
try {
sPref.getAll();
} catch (NullPointerException e) {
Log.e("getAll", "Error");
}
приложение все равно падает. Подскажите в чем проблема.
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 33. Хранение данных. Preferences.
Ошибка возникает в другом месте. Посмотрите в логах на какой строке это происходит.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 33. Хранение данных. Preferences.
Спасибо за оперативный ответ:)
Разобрался.
Разобрался.
Re: Урок 33. Хранение данных. Preferences.
вместо текста хочу сохранить значения массива (в массиве хранятся результаты), сохраняю вот так
а как теперь ее загрузить? что в дальнейшим работать с результатами, я делал вот так: убрал добавившиеся символы с помощью substring (это запятые и прямоугольные скобки), затем создал строковый массив туда положил отредактированную строку с помощью split, и все что я сделал пошло на коту под хвост, обратно добавились прямоугольники, запятые и я в тупике не знаю что делать (( может не правильно сохраняю массив? помогите, дайте совет.
Код: Выделить всё
ed.putString(Save_Array, Arrays.toString(mas));
Re: Урок 33. Хранение данных. Preferences.
3Gern лучше кинь код, а то какой то велосипед ты описал.
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 33. Хранение данных. Preferences.
ну код такой же как в примереrezak90 писал(а):3Gern лучше кинь код, а то какой то велосипед ты описал.
Код: Выделить всё
void saveArray(){
sPref = getPreferences(MODE_PRIVATE);
Editor ed = sPref.edit();
ed.putString(Save_Array, Arrays.toString(mas));
ed.commit();
}
void loadArray() {
sPref = getPreferences(MODE_PRIVATE);
String base = sPref.getString(Save_Array, "");
//дальше нужно содержимое Save_Array обратно вогнать в mas