Урок 33. Хранение данных. Preferences.

Обсуждение уроков
Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 33. Хранение данных. Preferences.

Сообщение Foenix » 16 окт 2013, 12:26

так есть рут или нет?
дело в том, Что рут удобно иметь при отладке - видно все! можно базу данных сразу посмотреть, если исползьуется и так далее. Ну и из этого понимаешь, чем опасен рут на устройствах? любой (любая программа) может просмотреть и изменить любые данные в любых папках..
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Isaev
Сообщения: 145
Зарегистрирован: 03 сен 2013, 09:39
Откуда: Германия
Контактная информация:

Re: Урок 33. Хранение данных. Preferences.

Сообщение Isaev » 16 окт 2013, 14:20

как это проще проверить? В настройках не нашёл ничего похожего
в интернете нашёл такой вариант, не сказал бы, что удобный, т.к. требует установки дополнительного приложения

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 33. Хранение данных. Preferences.

Сообщение Foenix » 16 окт 2013, 15:16

ну лучше тогда попробовать загрузить программу ADB wifi Их там несколько разных, требует рут. От нее хоть польза будет, если установится - можно отлаживать приложения по вайфаю без проводов.
А вообще, просто посмотреть в эксплорере папки других приложений (data\data\приложение\database), если в них раскрываются все файлы, включая базы данных, то рут определенно имеется.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Al.x
Сообщения: 14
Зарегистрирован: 20 ноя 2012, 23:36

Re: Урок 33. Хранение данных. Preferences.

Сообщение Al.x » 18 окт 2013, 15:34

Вопрос: как использовать этого зверя в пользовательском классе? Наследовать класс от активити не особо хочется, ближайшее что есть по иеррархии от Objecta и с чем он соглашается дружить это ContextWrapper, ему нужен получается контекст? но тогда что передавать конструктору - контекст приложения? как-то велосипедно...

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 33. Хранение данных. Preferences.

Сообщение KamiSempai » 18 окт 2013, 16:17

Al.x писал(а):Вопрос: как использовать этого зверя в пользовательском классе?
Нужно передавать контекст в конструктор пользовательского класса.
Al.x писал(а):Наследовать класс от активити не особо хочется...
И не получится (работать не будет).
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Al.x
Сообщения: 14
Зарегистрирован: 20 ноя 2012, 23:36

Re: Урок 33. Хранение данных. Preferences.

Сообщение Al.x » 18 окт 2013, 16:19

от кого лучше наследовать? как я и написал?

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 33. Хранение данных. Preferences.

Сообщение KamiSempai » 18 окт 2013, 16:27

Созданием объектов, наследников ContextWrapper, должна заниматься система.
Передавайте контекст в пользовательский класс через конструктор - это самое правильное решение.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Al.x
Сообщения: 14
Зарегистрирован: 20 ноя 2012, 23:36

Re: Урок 33. Хранение данных. Preferences.

Сообщение Al.x » 18 окт 2013, 21:53

дело в том, что getSharedPreferences наотрез отказывается работать, если класс не унаследован от контекстосодержащего базового класса: "The method getSharedPreferences(String, int) is undefined for the type MyClass" Object ему не катит, только
ContextWrapper.
поэтому если не от ContextWrapper, то вопрос остается - от кого лучше наследовать?
нужен класс, инкапсулирующий объект SharedPreferenses и всякие издевательства над ним: загрузить/сохранить и пр.
класс примерно такой:

Код: Выделить всё

public class CookiesStorage extends ContextWrapper {

	private SharedPreferences CookiesFileStorage;
	private BasicCookieStore cookieStore = new BasicCookieStore();
	SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

	public CookiesStorage(Context context, BasicCookieStore DefaultCookieStore) {
		super(context);
		cookieStore = DefaultCookieStore;
		CookiesFileStorage = getSharedPreferences("CCStrg", Activity.MODE_PRIVATE);
	}
	private void SaveCookieEntity(String ccField, String ccData) {
		Editor ed = CookiesFileStorage.edit();
		ed.putString(ccField, ccData);
		ed.commit();
...
	}
п.с. почему кстати так категорично про ContextWrapper, у меня с ним работает...пока, может есть подводные камни - расскажите, интересно ведь.
п.п.с. кстати, rezak90, где-то в этом топике грозился показать свою реализацию, интересно будет взглянуть

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 33. Хранение данных. Preferences.

Сообщение Foenix » 18 окт 2013, 22:31

та не сочиняйте, я из потока выводила в преференсы, читала оттуда и ничего.. просто нужно передать контекст и все.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Al.x
Сообщения: 14
Зарегистрирован: 20 ноя 2012, 23:36

Re: Урок 33. Хранение данных. Preferences.

Сообщение Al.x » 18 окт 2013, 23:25

при чем здесь поток? речь о создании класса-обертки.
я не сочиняю, это ребята сочиняли когда ООП придумывали, а мы теперь расхлебываем:)

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 33. Хранение данных. Preferences.

Сообщение Foenix » 19 окт 2013, 06:30

Al.x писал(а):при чем здесь поток?
Al.x писал(а):дело в том, что getSharedPreferences наотрез отказывается работать, если класс не унаследован от контекстосодержащего базового класса
Потому что поток - это пример класса, который
не унаследован от контекстосодержащего базового класса
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 33. Хранение данных. Preferences.

Сообщение KamiSempai » 20 окт 2013, 01:14

Al.x писал(а):дело в том, что getSharedPreferences наотрез отказывается работать, если класс не унаследован от контекстосодержащего базового класса
Да ладно? Могу даже сказать почему, по тому, что getSharedPreferences - это метод класса Context.

Так, должно работать:

Код: Выделить всё

public class CookiesStorage {

	private SharedPreferences mCookiesFileStorage;
	private BasicCookieStore mCookieStore = new BasicCookieStore();
	SimpleDateFormat mDateFormat = new SimpleDateFormat("yyyy-MM-dd");

	public CookiesStorage(Context context, BasicCookieStore defaultCookieStore) {
		mCookieStore = DefaultCookieStore;
		mCookiesFileStorage = context.getSharedPreferences("CCStrg", Context.MODE_PRIVATE);
	}
	private void SaveCookieEntity(String ccField, String ccData) {
		Editor ed = mCookiesFileStorage.edit();
		ed.putString(ccField, ccData);
		ed.commit();
...
	}
В общем то и предыдущий способ рабочий... Но не самый лучший, если не самый худший.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Al.x
Сообщения: 14
Зарегистрирован: 20 ноя 2012, 23:36

Re: Урок 33. Хранение данных. Preferences.

Сообщение Al.x » 20 окт 2013, 19:56

KamiSempai писал(а):Да ладно? Могу даже сказать почему, по тому, что getSharedPreferences - это метод класса Context.
я не обратил на это внимание, просто тупо подставлял классы по иерархии, начиная с Object, пока анализатор не перестал ругаться - не хотелось наследовать от "тяжелого" класса.

в общем, если я вас обоих правильно понял - лучше наследовать от потока и/или его потомков, например, AsyncTask.
Последний раз редактировалось Al.x 20 окт 2013, 19:59, всего редактировалось 1 раз.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 33. Хранение данных. Preferences.

Сообщение Foenix » 20 окт 2013, 19:59

да нет же! лучше в конструктор передать контекст из активити, или контекст приложения, и использовать любые методы контекста откуда угодно.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Al.x
Сообщения: 14
Зарегистрирован: 20 ноя 2012, 23:36

Re: Урок 33. Хранение данных. Preferences.

Сообщение Al.x » 20 окт 2013, 20:02

конструктор моего класса, верно?
я просто не могу добиться от вас ответа на вопрос - какой БАЗОВЫЙ класс брать:
public class MyClass extends ???

p.s. про передачу контекста - безусловно, вы правы, посмотрите мой код выше. напишите свое объявление класса и все станет ясно.

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 33. Хранение данных. Preferences.

Сообщение KamiSempai » 20 окт 2013, 20:13

Al.x писал(а):я просто не могу добиться от вас ответа на вопрос - какой БАЗОВЫЙ класс брать:
public class MyClass extends ???
В моем примере это класс Object :roll:
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 33. Хранение данных. Preferences.

Сообщение Foenix » 20 окт 2013, 20:21

о, тебе же Денис полный код класса дал уже, ничего он не extends, или extends что угодно (вернее, что необходимо).
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Al.x
Сообщения: 14
Зарегистрирован: 20 ноя 2012, 23:36

Re: Урок 33. Хранение данных. Preferences.

Сообщение Al.x » 20 окт 2013, 20:21

сори, не заметил, думал меня процитировал...
вопрос закрыт, всем спасибо.
кстати, посмотрел ваш сайт, заинтересовало...

ThousandDevils
Сообщения: 14
Зарегистрирован: 19 ноя 2013, 03:48

Re: Урок 33. Хранение данных. Preferences.

Сообщение ThousandDevils » 01 дек 2013, 14:20

Я уже просто не знаю что делать!!!!
По непонятной мне причине не сохраняется(или не загружается) строка.
Я её вроде бы записываю в преференс, но обратно она не читается - берется дефолтное значение.
При чем только одна строка(я её отметил коментами), остальные работают правильно.
Помогите кто может, вот код:
@Override
protected void onResume() {
sPref = getPreferences(MODE_PRIVATE);
tvNumText = sPref.getString(TVNUMS_SAVED_TEXT, "");
opText = sPref.getString(TVOPERATIONS_SAVED_TEXT, "");
flag = sPref.getInt(FLAG_SAVED_VALUE, 0);
eqFlag = sPref.getBoolean(EQFLAG_SAVED_VALUE, false);
bufOperStr = sPref.getString(BUF_OPERATIONS, ""); // ВОТ ТУТ НЕ ЧИТАЕТСЯ
Log.d("myLogs", "onResume: " + bufOperStr);
setText();
super.onResume();
}

@Override
protected void onPause() {
for (int i = 0; i < bufOperations.size(); i++) {
bufOperStr += bufOperations.get(i);
}
sPref = getPreferences(MODE_PRIVATE);
Editor ed = sPref.edit();
ed.putString(TVNUMS_SAVED_TEXT, tvNums.getText().toString());
ed.putString(TVOPERATIONS_SAVED_TEXT, tvOperations.getText().toString());
ed.putString(BUF_OPERATIONS, bufOperStr); //ИЛИ ТУТ НЕ ЗАПИСЫВАЕТ
ed.putInt(FLAG_SAVED_VALUE, flag);
Log.d("myLogs", "onPause: " + bufOperStr);
ed.commit();
super.onPause();
}

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 33. Хранение данных. Preferences.

Сообщение Foenix » 01 дек 2013, 14:33

во-первых, форматируй код, уважай других
во-вторых, просто скачай с планшета данный файл и посмотри, все ли в нем в порядке.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Ответить