Ошибка при работе в android через sqlite3

При вызове кнопки READ выходит ошибка. При удалении и при добавлении строк в таблицу все хорошо , а так же если закоментировать cursor.getInt(idIndex) то ошыбка не выходит.

Process: com.example.testbasadate, PID: 5106
    java.lang.IllegalStateException: Could not execute method for android:onClick
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:390)
        at android.view.View.performClick(View.java:6256)
        at android.view.View$PerformClick.run(View.java:24701)
        at android.os.Handler.handleCallback(Handler.java:789)
        at android.os.Handler.dispatchMessage(Handler.java:98)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6541)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
        at android.view.View.performClick(View.java:6256) 
        at android.view.View$PerformClick.run(View.java:24701) 
        at android.os.Handler.handleCallback(Handler.java:789) 
        at android.os.Handler.dispatchMessage(Handler.java:98) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6541) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 
     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.nativeGetLong(Native Method)
        at android.database.CursorWindow.getLong(CursorWindow.java:511)
        at android.database.CursorWindow.getInt(CursorWindow.java:578)
        at android.database.AbstractWindowedCursor.getInt(AbstractWindowedCursor.java:69)
        at com.example.testbasadate.MainActivity.READ(MainActivity.java:66)
        at java.lang.reflect.Method.invoke(Native Method) 
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385) 
        at android.view.View.performClick(View.java:6256) 
        at android.view.View$PerformClick.run(View.java:24701) 
        at android.os.Handler.handleCallback(Handler.java:789) 
        at android.os.Handler.dispatchMessage(Handler.java:98) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6541) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 

вот активность MainActivity

package com.example.testbasadate;

import androidx.appcompat.app.AppCompatActivity;

import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    public SQLiteDatabase db;
    EditText Ename,Eemal;

    dBHelper dBHelper;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Ename = (EditText)findViewById(R.id.text);
        Eemal = (EditText)findViewById(R.id.text2);
        dBHelper = new dBHelper(this);
    }


    public void ADD (View v) {

        SQLiteDatabase database = dBHelper.getReadableDatabase();
        ContentValues contentValues = new ContentValues();
        String name = Ename.getText().toString();
        String mail = Eemal.getText().toString();
        contentValues.put(dBHelper.KEY_NAME, name);
        contentValues.put(dBHelper.KEY_MAIL, mail);

        database.insert(dBHelper.TABLE_CONTACTS, null, contentValues);

    }

    public void Delet(View v){
        SQLiteDatabase database = dBHelper.getReadableDatabase();
        ContentValues contentValues = new ContentValues();
        String name = Ename.getText().toString();
        String mail = Eemal.getText().toString();
        database.delete(dBHelper.TABLE_CONTACTS, null , null);

    }

    public void READ(View v){
        SQLiteDatabase database = dBHelper.getReadableDatabase();
        ContentValues contentValues = new ContentValues();
        String name = Ename.getText().toString();
        String mail = Eemal.getText().toString();
        Cursor cursor = database.query(dBHelper.TABLE_CONTACTS, null, null, null, null, null, null);

        if(cursor.moveToFirst()){
            int idIndex = cursor.getColumnIndex(dBHelper.KEY_ID);
            int nameIndex = cursor.getColumnIndex(dBHelper.KEY_NAME);
            int emailIndex = cursor.getColumnIndex(dBHelper.KEY_MAIL);

            do{
                Log.d("mLog", "ID = " + cursor.getInt(idIndex) + ", name - " + cursor.getString(nameIndex) + ", email =  " + cursor.getString(emailIndex));
            }
            while (cursor.moveToNext());
        }

        else
            Log.d("mLog" , "0 rows");
        cursor.close();
    }
}

класс работы с Базой данных

package com.example.testbasadate;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import androidx.annotation.Nullable;

public class dBHelper extends SQLiteOpenHelper {

    public static final int DATABASE_VERSION = 1;
    public static final String DATABASE_NAME = "contactDb";
    public static final String TABLE_CONTACTS = "contacts";

    public static final String KEY_ID = "_id";
    public static final String KEY_NAME = "name";
    public static final String KEY_MAIL = "mail";

    public dBHelper(@Nullable Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }


    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + TABLE_CONTACTS + " (" + KEY_ID + "INTEGER PRIMARY KEY, " + KEY_NAME + " TEXT," + KEY_MAIL + " TEXT" + " )");

    }

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

        onCreate(db);
    }
}

разметка

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp"
    android:orientation="vertical">

    <EditText
        android:id="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <EditText
        android:id="@+id/text2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Add"
        android:onClick="ADD"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="delet"
        android:onClick="Delet"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="READ"
        android:hint="READ"/>
</LinearLayout>

Ответы (0 шт):