首先是我的英语借口。 我的问题在于头衔。这是我的代码
ArrayList<String> almazaras=null;
almazaras=new ArrayList<>(R.array.almazaras);
它在愤怒中崩溃了。这是我的XML:
<resources>
<string-array name="almazaras">
<item>SAN SEBASTIAN DE ALFACAR</item>
<item>ACEITES ALGARINEJO</item>
<item>AGRICOLA LOS TAJOS</item>
<item>AGRICOLA SANTA BARBARA DE BAZA</item>
<item>SAN SEBASTIAN DE BENALUA</item>
<item>SANTA ISABEL DE CAMPOTEJAS</item>
<item>NTRA. SRA. DE LOS REMEDIOS DE CAMPOTEJAS</item>
<item>NTRA. SRA. DEL ROSARIO CASTRIL</item>
<item>SAN ANTONIO DE COGOLLOS</item>
<item>NTRA. SRA. DEL PILAR DE COLOMERA</item>
<item>LA ESPERANZA DEL CAMPO</item>
<item>NTRA. SRA. DE LA CABEZA DE CULLAR</item>
<item>NTRA. SRA. DEL ROSARIO DE DEHESAS</item>
<item>NTRA. SRA. DE LOS DOLORES</item>
<item>SAN ISIDRO DE DEIFONTES</item>
<item>S.A.T. NTRA. SRA. DEL PERPETUO SOCORRO</item>
<item>BARAILA DE DOMINGO PEREZ</item>
<item>NTRA. SRA. DE LOS DOLORES DE FREILA</item>
<item>ACEITES FUENTES DE CESNA</item>
<item>SAN FRANCISCO SERRANO</item>
<item>AGRO-OLIV NTRA. SRA. SOLEDAD DE HUESCAR</item>
<item>AGRICOLA SAN ROGELIO DE ILLORA</item>
<item>NTRA. SRA. DE LOS REMEDIOS DE IZNALLOZ</item>
<item>OLIJAYENA</item>
<item>UNION AGRICOLA SAN JOSE</item>
<item>SAN ISIDRO DE LOJA</item>
<item>SAN FRANCISCO DE ASIS</item>
<item>ALMAZARA NTRA. SRA. DE LOS REMEDIOS</item>
<item>VIRGEN DE LA CABEZA</item>
<item>ALMAZARA DE MONTILLANA</item>
<item>SAN ILDEFONSO DE PELIGROS</item>
<item>SAN ROQUE DE PINOS DEL VALLE</item>
<item>SANTA MONICA DE PIÑAR</item>
<item>PUERTO LOPE</item>
<item>SANTA ANA DE SALAR</item>
<item>ACEITES EL CORTIJILLO</item>
<item>OLEOTROPIC</item>
<item>TEMPLE OLIVA</item>
<item>CAMPO-AGRO OLIVARERA</item>
<item>AGRARIA CERRO GORDO</item>
<item>SAN LORENZO DE ZAGRA</item>
<item>NTRA. SRA. DE LA CABEZA DE ZUJAR</item>
</string-array>
这是我的错误:
04-15 12:44:48.406 4631-4631/com.example.soke.faeca E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.OutOfMemoryError: java.lang.Object[] of length 2131099649 exceeds the VM limit
at java.util.ArrayList.<init>(ArrayList.java:75)
at com.example.soke.faeca.enviarGrupo.onCreate(enviarGrupo.java:55)
at android.app.Activity.performCreate(Activity.java:5047)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2056)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2117)
at android.app.ActivityThread.access$700(ActivityThread.java:134)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1218)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4867)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
at dalvik.system.NativeStart.main(Native Method)
我不知道为什么。在不同的文件和相同的方式(从XML获取资源)上执行此操作它是干净的。我花了很多时间在谷歌和这个网站上搜索没有结果。希望你能解决它! 谢谢你的帮助!
答案 0 :(得分:1)
R.array.almazaras
是一个整数常量(在您的示例中,它是2131099649
)。
您应首先使用常量来获取资源,然后将其放入ArrayList
。
答案 1 :(得分:0)
@Kayaman是对的。您指的是对数组的常量引用。
试试这个,它应该可以解决问题。
String arr[] = getResources().getStringArray(R.array.almazaras);
ArrayList<String> almazaras= (ArrayList)Arrays.asList(arr);
答案 2 :(得分:0)
首先获取String数组,
Resources res = getResources();
String[] almazarasItems = res.getStringArray(R.array.almazaras);
将String数组添加到ArrayList
,
List<String[]> arrayList = new ArrayList<String[]>();
arrayList.add(almazarasItems);
答案 3 :(得分:0)
您无法致电almazaras=new ArrayList<>(R.array.almazaras);
初始化List
。在Android中,R.array.almazaras
是array
资源的地址,例如integer-array
,string-array
。您可以在Hex
中找到gen/pkg-name/R
格式的值。也许您可以致电almazaras=new ArrayList<>();
或almazaras=new ArrayList<>(a-int-value);
。
答案 4 :(得分:0)
您正在使用ID初始化Arraylist。但是ArrayList的构造函数将Parameter解释为ArrayList应该在初始化时的长度。
所以你要创建一个初始长度为2131099649的Arraylist太多了。
您可以使用 。context.getResources()getStringArray(R.array.almazaras);