lundi 30 novembre 2015

Android Sqlite cursor initialization error

I have a simple sqlite class which saves the two parameters NAME and BEHAVE of a person with button a button.But the activity crashes when i click the button to save data.Here is my logcat saying- make sure the cursor is initialized properly.

12-01 10:38:05.589    9336-9336/? E/CursorWindow﹕ Failed to read row 0,      column -1 from a CursorWindow which has 8 rows, 3 columns.
     12-01 10:38:05.589    9336-9336/? D/AndroidRuntime﹕ Shutting down VM
  -01 10:38:05.599    9336-9336/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: androphile.alpha, PID: 9336
java.lang.RuntimeException: Unable to start activity ComponentInfo{androphile.alpha/androphile.alpha.sqlview}: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2790)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2855)
        at android.app.ActivityThread.access$900(ActivityThread.java:181)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1474)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:145)
        at android.app.ActivityThread.main(ActivityThread.java:6117)
        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:1399)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
 Caused by: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
        at android.database.CursorWindow.nativeGetString(Native Method)
        at android.database.CursorWindow.getString(CursorWindow.java:451)
        at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
        at androphile.alpha.behave.getData(behave.java:80)
        at androphile.alpha.sqlview.onCreate(sqlview.java:24)
        at android.app.Activity.performCreate(Activity.java:6374)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2743)

Here is my Handler class.It also show cursor should be freed up after use.

        public class behave  {
public static final String KEY_ROWID="_id ";
public static final String KEY_NAME="persons_name";
public static final String KEY_BEHAVE="persons_behave";
private static final String DATABASE_NAME="behaveDB";
private static final String DATABASE_TABLE="personTable";
private static final int  DATABASE__VERSION=1;
private Dbhelper ourHelper;
private final Context ourContext;
private SQLiteDatabase ourDatabase;
     private class Dbhelper extends SQLiteOpenHelper{
    public Dbhelper(Context context){
 super(context, DATABASE_NAME, null, DATABASE__VERSION);

   }


@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("CREATE TABLE "+ DATABASE_TABLE+"("+
          KEY_ROWID+" INTEGER PRIMARY KEY AUTOINCREMENT,"+
           KEY_NAME+" TEXT NOT NULL,"+
            KEY_BEHAVE+" TEXT NOT NULL);");

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS "+ DATABASE_TABLE);
    onCreate(db);

}}
public behave( Context c) {
    ourContext =c;
}
public behave open() throws SQLException{

    ourHelper=new Dbhelper(ourContext);
    ourDatabase=ourHelper.getWritableDatabase();
    return this;
}
public void close(){
    ourHelper.close();
}
public long createEntry(String sqlname, String sqlbehave) {

    ContentValues cv=new ContentValues();
    cv.put(KEY_NAME,sqlname);
    cv.put(KEY_BEHAVE, sqlbehave);
    return ourDatabase.insert(DATABASE_TABLE,null,cv);

}  public String getData() {
    String[] column = new String[]{KEY_ROWID, KEY_NAME, KEY_BEHAVE};
    Cursor c = ourDatabase.query(DATABASE_TABLE, column, null, null, null, null, null);
    String data = "";
    int iRow = c.getColumnIndex(KEY_ROWID);
    int iName = c.getColumnIndex(KEY_NAME);
    int iBehave = c.getColumnIndex(KEY_BEHAVE);
    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {

        data = data + c.getString(iRow) + " " + c.getString(iName)+" "+c.getString(iBehave)+ "/n";
    }
    return data;
}

}

            

Aucun commentaire:

Enregistrer un commentaire