当我尝试从加密的sqlite数据库中获取数据时遇到异常

时间:2019-12-25 22:01:32

标签: android sql kotlin

我有一个5行的表。第一个(标题)是主要的。

我以这种方式存储数据:

fun insertIntoDB(title: String, login: String, password: String, note: String, dateTime: String, context: Context) {
        SQLiteDatabase.loadLibs(context)
        val db = getInstance(context).getWritableDatabase(password)
        val cv = ContentValues()
        cv.put(COLUMN_NAME_TITLE, title)
        cv.put(COLUMN_NAME_LOGIN, login)
        cv.put(COLUMN_NAME_PASSWORD, password)
        cv.put(COLUMN_NAME_NOTE, note)
        Log.i("TAG", note)
        cv.put(COLUMN_NAME_DATE_TIME, dateTime)

        db.insert(FeedEntry.TABLE_NAME, null, cv)

        val cursor = db.rawQuery("SELECT * FROM '" + FeedEntry.TABLE_NAME + "';", null)
        cursor.close()
        db.close()
    }

以这种方式获取它:

fun getDataFromDB(context: Context): ArrayList<Model> {
        SQLiteDatabase.loadLibs(context)
        val modelList = ArrayList<Model>()
        val db = getInstance(context).getWritableDatabase("KILLTHEMALL")
        val cursor = db.rawQuery("SELECT * FROM '" + FeedEntry.TABLE_NAME + "';", null)
        if (cursor.moveToFirst()) {
            do {
                val model = Model()
                model.title = cursor.getString(cursor.getColumnIndex(COLUMN_NAME_TITLE))
                model.login = cursor.getString(cursor.getColumnIndex(COLUMN_NAME_LOGIN))
                model.password = cursor.getString(cursor.getColumnIndex(COLUMN_NAME_PASSWORD))
                model.note = cursor.getString(cursor.getColumnIndex(COLUMN_NAME_NOTE))
                model.date = cursor.getString(cursor.getColumnIndex(COLUMN_NAME_DATE_TIME))

                modelList.add(model)
            } while (cursor.moveToNext())
        }
        return modelList
    }

在我的主要活动中,我调用方法getDataFromDB()将其放在列表中并将其传递给适配器

val helper = DBHelper(this)
dataList = helper.getDataFromDB(this)
rvAdapter = RVAdapter(dataList)
recyclerView.adapter = rvAdapter

但是我受到了这样的打击:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.passlin, PID: 17759
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.passlin/com.example.passlin.CardsActivity}: java.lang.IllegalStateException: cursor.getString(cursor.…nIndex(COLUMN_NAME_NOTE)) must not be null
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
        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:2016)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
     Caused by: java.lang.IllegalStateException: cursor.getString(cursor.…nIndex(COLUMN_NAME_NOTE)) must not be null
        at com.example.passlin.DBHelper.getDataFromDB(DBHelper.kt:85)
        at com.example.passlin.CardsActivity.onCreate(CardsActivity.kt:48)
        at android.app.Activity.performCreate(Activity.java:7802)
        at android.app.Activity.performCreate(Activity.java:7791)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 
        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:2016) 
        at android.os.Handler.dispatchMessage(Handler.java:107) 
        at android.os.Looper.loop(Looper.java:214) 
        at android.app.ActivityThread.main(ActivityThread.java:7356) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 

我真的没有得到这个原因,因为我自己使用对话框将一个字符串放入NOTE字段

有什么想法吗?

0 个答案:

没有答案
相关问题