2016-09-02 3 views
-1

Ich kenne dieses Problem so oft gefragt. und ich lese jeden Beitrag, der von anderen hier gemacht wurde, aber ich kann dieses Problem in meinem Fall wirklich nicht lösen.Index 0 angefordert, mit einer Größe von 0 MyHelper Java Error

Bitte helfen Sie mir, warum das passiert und wie es zu beheben?

dies ist mein Code:

public StoreData getStore(String storeid) { 
    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor c = db.rawQuery("select * from " + TABLE_NAME + " where " 
      + COL_STORE_ID + "=?", new String[]{storeid}); 
    StoreData data; 
    System.out.println("This is the problem"); 
    c.moveToFirst(); 
     data = new StoreData(
       c.getString(c.getColumnIndex(COL_STORE_ID)), 
       c.getString(c.getColumnIndex(COL_ACCOUNT_ID)), 
       c.getString(c.getColumnIndex(COL_KOTA_ID)), 
       c.getString(c.getColumnIndex(COL_STORE_NAME)), 
       c.getString(c.getColumnIndex(COL_STORE_MANAGER)), 
       c.getString(c.getColumnIndex(COL_STORE_ADDRESS)), 
       c.getString(c.getColumnIndex(COL_STORE_TELEPHONE)), 
       c.getString(c.getColumnIndex(COL_STORE_GEO_LAT)), 
       c.getString(c.getColumnIndex(COL_STORE_GEO_LONG)), 
       c.getString(c.getColumnIndex(COL_STORE_LEADTIME)), 
       c.getString(c.getColumnIndex(COL_STORE_MD))); 
    db.close(); 
    c.close(); 
    return data; 
} 

das ist mein log:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.apps.userinarts.mobilemerchpre/com.apps.userinarts.MobileMerchPre.StoresCheckinActivity}: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
at android.app.ActivityThread.-wrap11(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5417) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0 
at android.database.AbstractCursor.checkPosition(AbstractCursor.java:460) 
at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136) 
at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50) 
at com.apps.userinarts.MobileMerchPre.db.StoreHelper.getStore(StoreHelper.java:130) 
at com.apps.userinarts.MobileMerchPre.StoresCheckinActivity.inCaseOffline(StoresCheckinActivity.java:90) 
at com.apps.userinarts.MobileMerchPre.StoresCheckinActivity.onCreate(StoresCheckinActivity.java:83) 
at android.app.Activity.performCreate(Activity.java:6237) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)  
at android.app.ActivityThread.-wrap11(ActivityThread.java)  
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)  
at android.os.Handler.dispatchMessage(Handler.java:102)  
at android.os.Looper.loop(Looper.java:148)  
at android.app.ActivityThread.main(ActivityThread.java:5417)  
at java.lang.reflect.Method.invoke(Native Method)  
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  
+1

Sieht aus wie Ihre Anfrage 0 Produkte zurückgibt, können Sie dies überprüfen? – Egor

Antwort

1

sieht aus wie Ihre Abfrage 0 Treffer. Um dies zu überprüfen, ignorieren Sie nicht das Ergebnis moveToFirst(). Es wird wieder falsch, wenn Cursorgröße ist 0.
etwas tun:

if(c.moveToFirst()) { 
    data = new StoreData(
      c.getString(c.getColumnIndex(COL_STORE_ID)), 
      c.getString(c.getColumnIndex(COL_ACCOUNT_ID)), 
      c.getString(c.getColumnIndex(COL_KOTA_ID)), 
      c.getString(c.getColumnIndex(COL_STORE_NAME)), 
      c.getString(c.getColumnIndex(COL_STORE_MANAGER)), 
      c.getString(c.getColumnIndex(COL_STORE_ADDRESS)), 
      c.getString(c.getColumnIndex(COL_STORE_TELEPHONE)), 
      c.getString(c.getColumnIndex(COL_STORE_GEO_LAT)), 
      c.getString(c.getColumnIndex(COL_STORE_GEO_LONG)), 
      c.getString(c.getColumnIndex(COL_STORE_LEADTIME)), 
      c.getString(c.getColumnIndex(COL_STORE_MD))); 
    db.close(); 
    c.close(); 
} 
return data; 
+0

wenn ich dies tue und die Store-Daten = null setzen; Machen Sie das Problem zu nullpointer, –

+0

@LWiraSatriaM, sollten Sie dieses Problem auf jeden Fall behandeln. Es erscheint im Fall, wenn Sie einen Datensatz in der Datenbank angefordert haben, der nicht existiert. –

Verwandte Themen