2013-05-13 2 views
-1

У меня есть следующее сообщение об ошибке в моем приложении:Не удался прочитать строку 1, столбец -1 от CursorWindow

05-13 09:05:53.218: E/AndroidRuntime(5339): FATAL EXCEPTION: main 
05-13 09:05:53.218: E/AndroidRuntime(5339): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.unserekinder/com.example.unserekinder.Ereignisse}: java.lang.IllegalStateException: Couldn't read row 1, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it. 
05-13 09:05:53.218: E/AndroidRuntime(5339):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
05-13 09:05:53.218: E/AndroidRuntime(5339):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
05-13 09:05:53.218: E/AndroidRuntime(5339):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
05-13 09:05:53.218: E/AndroidRuntime(5339):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
05-13 09:05:53.218: E/AndroidRuntime(5339):  at android.os.Handler.dispatchMessage(Handler.java:99) 
05-13 09:05:53.218: E/AndroidRuntime(5339):  at android.os.Looper.loop(Looper.java:137) 
05-13 09:05:53.218: E/AndroidRuntime(5339):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
05-13 09:05:53.218: E/AndroidRuntime(5339):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-13 09:05:53.218: E/AndroidRuntime(5339):  at java.lang.reflect.Method.invoke(Method.java:511) 
05-13 09:05:53.218: E/AndroidRuntime(5339):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
05-13 09:05:53.218: E/AndroidRuntime(5339):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
05-13 09:05:53.218: E/AndroidRuntime(5339):  at dalvik.system.NativeStart.main(Native Method) 
05-13 09:05:53.218: E/AndroidRuntime(5339): Caused by: java.lang.IllegalStateException: Couldn't read row 1, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it. 
05-13 09:05:53.218: E/AndroidRuntime(5339):  at android.database.CursorWindow.nativeGetString(Native Method) 
05-13 09:05:53.218: E/AndroidRuntime(5339):  at android.database.CursorWindow.getString(CursorWindow.java:434) 
05-13 09:05:53.218: E/AndroidRuntime(5339):  at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51) 
05-13 09:05:53.218: E/AndroidRuntime(5339):  at com.example.unserekinder.Ereignisse.datenfuerlistviewereignis(Ereignisse.java:49) 
05-13 09:05:53.218: E/AndroidRuntime(5339):  at com.example.unserekinder.Ereignisse.onCreate(Ereignisse.java:28) 
05-13 09:05:53.218: E/AndroidRuntime(5339):  at android.app.Activity.performCreate(Activity.java:5104) 
05-13 09:05:53.218: E/AndroidRuntime(5339):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
05-13 09:05:53.218: E/AndroidRuntime(5339):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
05-13 09:05:53.218: E/AndroidRuntime(5339):  ... 11 more 

Моей таблица выглядит следующим образом:

public static final String ereignisid = "id"; 
public static final String TABLE_NAME_EREIGNIS="ereignis"; 
public static final String EREIGNISNAME = "ereignisname"; 
public static final String EREIGNISZEIT = "ereigniszeit"; 
public static final String EREIGNISGENAUERES = "ereignisgenaueres"; 
public static final String KINDID = "kindid"; 

private static final String TABLE_EREIGNIS_CREATE = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME_EREIGNIS + " (" + ereignisid + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
     + EREIGNISNAME + " TEXT, " + EREIGNISZEIT + " TEXT, " + EREIGNISGENAUERES + " TEXT, " + KINDID + " INTEGER, FOREIGN KEY (" + KINDID + ") REFERENCES " + TABLE_NAME_Kind + "(" + id + "));"; 

Это функция, где произошла ошибка:

private ArrayList<Ereignis> datenfuerlistviewereignis(){ 
     DBHelper db = new DBHelper(this); 
     ArrayList<Ereignis> arr = new ArrayList<Ereignis>(); 
     ListView lv = (ListView) findViewById(R.id.lvEreignisse); 
     id = getIntent().getIntExtra("kinderid", 0); 
     System.out.println("SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSss" + id); 
     Cursor c = db.selectEreignis(id); 
     c.moveToFirst(); 
     int count = c.getCount(); 
     int i = 0; 

     while(c.moveToNext()) 
     { 


// here happens the error! 
       arr.add(new Ereignis(c.getString(c.getColumnIndex("ereigniszeit")), c.getString(c.getColumnIndex("ereignisname")))); 



      i++; 
     } 
     if(arr.size() > 0){ 
      return arr; 
     } 
     else{ 
      ArrayList<Ereignis> arrempty = new ArrayList<Ereignis>(); 
      arrempty.add(new Ereignis("Keine Daten vorhanden", " ")); 
      return arrempty; 
     } 
    } 

Может кто-нибудь сказать мне, где моя ошибка?

EDIT:

Это selectEreignis()

public Cursor selectEreignis(int kindid){ 
    SQLiteDatabase db = getReadableDatabase(); 
    Cursor cursor = db.rawQuery("SELECT ereignisname FROM EREIGNIS WHERE KINDID = " + kindid, null); 

    System.out.println("HALLLIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII" + cursor.getCount()); 
    return cursor; 
} 
+0

Возможный дубликат [Couldn't read row 0 - cursor] (http://stackoverflow.com/questions/16467571/couldnt-read-row-0-cursor) – Luksprog

+0

Ответ в другом вопросе isn't the правильный. – user896692

+1

проверить, что имя столбца такое же, когда вы используете этот c.getString (c.getColumnIndex ("ereigniszeit")) andc.getString (c.getColumnIndex ("ereignisname")) –

ответ

1
Cursor cursor = db.rawQuery("SELECT ereignisname FROM EREIGNIS WHERE KINDID = " + kindid, null); 

изменить его

Cursor cursor = db.rawQuery("SELECT ereignisname, ereigniszeit FROM EREIGNIS WHERE KINDID = " + kindid, null); 

ли что-то вроде этого, если ваш стол и запрос отлично.

if(c.moveToFirst()) 
    { 
    do 
    { 
    // your array stuff here 
    }while(c.moveToNext()); 
    } 
1

"ereigniszeit" не в схеме в качестве имени столбца. Возможно опечатка. Или, возможно, ваша функция selectEreignis не запрашивает этот столбец.

+0

Что вы подразумеваете под «isn't in the schema»? – user896692

+0

«Схема» - это имя описания данных в базе данных - все таблицы, столбцы, представления и т. Д. Я говорю либо, что это не имя столбца (возможно, из-за опечатки), либо ваш выбор функция не запрашивает этот столбец в наборе столбцов для запроса. Из-за того, что я не говорю по-немецки (?), Мне трудно найти, какой именно. –

1

Пожалуйста, попробуйте изменить имя столбца ereigniszeit или ereignisname, а затем try.Because эта переменная может быть объявлена ​​уже в схеме базы данных SQLite

0

Ok, я добавил ereigniszeit в моей selectEreignis() функции.

+0

Теперь это работает? но вам нужно удалить c.moveToFirst, иначе вы пропустите строку –

+0

Не обращайте внимания, если вы используете do while –

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