Androidアプリがクラッシュし、このエラーが表示されます。SQLiteデータベースに接続しようとするとAndroidアプリがクラッシュする
package com.example.sanket.databaseexample;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.StrictMode;
/**
* Created by sanket on 18-07-2017.
*/
public class DBHandler extends SQLiteOpenHelper{
private static final int DATABASE_VERSION =1;
private static final String DATABASE_NAME = "products.db";
public static final String TABLE_PRODUCTS = "products";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_PRODUCTNAME = "product_name";
public DBHandler(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, DATABASE_NAME, factory, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String query ="CREATE TABLE " + TABLE_PRODUCTS + "(" +
COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT ,"+
COLUMN_PRODUCTNAME + " TEXT "+
")";
db.execSQL(query);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_PRODUCTS);
onCreate(db);
}
public void addProduct(Products product){
ContentValues values = new ContentValues();
values.put(COLUMN_PRODUCTNAME,product.getProduct_name());
SQLiteDatabase db = getWritableDatabase();
db.insert(TABLE_PRODUCTS,null,values);
db.close();
}
public void deleteProduct(String prductName){
SQLiteDatabase db = getWritableDatabase();
db.execSQL("DELETE FROM " + TABLE_PRODUCTS + " WHERE " + COLUMN_PRODUCTNAME+ " =\"" + prductName + "\";");
}
public String databaseToString(){
String dbString = "";
SQLiteDatabase db = getWritableDatabase();
String query = "SELECT * FROM " + TABLE_PRODUCTS +" WHERE 1";
Cursor c = db.rawQuery(query,null);
if(c.getCount() > 0) {
c.moveToFirst();
while (!c.isAfterLast()) {
if (c.getString(c.getColumnIndex("productname")) != null) {
dbString += c.getString(c.getColumnIndex("productname"));
dbString += "\n";
}
}
}
db.close();
return dbString;
}
}
LOG:
7月19日00:13:34.764 18415から18415 /? I/art:遅くない-Xcheck:jni (すでにオン)07-19 00:13:34.765 18415-18415 /? x86:07-19 00:13:35.243 18415-18415/com.example.sanket.databaseexample W/System:ClassLoader 参照先未知のパス: /data/app/com.example.sanket.databaseexample-2/lib/x86 07-19 00:13:35.501 18415-18422/com.example.sanket.databaseexample W/art: すべてのスレッドを一時停止しました:7.283ms 07-19 00: 13:35.506 18415から18415/com.example.sanket.databaseexampleのW /技術:アンドロイド 4.1する前に、方法android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter、 アンドロイド.content.res.ColorStateList、android.graphics.PorterDuff $ Mode) は間違っていました android.graphics.drawable.Drawable 07-19 00:13:35.992 18415-18422/com.example.sanket.databaseexample W/art:すべてを停止する スレッドを取る:7.732ms 07-19 00:13:36.142 18415-18415/com.example.sanket.databaseexample E/CursorWindow: は、行0、列-1を1行2 の列を持つCursorWindowから読み取れませんでした。 7月19日00:13:36.143 18415から18415/com.example.sanket.databaseexampleのD/AndroidRuntime: は---------クラッシュ7月19日0時13分の開始をVM
をシャットダウン:36.148 18415から18415/com.example.sanket.databaseexample E/AndroidRuntime:FATAL EXCEPTION:メイン プロセス:com.example.sanket.databaseexample、PID:18415 java.lang.RuntimeException:できないアクティビティを開始する ComponentInfo { com.example.sanket.databaseexample/com.example.sanket.databaseexample.MainActivity}: java.lang.IllegalStateException:行0、列-1を CursorWindowから読み取れませんでした。 からデータにアクセスする前に、カーソルが正しく初期化されていることを確認してください。 でandroid.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646) でandroid.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) android.app.ActivityThread.-wrap12(ActivityThread.java)で でandroid.app.ActivityThread $ H.handleMessage(ActivityThread.java:1460) とandroid.os.Handler.dispatchMessage(Handler.java:102) とandroid.os.Looper.loop(Looper.java:154) android.app.ActivityThread.main(ActivityThread.java:6077)の (java.lang.reflect.Metho) d.invoke(ネイティブメソッド) を com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:866) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756) 原因:java.lang.IllegalStateException:行0、列 -1をCursorWindowから読み取れませんでした。カーソルがデータにアクセスする前に、カーソルが正しく初期化されていることを確認してください。 android.database.CursorWindowの com.example.sanket.databaseexample.DBHandlerでandroid.database.CursorWindow.getStringでnativeGetString(ネイティブメソッド) android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)で(CursorWindow.java:438) .databaseToString MainActivity.java:24 com.example.sanket.databaseexample.MainActivity.onCreateでcom.example.sanket.databaseexample.MainActivity.printDatabase(MainActivity.java:37)で(DBHandler.java:57) ( ) android.app.Activity.performCreate(Activity.java:6662) a android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)におけるT android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) でandroid.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599) android.app.ActivityThread.-wrap12 android.os.Handler.dispatchMessageで(ActivityThread.java) でandroid.app.ActivityThread $ H.handleMessage(ActivityThread.java:1460) (Handler.java:102)で android.os.Looper.loopの (Looper.java:154) android.app.Activi tyThread.main java.lang.reflect.Method.invokeで(ActivityThread.java:6077) (ネイティブメソッド) でcom.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:866) でcom.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)07-19 00:13:42.576 18415-18422/com.example.sanket.databaseexample W/art: すべてのスレッドを中断しました:16.982ms 07-19 00:13:45.084 18415-18422/com.example.sanket.databaseexample W/art:すべてを中断する スレッドを取る:16.342ms 07-19 00:13:46.553 18415-18422/com.example.sanket .databaseexample W/art:すべて スレッドを停止しました:5.273ms 07-19 00:13:49.082 18415-18422/com.example.sanket.databaseexample W/art:すべて スレッドを停止しました:14.783ms 07-19 00:13:55.105 18415-18422/com.example.sanket.databaseexample W/art:すべて停止中 スレッド数:17.910ms 07-19 00:13:55.594 18415-18422/com.example.sanket.databaseexample W/art:すべて スレッドを停止しました:5.317ms 07-19 00:14:04.126 18415-18422 /com.example.sanket.databaseexample W/art:すべてを中断する スレッドを取った:6.876ms 07-19 00:14:05.626 18415-18422/com.example.sanket.databaseexample W/art:すべてを中断する スレッドが取った: 6.402ms 07-19 00:14:07.622 18415-18422/com.example.sanket.databaseexample W/art:すべてを中断する スレッドを取得: 5.339ms 7月19日00:14:16.655 18415から18422/com.example.sanket.databaseexampleのW /アート:すべての のスレッドを一時停止がかかった:このエラーメッセージで6.749ms