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)

Другие вопросы по тегам