общие предпочтения продолжают исчезать

Я использую общие настройки для хранения учетных данных для моего приложения. Все работает нормально, кроме одного пользователя. Через определенное время кажется, что общие настройки каким-то образом сброшены или очищены. Я настроил свое приложение для этого пользователя, чтобы он больше не сбрасывал общие настройки. Таким образом, я могу быть уверен, что мое приложение не виновато. Но даже после этой модификации его учетные данные очищаются, поэтому я подозреваю, что с его устройством происходит что-то еще.

Есть ли у кого-нибудь из вас предложения, как подойти к этой проблеме? Я думал о создании другого приложения, которое установит файловый обозреватель для отслеживания файла настроек. Таким образом, я надеюсь увидеть, когда файл будет очищен / удален. Может, есть приложения, которые уже умеют это делать? Я даже готов сделать файл настроек доступным для проверки другим приложениям. Есть ли какой-нибудь способ диагностировать эту проблему? Я уверен, что это не мое приложение выполняет очистку / сброс ...

Спасибо за любую помощь, которую вы можете оказать.


person Ivo    schedule 28.06.2011    source источник


Ответы (2)


У вас есть только один пользователь с этой проблемой? Сколько у вас пользователей? Хотя бы 100? Если так, то это скорее всего плохой аппарат. Не тратьте время на погоню за этим.

person Thomas Dignan    schedule 28.06.2011
comment
Что ж, один пользователь - мой начальник :-), и это приложение, вероятно, будет доступно тысячам пользователей. На данный момент я тестирую, и это одна проблема, которую я не смог решить, и я хотел бы знать, откуда она взялась. Пока что тестировал примерно на 6 устройствах. - person Ivo; 29.06.2011
comment
О, это весьма прискорбно. Установите любое приложение из маркета на свое устройство и сохраните настройки. Если они работают, проблема в вашем приложении. Полагаю, вы звоните в editor.commit ()? - person Thomas Dignan; 29.06.2011
comment
Он говорит, что другие приложения работают нормально :-( Я использую этот код: getSharedPreferences (SPrefs, 0) .edit () .putString (PREF_USR, mUsername.getText (). ToString ()) .putString (PREF_PWD, mPassword.getText ( ) .toString ()) .putBoolean (PREF_SAVED, true) .commit (); После этого я больше не вызываю очистку настроек, но они исчезают ... - person Ivo; 29.06.2011
comment
У вас там довольно длинная цепочка. Почему бы не сделать SharedPreferences.Editor editor = sharedPrefs.edit (), а затем сохранить каждый по отдельности. Я собираюсь предположить, что вы получаете NPE на одном из них, например, mUsername.getText () может выдать NPE, если mUsername было null. - person Thomas Dignan; 29.06.2011
comment
Думаю ты прав. Я буду «отключать» свой коммит и проверять наличие ошибок на каждом этапе. Надеюсь, это решит проблему. Однако, когда я его протестировал, учетные данные были сохранены и получены без проблем. Только через некоторое время они как-то очищаются. - person Ivo; 29.06.2011
comment
Когда вы пишете такой сложный код, вы просто спрашиваете об ошибках. Каждый телефон немного отличается. - person Thomas Dignan; 29.06.2011

Следует учесть несколько моментов. Во-первых, если вы можете, просто используйте базу данных, так как они гораздо более надежны. Во-вторых, не используйте объект SharedPreferences в разных процессах, что, вероятно, неприменимо в этой ситуации. В-третьих, при чтении SharedPreferences вы должны соблюдать те же меры предосторожности при их записи. Используйте один объект SharedPreference и один объект Editor. Передайте объект SharedPreferences своим методам и классу, вам не нужно повторно использовать редактор. Раньше у меня был пользователь день, жаловавшийся на удаление SharedPreferences, но как только я реализовал некоторые из этих логических шагов, мои пользователи перестали меня раздражать. Не забывайте, как вы и сказали, это редко. 1 из 1500 пользователей - это ничтожный процент, но даже один пользователь может оставить плохой комментарий :-)

person Noah Seidman    schedule 22.11.2011