您好,在我的项目中,我有一个搜索栏,用户将在其中输入动物名称,我的应用程序将显示该动物的动画图片(.gif)。 我目前正在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);
}
}
}
答案 0 :(得分:0)
a)我的数据库目前仅包含1个图像,如何展开它,是否必须为每个图像文件再次编写代码?
当然不是,在保存图像的方法saveImage
中,您可以传递图像的路径以保存为参数,以使其一般化。
FileInputStream
将没有硬编码值,但会使用此参数。像这样:
public void saveImage(String filePath) {
try {
FileInputStream fis = new FileInputStream(filePath);
...
}
}
当然要对路径进行一些检查或正确管理异常。
我不知道您的应用程序的体系结构,请不要将实际图像存储在数据库中,而是将TEXT
存储在图像的路径中。
此外,您似乎没有在方法中使用View view
参数,因此您可以将其删除。
b)搜索将如何运作?它会按名称搜索图像,还是必须为图像标记创建另一列,然后按它搜索。
这取决于您的应用程序:如果用户可以为图像添加标签,或者应用程序可以自动执行(也就是类别),那么您可以为用户提供标签搜索的可能性否则不是。因此,您只需按名称搜索:请考虑一个文件可以有任何名称,与图像的实际内容完全无关,因此您最好考虑另一种改进搜索功能的策略。