android - 当我尝试从加密的 sqlite db 获取数据时出现异常
问题描述
我有一张有 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 字段
有任何想法吗?
解决方案
推荐阅读
- c++ - 具有静态成员的 C++ 模板类 - 未定义的引用,而我的静态成员似乎已声明和初始化
- opencv - MXNetError:ImageRec 需要 opencv 来处理
- android-studio - Android Studio 中的 Firebase 符号问题
- css - Flex-wrap 从上一行的垂直端开始
- python - 如何从 json 输出中仅提取一个值?
- r - 为什么 fullrange=TRUE 不适用于 ggplot2 中的 geom_smooth?
- c++ - 使用 std::string 声明一个 std::bitset 数组
- hadoop - 我想知道为什么 Hadoop 包中缺少字数包?
- python - 如何从熊猫中的文件名中提取标签
- git - Gitlab远程:致命:写入错误:设备上没有剩余空间