Код настроек на самом деле выглядит хорошо.Поэтому я подозреваю, что проблема на самом деле кроется в другом месте.
Вы действительно пытались записать результат prefs.getString("url", "")
или prefs.getString("name", "")
на консоль, чтобы проверить, можно ли что-нибудь получить?
Ваша проблемаможет даже быть от "выше" в вашем коде ... вы действительно убедились, что bundle.getString("id")
и bundle.getString("name")
возвращают ожидаемые вами данные?
При этом есть несколько вещей, которые выможет улучшить читаемость и стабильность кода SharedPreferences.
Объявите настройки как поле класса.
public class YourActivity extends Activity {
private SharedPreferences userPreferences;
@Override
public void onCreate (Bundle savedInstanceState) {
userPreferences = getSharedPreferences("USER_DATA", Context.MODE_PRIVATE);
// ...
}
// ...
}
Вам не нужно хранить ссылку на экземпляр SharedPreferences.Editor
, потому что все операции put возвращают одну.Таким образом, вы можете объединить вызовы:
userPreferences.edit()
.putString("name", name)
.putString("url", image_url)
.commit();
Если вы не можете заставить его работать так, как это, вы можете проверить возвращенное логическое значение приведенного выше вызова.SharedPreferences.Editor::commit
на самом деле вернет логическое значение, которое означает, была ли запись успешной (true
) или неудачной (false
).
В общем, я бы посоветовал использовать apply()
вместо commit()
, потому чтоэто не блокирует.Т.е. изменения будут записаны в память, а затем записаны на диск, запланированный ОС.В настоящий момент фиксация блокирует ваш поток пользовательского интерфейса, что может вызвать проблемы с производительностью.