2016-05-14 102 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