2016-05-14 13 views
0

こんにちは私のプロジェクトでは、ユーザーが動物の名前を入力する検索バーがあり、私のアプリケーションにはその動物のアニメーション画像(.gif)が表示されます。 現在、私のSQLiteデータベースにイメージのパスを保存しています。私には2つの質問があります複数の画像を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

a)は私のデータベースは、現在、どのように私はそれを拡張することができますちょうど1画像の構成、私はそれぞれのイメージファイルのために再びコードを記述する必要がありますか?もちろん

、画像、saveImageを保存し、あなたの方法では、あなたはそれが一般的にするために、パラメータとして保存する画像のパスを渡すことができません。 FileInputStreamにはハードコードされた値はありませんが、このパラメータが使用されます。このようなもの:

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

もちろん、いくつかのパスをチェックしたり、例外を適切に管理したりします。 アプリケーションのアーキテクチャがわかりません。実際の画像はデータベースに保存しないでください。TEXTに画像のパスを入れてください。

また、メソッド内でView viewパラメータを使用していないようですので、削除することができます。

b)検索はどのように行われますか?名前でイメージを検索するか、イメージタグ用に別の列を作成して検索する必要がありますか。

アプリケーションに依存します:ユーザーがイメージにタグを追加することやアプリケーションが自動的に(つまりカテゴリも)自動的に行うことができれば、ユーザーにタグの検索可能性を与えることができます。そうでなければだから、単純に名前で検索します:画像の実際の内容に完全に無関係な名前を持つファイルがあると考えてください。

+0

私は現在、自分のアプリケーションに150匹の動物を追加する予定です。ユーザーはそれを追加したり削除したりすることはできません。だから私は名前で検索するといいと思います。 第2に、私のコードはFileInputStream fis = new FileInputStream( "/ storage/sdcard/Images")のように見える必要があり、このフォルダ内に自分の画像が表示されるので、このように読むことができますか? – HeroicJokester

+0

@HeroicJokester – fasteque

+0

はい、私は150個のGIFをすべて準備しておきたいのですが、それらを追加したいのですが、アプリケーションのアーキテクチャについての詳細は、アプリケーション内に画像を埋め込んでいますか? ユーザーが編集または変更することはできません。ユーザーは動物の名前を検索するだけで、その名前の画像が表示されます。 機能的にすべての機能があります。 (PS入力も音声入力を追加することを考えていますが、後でそれを考えています)。 – HeroicJokester

関連する問題