2016-07-27 18 views
-4

Mein Szenario ist, habe ich einige Daten in der Datenbank SQLite. Ich kann die Daten bekommen richtig durch,Werfen OutOfMemoryError Android

Cursor c0 = OCTDBHelper.myDataBase.rawQuery("SELECT DISTINCT ALIAS FROM ICT32 where ALIAS NOT NULL", null); 
Log.i("IC-Count", "IC-Count : " + c0.getCount()); 
String arr[] =new String[c0.getCount()]; 

    c0.moveToFirst(); 
     for(int i = 0; i < c0.getCount(); i++) 
     { 
      arr[i] = c0.getString(0); 
      c0.moveToNext(); 

     } 

hier habe ich alle Daten korrekt ist in arr wie

arr [0]: abcb, hjhj, jkshdf, hdjf, GHSG, aghgh,

arr [1]: klkl, sdjk, jkji, iui, jiji, jij,

. . .

arr [n]: QW, RWER, re, tr, yty, uyu, RTR, ter, ETR, yrt, ytr

ie hat jede Position 10-30 Daten mit comma(,). total arr.length is 1322

nach, dass die Daten immer ich brauche eine Operation mit den Daten zu tun, wie folgen,

  • ich split(",") auf comma(,) basieren müssen, und fügen Sie in Einzel List bis Array n'th Position erreichen.

  • Schließlich sollte meine ausgegeben werden,

    Liste [0]: abcb

    Liste [1]: hjhj

    Liste [2]: jkshdf

    ...

    Liste [n-1]: rt

    Liste [n]: ytr

Ich denke schon richtig gemacht. aber es gibt Fehler wie Throwing OutOfMemoryError

Mein Code ist,

Cursor c0 = OCTDBHelper.myDataBase.rawQuery("SELECT DISTINCT ALIAS FROM ICT32 where ALIAS NOT NULL", null); 

Log.i("IC-Count", "IC-Count : " + c0.getCount()); 
ArrayList<String> tmp = new ArrayList<>(); 
c0.moveToFirst(); 
     for(int i = 0; i < c0.getCount(); i++) 
      { 
       String arr[] = c0.getString(0).split(","); 
        for(int j= 0; j< arr.length;i++) 
          { 
           if(!arr[j].equals(",")) 
            { 
             tmp.add(arr[j]); 
            } 
          } 
        c0.moveToNext(); 

      } 

Log.i("Alias" , "count : " +tmp.size()); 

dieser Code gibt Throwing OutOfMemoryError

Logcat

FATAL EXCEPTION: main 
Process: estec.android.mvi32, PID: 11005 
java.lang.OutOfMemoryError: Failed to allocate a 103059952 byte allocation with 16777120 free bytes and 58MB until OOM 
at java.util.ArrayList.add(ArrayList.java:118) 
at estec.android.mvi32.OCTActivity.onOptionsItemSelected(OCTActivity.java:294) 
at android.app.Activity.onMenuItemSelected(Activity.java:2882) 
at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:353) 
at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:144) 
at android.support.v7.internal.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:99) 
at android.support.v7.app.AppCompatDelegateImplV7.onMenuItemSelected(AppCompatDelegateImplV7.java:541) 
at android.support.v7.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:811) 
at android.support.v7.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:153) 
at android.support.v7.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:958) 
at android.support.v7.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:948) 
at android.support.v7.internal.view.menu.MenuPopupHelper.onItemClick(MenuPopupHelper.java:187) 
at android.widget.AdapterView.performItemClick(AdapterView.java:300) 
at android.widget.AbsListView.performItemClick(AbsListView.java:1143) 
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3044) 
at android.widget.AbsListView.onTouchUp(AbsListView.java:3872) 
at android.widget.AbsListView.onTouchEvent(AbsListView.java:3627) 
at android.view.View.dispatchTouchEvent(View.java:8388) 
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2424) 
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2158) 
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430) 
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172) 
at android.widget.PopupWindow$PopupViewContainer.dispatchTouchEvent(PopupWindow.java:1682) 
at android.view.View.dispatchPointerEvent(View.java:8578) 
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4021) 
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3887) 
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3449) 
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3502) 
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3468) 
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3578) 
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3476) 
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3635) 
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3449) 
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3502) 
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3468) 
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3476) 
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3449) 
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5701) 
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5675) 
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5646) 
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5791) 
at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185) 
at android.os.MessageQueue.nativePollOnce(Native Method) 
at android.os.MessageQueue.next(MessageQueue.java:143) 
at android.os.Looper.loop(Looper.java:122) 
at android.app.ActivityThread.main(ActivityThread.java:5253) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 

Wie dieses Problem lösen ??.

+0

bitte den Grund für den Downvote kommentieren? –

+1

Ihre Array-Liste fügt infinite Elemente hinzu und ändert 'for (int j = 0; j

+1

@SathishKumarJ Lernen zu debuggen und Sie sparen sich viel Zeit. Beachten Sie auch Copy-Pasting-Code ist eine schlechte Praxis, die zu dieser Art von Bugs führt. – m0skit0

Antwort

4

Diese für Schleife endet nie, schauen nah an den letzten Teil:

for(int j= 0; j< arr.length;i++) 

Ändern der i++-j++ diesen Fehler zu beheben.

+1

löste es. dummes Problem. Danke @Turbo J –

+0

freundlicherweise entfernen –

+0

Nicht meine Stimmen, aber danke für die Erinnerung an mich. –

Verwandte Themen