2016-05-14 99 views
0

嗨,在我的项目中,我有一个搜索栏,用户将在其中输入动物名称,我的应用程序将显示该动物(.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); 
    } 

} 

} 

回答

0

一)我的数据库目前只包括1图像的我怎么能扩大它,我必须重新编写代码为每个图像文件?

当然不是,在保存图像的方法中,您可以将图像的路径作为参数保存,以使其通用。 FileInputStream将不具有硬编码值,但它将使用此参数。事情是这样的:

public void saveImage(String filePath) { 
    try { 
     FileInputStream fis = new FileInputStream(filePath); 
     ... 
    } 
} 

当然做一些检查,以路径或妥善处理异常。 我不知道您的应用程序的体系结构,请不要将实际图像存储在数据库中,而是使用图像的路径TEXT

此外,它看起来像你没有在方法中使用View view参数,所以你可以删除它。

b)搜索将如何工作?它会按名称搜索图像,还是必须为图像标记制作另一个列,然后再通过它进行搜索。

这取决于你的应用程序:如果有可能为用户添加标签的图像或可能的应用程序可以自动进行(即一类也),那么你可以给标签搜索可能给用户,否则不。因此,您只需按名称搜索:请考虑一个文件可以具有任何名称,与图像的实际内容完全无关,因此您最好考虑改进搜索功能的另一种策略。

+0

我目前计划在我的应用程序中添加150个动物,用户无法添加或删除它们,只能读取它们。所以我认为按名称搜索应该这样做。其次,所以我的代码必须看起来像FileInputStream fis = new FileInputStream(“/ storage/sdcard/Images)”;并且在此文件夹中将是我的图像,所以我将能够以这种方式读取它们吗? – HeroicJokester

+0

@HeroicJokester您应该提供更多关于应用程序体系结构的细节:你是否将应用程序中的图像嵌入到应用程序中?是否从网络上下载它们?基于这些要点,最佳方法可以改变 – fasteque

+0

是的,我准备了所有的150个gif,我想添加它们通过将它们存储在手机的内部或外部存储器 用户不能编辑或更改它们,用户只需搜索动物的名称,我的应用程序将显示该名称的图像 那就是所有的功能是 (PS即时通讯考虑增加语音输入,但以后也是如此)。 – HeroicJokester