SharedPreferences - java.lang.Boolean нельзя привести к java.lang.String.
Меня смущает исключение, которое выдается за то, что не следует. Ошибка заключается в следующем:
java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.String
Но мой код не пытается привести Boolean к String Ô_o Возможно ли, что компилятор неверно указал, откуда исходит исключение? Я использую Huawei
Эта часть вызывает исключение:
if(SharedPreferencesManager.getUserMRZ(ScanEUID.this).equals("0")
&& SharedPreferencesManager.getUserDocumentIdFront(ScanEUID.this) != null
&& SharedPreferencesManager.getUserDocumentIdBack(ScanEUID.this) != null)
{
Связанные методы следующие
public static String getUserMRZ(Context context){
return getSharedPreferences(context).getString(Constants.USER_HAS_MRZ, "0");
}
public static String getUserDocumentIdFront(Context context) {
return getSharedPreferences(context).getString(Constants.USER_DOCUMENT_ID_FRONT, null);
}
public static String getUserDocumentIdBack(Context context) {
return getSharedPreferences(context).getString(Constants.USER_DOCUMENT_ID_BACK, null);
}
Метод setMRZ
public static void setUserMRZ(Context context, String has_mrz){
final SharedPreferences.Editor editor = getSharedPreferences(context).edit();
editor.putString(Constants.USER_HAS_MRZ, has_mrz);
editor.apply();
}
5 ответов
Проверьте ваши сеттеры, у меня просто была та же проблема, и я обнаружил, что я ошибочно сделал плохую копию / макароны и использовал ключ для этого значения в сеттере для логического значения...
В моем случае я неправильно использовал один и тот же общий ключ предпочтений для разных действий, для putString и putBoolean. Хотя проблема возникает. Я использовал активность как:
И еще одно действие, которое я использовал:
Итак, вы видите, что для одного и того же ключевого слова для логического значения и строки в общих настройках, когда я хочу получить логическое значение в MainActivity, поэтому для этой строки возникает исключение приведения:
boolean isTafseerOn = settings.getBoolean("fezilalilquran", true);
Итак, заменив строчку в настройках Activity, с:
editor.putString("fezilalilquran", "on");
к :
editor.putBoolean("fezilalilquran", true);
решил мою проблему:
Удачного кодирования ...... .
У меня была эта ошибка, и я обнаружил, что дважды использовал один и тот же ключ (ошибка копирования/вставки).
private const val PREF_IS_IMPERIAL ="imperial"
private const val PREF_LAST_CITY_SEARCH ="imperial" //oops
В моем случае я просто окружаю методы get с помощью Try Catch, и это работает!
Посмотри документацию
https://developer.android.com/reference/android/content/SharedPreferences.html, java.lang.String)
Если ваше значение Constants.USER_HAS_MRZ является логическим, вам следует использовать getBoolean
метод
https://developer.android.com/reference/android/content/SharedPreferences.html, boolean)