首先我想说的是,我对Android Studio相当陌生,所以这可能是一个关于基本东西的问题。
我目前正在为Android编程一个测验应用程序,我想将所有的问题存储到SQLite数据库中。
SQLiteDatabase gdb = openOrCreateDatabase(gdbName, MODE_PRIVATE, null);
gdb.execSQL("CREATE TABLE " + gdbTabelle + "(id INTEGER, question TEXT, image INTEGER, rightAnswer TEXT, alreadyAnswered INTEGER)");
gdb.execSQL("INSERT INTO " + gdbTabelle + " VALUES(1, 'When did Germany reunify', R.drawable.wvg, '03.10.1990', '0')");
gdb.close();
正如你所看到的,我认为我可以访问图像,它将显示在应用程序中的问题,通过它的ID(因此我写了R. drawable. wvg,wvg是图像的名称,我想使用。我把它存储在res/drawable文件夹。)当我写
imField.setImageResource(cursor.getInt(2));
所以我试了
imField.setImageResource(2131165395);
(this number是图片的ID,我通过调试得到的),它工作得很完美。因此我想我可以这样处理它:
SQLiteDatabase gdb = openOrCreateDatabase(gdbName, MODE_PRIVATE, null);
gdb.execSQL("CREATE TABLE " + gdbTabelle + "(id INTEGER, question TEXT, image INTEGER, rightAnswer TEXT, alreadyAnswered INTEGER)");
gdb.execSQL("INSERT INTO " + gdbTabelle + " VALUES(1, 'When did Germany reunify', 2131165395, '03.10.1990', '0')");
gdb.close();
但当我试着
imField.setImageResource(cursor.getInt(2));
(我尝试了带引号和不带引号的方法,两次都失败了,图像没有显示)。
我最后的方法是
int a = cursor.getInt(2);
imField.setImageResource(cursor.getInt(2));
,也没有成功。
那么,有没有一种优雅的方法可以将图像存储在SQLite数据库中呢?
1条答案
按热度按时间jvlzgdj91#
首先,我建议使用Jetpack Room,它有更好的错误验证,更容易使用。
第二,你有很多问题:
1.您正尝试将图像ID作为字符串而不是整数插入。请改为:
插入内容应如下所示:
1.此代码是正确的,应该已经工作:
但我猜是因为你在调试时用相同的行id和错误的图像资源id写了多行,然后你只读了第一个错误的行。尝试清除设置中的应用数据,或完全重新安装,或使用execSQL删除多余的行,或指定你的id作为主键(这样id将始终是唯一的,并导致行覆盖)。
另外,我建议通过扩展SQLiteOpenHelper创建一个单独的类来处理DB,你可以阅读android文档(https://developer.android.com/training/data-storage/sqlite)。对于阅读列值,最好使用getInt和getColumnIndex,并将列名存储在常量中。这将减少意外错误的机会,并使代码更具可读性。