1. 程式人生 > >java.lang.String cannot be cast to java.lang.Long at android.app.SharedPreferencesImpl.getLong(Share

java.lang.String cannot be cast to java.lang.Long at android.app.SharedPreferencesImpl.getLong(Share

今天在開發過程中遇到一個問題:從Git上拉下程式碼後,點選登入程式就崩潰了,而且是必現。貼下列印的Log

打碼的地方是公司程式碼中的包名,不影響顯示問題。

可以看到最關鍵的兩句:

java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Long                       at android.app.SharedPreferencesImpl.getLong(SharedPreferencesImpl.java:247)

解釋就是在呼叫SharedPreferencesImpl的getLong方法時,發生了型別錯誤,不能將String型別轉成Long型別。其原型定義為:

getLong(String,long)

程式碼中的引數也對,讓我查了許久。後來百度並查找了下來源,最後問題得以解決。

首先,SharedPreferences是一種類似共享記憶體的方式,getLong是在取資料,那麼它的源頭就是先存資料了。這是順理成章的過程。

然後,再理解getLong的兩個引數。第一個引數為String型別,其代表Key;第二個引數為Long型別,其代表getLong的預設返回值。

最後,問題的關鍵找到了。問題出在Key上。

程式碼中的Key值拷貝錯了。應該選VALUES_KEY_REGION_CODE_TIME;而當前的Key值是VALUES_KEY_REGION_CODE;這與上面的存String型別的Key一樣,所以當呼叫getLong方法是,根據其Key值取到的資料型別為String。固而報String cannot be case to long.

解決方案為:把Key改過來及可。

重點:參考文獻如下(感謝作者)