Вылет приложения при попытке взять данные из курсора в SQLiteOpenHelper
Учусь работать с SQLite в андроид-приложениях , но при попытке забрать данные из курсора возникает ошибка.
Код из класса базы данных:
public class DataHelper extends SQLiteOpenHelper {
private final static String DB_NAME = "tableBase";
private static final int DB_VERSION = 1;
public DataHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
ContentValues SomeValues = new ContentValues();
SomeValues.put("TIME_TEXT", "1");
db.execSQL("CREATE TABLE MONDAY ("
+ "_id INTEGER PRIMARY KEY AUTOINCREMENT, "
+ "TIME_TEXT TEXT);");
db.insert("MONDAY", null, SomeValues);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
Вот код из MainActivity, где и возникает ошибка:
public class MainActivity extends AppCompatActivity {
SQLiteDatabase DataBase;
Cursor cursor;
String s;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SQLiteOpenHelper DataHelper = new DataHelper(this);
DataBase = DataHelper.getReadableDatabase();
cursor = DataBase.query("MONDAY",
new String[]{"_id", "TIME_TEXT"},
"_id = ?",
new String[]{Integer.toString(1)}, null, null, null);
s = cursor.getString(1); //Из-за этой строчки все крашиться
cursor.close();
DataBase.close();
}
}
Лог ошибки:
2021-03-07 15:10:17.789 7148-7148/com.trayvor.sqltester E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.trayvor.sqltester, PID: 7148
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.trayvor.sqltester/com.trayvor.sqltester.MainActivity}: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1
at android.database.AbstractCursor.checkPosition(AbstractCursor.java:514)
at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:138)
at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:52)
**at com.trayvor.sqltester.MainActivity.onCreate(MainActivity.java:31) <-- это место выделяеться особенно
at android.app.Activity.performCreate(Activity.java:8000)
at android.app.Activity.performCreate(Activity.java:7984)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java 85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
2021-03-07 15:10:17.861 7148-7148/com.trayvor.sqltester I/Process: Sending signal. PID: 7148 SIG: 9
Ответы (1 шт):
Автор решения: Trayvor
→ Ссылка
Необходимо добавить cursor.moveToFirst() перед s = cursor.getString(1);