android studio錯(cuò)誤: 常量字符串過(guò)長(zhǎng)的解決方式
android studio 錯(cuò)誤: 常量字符串過(guò)長(zhǎng)錯(cuò)誤
省市區(qū)三級(jí)聯(lián)動(dòng),位置字符串。
這樣不行
改用json方案 ,讀取array中文件
String provsData = new GetJsonDataUtil().getJson(activity, "provsData.json");//獲取assets目錄下的json文件數(shù)據(jù) String distsData = new GetJsonDataUtil().getJson(activity, "distsData.json");//獲取assets目錄下的json文件數(shù)據(jù) String citysData = new GetJsonDataUtil().getJson(activity, "citysData.json");//獲取assets目錄下的json文件數(shù)據(jù)
public class GetJsonDataUtil { public String getJson(Context context, String fileName) { StringBuilder stringBuilder = new StringBuilder(); try { AssetManager assetManager = context.getAssets(); BufferedReader bf = new BufferedReader(new InputStreamReader( assetManager.open(fileName))); String line; while ((line = bf.readLine()) != null) { stringBuilder.append(line); } } catch (IOException e) { e.printStackTrace(); } return stringBuilder.toString(); } }
補(bǔ)充知識(shí):關(guān)于Java的String字符串常量的長(zhǎng)度問(wèn)題
雖然這種問(wèn)題應(yīng)該很難遇到,但是遇到了也會(huì)感到莫名其妙。不知道大家有沒(méi)有遇到那種在java代碼里用字符串寫sql語(yǔ)句的情況,但是如果sql語(yǔ)句字符串的長(zhǎng)度太長(zhǎng)的話就會(huì)報(bào)錯(cuò)。
代碼如下:
代碼A
String str = "567890123456789...0123456789";//由于字符串長(zhǎng)度太長(zhǎng),所以省略一部分,長(zhǎng)度是65535
System.out.println(str.length()); //編譯報(bào)錯(cuò):Error:(14, 22) java: 常量字符串過(guò)長(zhǎng)
代碼B
String str = "67890123456789...0123456789";//由于字符串長(zhǎng)度太長(zhǎng),所以省略一部分,長(zhǎng)度是65534
System.out.println(str.length()); //編譯通過(guò),運(yùn)行結(jié)果為:65534
代碼C
String str = "67890123456789...0123456789";//由于字符串長(zhǎng)度太長(zhǎng),所以省略一部分,長(zhǎng)度是65534 str = "5" + str; System.out.println(str.length()); //編譯通過(guò),運(yùn)行結(jié)果為:65535
String內(nèi)部是以char數(shù)組的形式存儲(chǔ),數(shù)組的長(zhǎng)度是int類型,那么String允許的最大長(zhǎng)度就是Integer.MAX_VALUE = 2^31 - 1 = 2147483647。又由于java中的字符是以16位存儲(chǔ)的,因此大概需要4GB的內(nèi)存才能存儲(chǔ)最大長(zhǎng)度的字符串。
不過(guò)這僅僅是對(duì)字符串變量而言,如果是字符串常量,如“abc”、”1234”之類寫在代碼中的字符串str,那么允許的最大長(zhǎng)度取決于字符串在常量池中的存儲(chǔ)大小,也就是字符串在class格式文件中的存儲(chǔ)格式:
CONSTANT_Utf8_info { u1 tag; u2 length; u1 bytes[length]; }
u2是無(wú)符號(hào)的16位整數(shù),因此理論上允許的string str的最大長(zhǎng)度是2^16-1=65535。然而實(shí)際測(cè)試表明,允許的最大長(zhǎng)度僅為65534,超過(guò)就編譯錯(cuò)誤。
以上這篇android studio錯(cuò)誤: 常量字符串過(guò)長(zhǎng)的解決方式就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Android UI設(shè)計(jì)系列之自定義SwitchButton開(kāi)關(guān)實(shí)現(xiàn)類似IOS中UISwitch的動(dòng)畫效果(2
這篇文章主要介紹了Android UI設(shè)計(jì)系列之自定義SwitchButton開(kāi)關(guān)實(shí)現(xiàn)類似IOS中UISwitch的動(dòng)畫效果,具有一定的實(shí)用性和參考價(jià)值,感興趣的小伙伴們可以參考一下2016-06-06Android 使用jarsigner給apk簽名的方法詳細(xì)介紹
這篇文章主要介紹了Android 使用jarsigner給apk簽名的方法詳細(xì)介紹的相關(guān)資料,APP 完成需要在一些APP 商店進(jìn)行上傳審核,供用戶下載使用,APP 需要簽名認(rèn)證,需要的朋友可以參考下2016-12-12Android入門之Style與Theme用法實(shí)例解析
這篇文章主要介紹了Android入門之Style與Theme用法,非常實(shí)用的功能,需要的朋友可以參考下2014-08-08Android 上下滾動(dòng)TextSwitcher實(shí)例詳解
這篇文章主要介紹了Android 上下滾動(dòng)TextSwitcher實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-06-06Android基于service實(shí)現(xiàn)音樂(lè)的后臺(tái)播放功能示例
這篇文章主要介紹了Android基于service實(shí)現(xiàn)音樂(lè)的后臺(tái)播放功能,結(jié)合實(shí)例形式分析了Android基于Service組件實(shí)現(xiàn)多媒體音頻播放功能的步驟與相關(guān)操作技巧,需要的朋友可以參考下2016-10-10Android RecyclerView緩存復(fù)用原理解析
RecyclerView是Android一個(gè)更強(qiáng)大的控件,其不僅可以實(shí)現(xiàn)和ListView同樣的效果,還有優(yōu)化了ListView中的各種不足。其可以實(shí)現(xiàn)數(shù)據(jù)縱向滾動(dòng),也可以實(shí)現(xiàn)橫向滾動(dòng)(ListView做不到橫向滾動(dòng))。接下來(lái)講解RecyclerView的用法2022-11-11Android實(shí)現(xiàn)View拖拽跟隨手指移動(dòng)效果
這篇文章主要介紹了Android實(shí)現(xiàn)View拖拽跟隨手指移動(dòng)效果,主要使用setTranslationX() 和setTranslationY() 屬性方法實(shí)現(xiàn)的,需要的朋友參考下吧2017-08-08Java語(yǔ)言讀取配置文件config.properties的方法講解
今天小編就為大家分享一篇關(guān)于Java語(yǔ)言讀取配置文件config.properties的方法講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03官網(wǎng)項(xiàng)目Jetpack?Startup庫(kù)學(xué)習(xí)
這篇文章主要為大家介紹了官網(wǎng)項(xiàng)目Jetpack?Startup庫(kù)學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02