2017-05-10 62 views
0

我很困惑,拋出一個不應該的東西。 錯誤是:SharedPreferences - java.lang.Boolean不能轉換爲java.lang.String

java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.String 

但是,我的代碼不會嘗試投布爾爲String O_O 是否有可能,編譯器是錯誤的指示,其中異常從哪裏來?我使用的是華爲

這部分觸發異常:

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(); 
} 
+0

如果曾經有一個字符串機智h鍵(USER_HAS_MRZ),即使意外,它仍會保留在那裏,直到您清除應用程序的數據或重新安裝。嘗試重新安裝它,看看它是否仍然存在。 – Denny

+2

檢查您首先創建USER_HAS_MRZ首選項的位置。您可能正在通知一個布爾值。 – Jonas452

+0

卸載它,不幸的是同樣的錯誤。太奇怪了。 – Isabelle

回答

-1

廁所處的K文件

https://developer.android.com/reference/android/content/SharedPreferences.html#getString(java.lang.String,java.lang.String中)

如果Constants.USER_HAS_MRZ的值是布爾型,你應該使用getBoolean方法

https://developer.android.com/reference/android/content/SharedPreferences.html#getBoolean(java.lang.String,布爾)

+2

我確定OP知道使用哪種方法,它被描述爲只有字符串存儲在'setUserMRZ()'方法中 – Denny

+0

@Isabelle你確定在'SharedPreferencesManager.getUserMRZ(ScanEUID.this ).equals(「0」)'行? –

+0

如果我指的是編譯器提到的,是的。 – Isabelle

1

檢查您的制定者,我剛剛有同樣的問題,我發現我錯誤地做了一個錯誤的複製/麪食,並用一個布爾值的setter中的值爲Key ...

相關問題