android studio錯誤: 常量字符串過長的解決方式
android studio 錯誤: 常量字符串過長錯誤
省市區(qū)三級聯(lián)動,位置字符串。
這樣不行

改用json方案 ,讀取array中文件
String provsData = new GetJsonDataUtil().getJson(activity, "provsData.json");//獲取assets目錄下的json文件數據 String distsData = new GetJsonDataUtil().getJson(activity, "distsData.json");//獲取assets目錄下的json文件數據 String citysData = new GetJsonDataUtil().getJson(activity, "citysData.json");//獲取assets目錄下的json文件數據
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();
}
}
補充知識:關于Java的String字符串常量的長度問題
雖然這種問題應該很難遇到,但是遇到了也會感到莫名其妙。不知道大家有沒有遇到那種在java代碼里用字符串寫sql語句的情況,但是如果sql語句字符串的長度太長的話就會報錯。
代碼如下:
代碼A
String str = "567890123456789...0123456789";//由于字符串長度太長,所以省略一部分,長度是65535
System.out.println(str.length()); //編譯報錯:Error:(14, 22) java: 常量字符串過長
代碼B
String str = "67890123456789...0123456789";//由于字符串長度太長,所以省略一部分,長度是65534
System.out.println(str.length()); //編譯通過,運行結果為:65534
代碼C
String str = "67890123456789...0123456789";//由于字符串長度太長,所以省略一部分,長度是65534 str = "5" + str; System.out.println(str.length()); //編譯通過,運行結果為:65535
String內部是以char數組的形式存儲,數組的長度是int類型,那么String允許的最大長度就是Integer.MAX_VALUE = 2^31 - 1 = 2147483647。又由于java中的字符是以16位存儲的,因此大概需要4GB的內存才能存儲最大長度的字符串。
不過這僅僅是對字符串變量而言,如果是字符串常量,如“abc”、”1234”之類寫在代碼中的字符串str,那么允許的最大長度取決于字符串在常量池中的存儲大小,也就是字符串在class格式文件中的存儲格式:
CONSTANT_Utf8_info {
u1 tag;
u2 length;
u1 bytes[length];
}
u2是無符號的16位整數,因此理論上允許的string str的最大長度是2^16-1=65535。然而實際測試表明,允許的最大長度僅為65534,超過就編譯錯誤。
以上這篇android studio錯誤: 常量字符串過長的解決方式就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Android FrameWork之Zygote啟動示例詳解
這篇文章主要為大家介紹了Android FrameWork之Zygote啟動示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-07-07

