2015-04-15 5 views
0

прежде всего извините за мой английский. Моя проблема в заголовке. Здесь мой кодjava.lang.OutOfMemoryError: java.lang.Object [] ***** (Android)

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), он работает чистым. Я много искал в Google и этой сети без каких-либо результатов. Надеюсь, вы сможете это решить! Спасибо за любую помощь!

+0

Показать код. Здесь вы пытаетесь выделить массив 'Object' с более чем 2^31 - 1 элементами. – fge

+0

use String [] = resources.getStringArray (R.array.plants); а затем создайте arraylist, используя этот массив строк –

ответ

0

Сначала получите массив строк с помощью,

Resources res = getResources(); 
String[] almazarasItems = res.getStringArray(R.array.almazaras); 

И добавить массив строк в ArrayList по,

List<String[]> arrayList = new ArrayList<String[]>(); 
arrayList.add(almazarasItems); 
1

R.array.almazaras - целочисленная константа (в вашем примере это 2131099649).

Вы должны использовать константу, чтобы сначала извлечь ресурс, а затем поместить их в свой ArrayList.

0

@ Каяман является правильным. Вы имеете в виду постоянную ссылку на массив.

Попробуйте это, он должен сделать трюк.

String arr[] = getResources().getStringArray(R.array.almazaras); 
    ArrayList<String> almazaras= (ArrayList)Arrays.asList(arr); 
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);.

0

Вы используете идентификатор для инициализации Arraylist. Но конструктор из ArrayList интерпретирует параметр как длину, которую должен иметь ArrayList при инициализации.

Значит, вы создаете Arraylist с начальной длиной 2131099649, что слишком много.

Вы можете выбрать свой массив с помощью context.getResources(). GetStringArray (R.array.almazaras);

Смежные вопросы