对于类似的问题,我尝试遵循其他答案并观看了视频,但没有任何结果对我有真正的帮助。我该如何编写代码来帮助我在SQLite中存储图像并进行检索?
这是我将其插入数据库(Database.java)的代码
public boolean insertFoodcourt(int id, String desc, String path){
SQLiteDatabase db = this.getWritableDatabase();
try {
FileInputStream fs = new FileInputStream(path);
byte[] imgbyte = new byte[fs.available()];
fs.read(imgbyte);
ContentValues contentvalues = new ContentValues();
contentvalues.put("foodcourtid", id);
contentvalues.put("foodcourtdesc", desc);
contentvalues.put("foodcourtimg", imgbyte);
db.insert("Foodcourt", null, contentvalues);
fs.close();
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
这是我手动将数据插入数据库(MainPage.java)
db.insertFoodcourt(1, "Foodcourt 1", "@drawable/fc1");
这是我试图从数据库(Database.java)中检索图像的方法
public Bitmap getFoodcourtImg (int id){
SQLiteDatabase db = this.getReadableDatabase();
Bitmap fcImg = null;
Cursor cursor = db.rawQuery("SELECT * FROM Foodcourt WHERE foodcourtid = ?", new String[]{String.valueOf(id)});
if(cursor.moveToNext()){
byte[] img = cursor.getBlob(cursor.getColumnIndex("foodcourtimg"));
fcImg = BitmapFactory.decodeByteArray(img, 0, img.length);
}
return fcImg;
}
唯一的问题是检索图像并尝试将其放入CardView的ImageView中。在我编辑路径/“ foodcourtimg”之前,我使用了这段代码并能够获得描述,因此我知道该代码有效,这只是我遇到问题的图像部分。
public String getFoodcourtDesc (int id){
SQLiteDatabase db = this.getReadableDatabase();
String fcDesc = null;
Cursor cursor = db.rawQuery("SELECT * FROM Foodcourt WHERE foodcourtid = ?", new String[]{String.valueOf(id)});
if(cursor.moveToNext()){
fcDesc = cursor.getString(cursor.getColumnIndex("foodcourtdesc"));
}
return fcDesc;
}
我们将不胜感激。 如果为TL; DR,则前三个代码需要帮助。将图像插入数据库的方法,插入图像(在这种情况下为路径)和拉出图像的方法。谢谢!
答案 0 :(得分:2)
为什么要尝试将可绘制对象保存在已存储在应用程序中的数据库中?
您只需将其名称保存为字符串:"fc1"
,然后将其检索为字符串,例如在变量name
中。
之后,通过:
int id = resources.getIdentifier(name, "drawable", context.getPackageName());
您获得其ID并获得可绘制对象:
Drawable d = getResources().getDrawable(id);
,您可以随意使用它。
答案 1 :(得分:0)
我有一个解决方案,而不是在db中保存byte [],尝试将图像存储在应用程序目录Check here的内部存储器中,然后将图像路径保存在表中。