我的ArrayList中的OutOfMemoryError

时间:2016-01-20 19:08:44

标签: java android arrays arraylist

所以我试图编写一个简单的代码来放置一个存在于其中的名称和描述的对象的所有名称。我想要这个,所以我可以在以后的自动填充文本框中使用它。运行我的代码时,我收到以下错误。我只在这段代码中加载了大约26个字符串,所以我不敢相信我此时的内存实际上已经不足了,所以我猜测代码效率很低。

public ArrayList<String> getAllFartsNames(ArrayList<Farts> farray) {
    ArrayList<String> FartsNameArray = new ArrayList<String>();
    int count=0;
    while (count<farray.size()){
        FartsNameArray.add(farray.get(count).name);
    }

    return FartsNameArray;
}

错误:

FATAL EXCEPTION: main
Process: com.example.shweber.lanternkeeper, PID: 2492
java.lang.OutOfMemoryError
    at java.util.ArrayList.add(ArrayList.java:118)
    at com.example.shweber.lanternkeeper.MainActivity.getAllFartsNames(MainActivity.java:138)
    at com.example.shweber.lanternkeeper.MainActivity.onCreate(MainActivity.java:45)
    at android.app.Activity.performCreate(Activity.java:5231)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
    at android.app.ActivityThread.access$800(ActivityThread.java:135)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5001)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
    at dalvik.system.NativeStart.main(Native Method)

当我不运行此功能时,我的代码工作正常。任何建议将不胜感激。

3 个答案:

答案 0 :(得分:3)

您需要递增计数

int count=0;
while (count<farray.size()){
    FartsNameArray.add(farray.get(count).name);
    count++;
}

您也可以使用for循环

for(int count = 0; count < farray.size(); count++) {
    FartsNameArray.add(farray.get(count).name);
}

foreach

foreach(Farts f in farray){
    FartsNameArray.add(f.name);
}

答案 1 :(得分:1)

增量内联:

public ArrayList<String> getAllFartsNames(ArrayList<Farts> farray) {
    ArrayList<String> FartsNameArray = new ArrayList<String>();
    int count=0;
    while (count<farray.size()){
        FartsNameArray.add(farray.get(count++).name);
    }

    return FartsNameArray;
}

答案 2 :(得分:1)

我想你忘了增加你的数量;

while (count<farray.size()){
    FartsNameArray.add(farray.get(count).name);
    count++;
}