2015-02-24 4 views
-1

Я не слишком далеко в разработке моего приложения, и я получаю java.lang.OutOfMemoryError. Вот LogCat:java.lang.OutOfMemoryError. Android

02-24 14:02:54.957: E/art(28628): Throwing OutOfMemoryError "Failed to allocate a 28 byte allocation with 8 free bytes and 8B until OOM" (recursive case) 
02-24 14:02:54.965: E/art(28628): "FinalizerDaemon" daemon prio=5 tid=8 Runnable 
02-24 14:02:54.965: E/art(28628): | group="system" sCount=0 dsCount=0 obj=0x12c260e0 self=0xac4a5400 
02-24 14:02:54.965: E/art(28628): | sysTid=28641 nice=0 cgrp=apps sched=0/0 handle=0xac4b9b00 
02-24 14:02:54.965: E/art(28628): | state=R schedstat=(2442370612 111306164 635) utm=229 stm=15 core=1 HZ=100 
02-24 14:02:54.965: E/art(28628): | stack=0xb40fe000-0xb4100000 stackSize=1036KB 
02-24 14:02:54.965: E/art(28628): | held mutexes= "mutator lock"(shared held) 
02-24 14:02:54.965: E/art(28628): at com.android.internal.os.BinderInternal$GcWatcher.finalize(BinderInternal.java:51) 
02-24 14:02:54.965: E/art(28628): at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:190) 
02-24 14:02:54.965: E/art(28628): at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:173) 
02-24 14:02:54.965: E/art(28628): at java.lang.Thread.run(Thread.java:818) 
02-24 14:02:54.965: E/System(28628): Uncaught exception thrown by finalizer 

Я пытаюсь сделать список и в любое время я получить данные, чтобы сделать список, я получаю сообщение об ошибке.

Вот класс, который расширяет фрагмент списка

`

public class BillReminderListFragment extends ListFragment { 
private ArrayList<Bill> mBills; 

public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    mBills = BillLab.get(getActivity()).getBills(); <---(this is what is causing the error) 
} 
} 

Вот класс, который содержит данные

public class BillLab { 
private ArrayList<Bill> mBills; 
private static BillLab sBillLab; 
private Context mAppBillContext; 

private BillLab(Context appBillContext){ 
    mAppBillContext = appBillContext; 
    mBills = new ArrayList<Bill>(); 
    for (int i = 0; 1 < 100; i ++){ 
     Bill b = new Bill(); 
     b.setTitle("Bill #" + i); 
     b.setDate(new Date()); 
     mBills.add(b); 
    } 
} 

public static BillLab get(Context c){ 
    if (sBillLab == null){ 
     sBillLab = new BillLab(c.getApplicationContext()); 


    } 
    return sBillLab; 
} 

public Bill getBill(UUID id){ 
    for (Bill b: mBills) { 
     if (b.getId().equals(id)) 
      return b; 
    } 
    return null; 
} 

public ArrayList<Bill> getBills(){ 
    return mBills; 
} 

} 

Пожалуйста, помогите. Это мой последний проект в колледже, и у меня мало времени. Спасибо.

`

+1

Существует бесконечный цикл. –

ответ

1

Изменить следующие строки

for (int i = 0; 1 < 100; i ++){ 

к

for (int i = 0; i < 100; i ++){ 
5

Ваш цикл имеет опечатка: for (int i = 0; 1 < 100; i ++)

должен быть i < 100. Это работает из памяти, потому что 1 всегда меньше 100.

+0

Большое вам спасибо. Я был очень стеснен, когда писал код, и я его не тестировал. Я подавлен. Я сделал такую ​​глупую ошибку. ' – user3332929

+0

Случается для всех нас! – ekchang

0

этот метод имел 2 первопричину, один Упоминание @Nag ЭОД, но основная причина из java.lang.OutOfMemoryError является: -

private BillLab(Context appBillContext){ 
    mAppBillContext = appBillContext; 
    mBills = new ArrayList<Bill>(); 
    for (int i = 0; 1 < 100; i ++){ // this line will cause the infinity loop only  
     Bill b = new Bill();  // this is the root cause to create every single object for each loop. 
     b.setTitle("Bill #" + i); 
     b.setDate(new Date()); 
     mBills.add(b); 
    } 
} 

к: -

private BillLab(Context appBillContext){ 
     mAppBillContext = appBillContext; 
     mBills = new ArrayList<Bill>(); 
     Bill b = null; 
     for (int i = 0; i < 100; i ++){ 
      b = new Bill(); 
      b.setTitle("Bill #" + i); 
      b.setDate(new Date()); 
      mBills.add(b); 
     } 
    } 
Смежные вопросы