我正在尝试使用SQLite数据库中的可绘制和字符串资源的引用,在片段中显示适当的资源。 我有一个数据库帮助器文件来填充数据库,一个数据库实用程序文件来创建游标(或仅获取数组中的游标数据),以及片段文件。
DatabaseHelper.java
DatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
private void updateMyDatabase(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion == 1) {
db.execSQL("CREATE TABLE FOOD (_id INTEGER PRIMARY KEY AUTOINCREMENT, "
+ "NAME TEXT, "
+ "IMAGE_RESOURCE_ID INTEGER, "
+ "QUOTE INTEGER);");
insertFood(db,"Alcohol", R.drawable.alcohol, R.string.symptom9);
}
private static void insertFood(SQLiteDatabase db, String name, int toxicity, int resourceId, int quote){
ContentValues foodValues = new ContentValues();
foodValues.put("NAME", name);
foodValues.put("TOXICITY", toxicity);
foodValues.put("IMAGE_RESOURCE_ID", resourceId);
foodValues.put("QUOTE", quote);
db.insert("FOOD", null, foodValues);
}
}
这里,R.drawable.alcohol = 2131099733。
我正在使用Android Studio,当我将值添加到数据库并使用其中一个值显示可绘制对象时,它是正确的可绘制对象,但是当我请求游标(或基于游标的数组)时,游标包含的值与存储在数据库中的值完全不同,导致资源未找到错误。
我尝试从助手方法返回数据数组,但那也给出了不正确的整数引用,用于可绘制对象和字符串,因此我改为从助手方法返回游标:
DatabaseUtilities.java
//get all of the database data for a particular food given that food's name
public static Cursor getFoodById(Context context, long itemId){
try {
SQLiteOpenHelper DatabaseHelper = new DatabaseHelper(context);
SQLiteDatabase db = DatabaseHelper.getReadableDatabase();
return db.query(DatabaseHelper.FOOD,
new String[]{
DatabaseHelper.NAME, DatabaseHelper.IMAGE_RESOURCE_ID,
DatabaseHelper.QUOTE},
"_id = ?", new String[] {Long.toString(itemId)}, null, null, null
);
} catch (SQLiteException e) {
//TODO Add toast - food not available
return null;
}
}
最后,我想在这里显示值:
DetailFragment.java
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Cursor items = DatabaseUtilities.getFoodById(getActivity(), itemId);
if(items.moveToFirst()) {
//set appropriate img
int img = items.getInt(1);
ImageView photo = (ImageView) view.getRootView().findViewById(R.id.detail_photo);
photo.setImageResource(img);
int quote = items.getInt(2);
TextView desc = (TextView) view.getRootView().findViewById(R.id.detail_text);
String descText = getString(quote);
desc.setText(descText);
}
}
这是最后一个文件中所有光标列的日志输出:
DetailFragment - cursor: Alcohol, 2131165269, 2131558463
酒精之后的值应该是R.drawable.alcohol, 2131099733,但光标返回的是2131165269。在可绘制的参考之后,字符串参考也是如此。此外,光标对每个插入行返回不同的值,它们只是错误的值,我不知道它们来自哪里,也不知道是否有一种方法将它们转换为正确的值。
程序中的所有内容都正常工作,除了数据库没有返回正确的资源引用。