在SQLite中保存多个图像
问题描述:
嗨,在我的项目中,我有一个搜索栏,用户将在其中输入动物名称,我的应用程序将显示该动物(.gif)的动画图片。 我目前在我的SQLite数据库中保存图像的路径。有两个问题我有在SQLite中保存多个图像
a)我的数据库目前只包含1个图像我该如何扩展它,是否必须为每个图像文件再次编写代码?
b)搜索将如何工作?它会按名称搜索图像,还是必须为图像标记制作另一个列,然后再通过它进行搜索。
这里是我的代码:
import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class ImageDatabase extends Activity{
private ImageView mImageView;
private SQLiteDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
mImageView = (ImageView) findViewById(R.id.image_view);
db = openOrCreateDatabase("Image.db", Context.MODE_PRIVATE, null);
db.execSQL("Create Table if not exists tb (a blob)");
}
public void saveImage(View view){
try {
FileInputStream fis = new FileInputStream("/storage/sdcard/gif_file.gif");
byte[] image = new byte[fis.available()];
fis.read(image);
ContentValues values = new ContentValues();
values.put("a", image);
db.insert("ImageTable", null, values);
fis.close();
}
catch (IOException e){
e.printStackTrace();
}
}
public void getImage(View view){
Cursor c = db.rawQuery("select = from tb", null);
if (c.moveToNext()){
byte[] image = c.getBlob(0);
Bitmap bmp = BitmapFactory.decodeByteArray(image, 0, image.length);
mImageView.setImageBitmap(bmp);
}
}
}
答
一)我的数据库目前只包括1图像的我怎么能扩大它,我必须重新编写代码为每个图像文件?
当然不是,在保存图像的方法中,您可以将图像的路径作为参数保存,以使其通用。 FileInputStream
将不具有硬编码值,但它将使用此参数。事情是这样的:
public void saveImage(String filePath) {
try {
FileInputStream fis = new FileInputStream(filePath);
...
}
}
当然做一些检查,以路径或妥善处理异常。 我不知道您的应用程序的体系结构,请不要将实际图像存储在数据库中,而是使用图像的路径TEXT
。
此外,它看起来像你没有在方法中使用View view
参数,所以你可以删除它。
b)搜索将如何工作?它会按名称搜索图像,还是必须为图像标记制作另一个列,然后再通过它进行搜索。
这取决于你的应用程序:如果有可能为用户添加标签的图像或可能的应用程序可以自动进行(即一类也),那么你可以给标签搜索可能给用户,否则不。因此,您只需按名称搜索:请考虑一个文件可以具有任何名称,与图像的实际内容完全无关,因此您最好考虑改进搜索功能的另一种策略。
我目前计划在我的应用程序中添加150个动物,用户无法添加或删除它们,只能读取它们。所以我认为按名称搜索应该这样做。其次,所以我的代码必须看起来像FileInputStream fis = new FileInputStream(“/ storage/sdcard/Images)”;并且在此文件夹中将是我的图像,所以我将能够以这种方式读取它们吗? – HeroicJokester
@HeroicJokester您应该提供更多关于应用程序体系结构的细节:你是否将应用程序中的图像嵌入到应用程序中?是否从网络上下载它们?基于这些要点,最佳方法可以改变 – fasteque
是的,我准备了所有的150个gif,我想添加它们通过将它们存储在手机的内部或外部存储器 用户不能编辑或更改它们,用户只需搜索动物的名称,我的应用程序将显示该名称的图像 那就是所有的功能是 (PS即时通讯考虑增加语音输入,但以后也是如此)。 – HeroicJokester