2016-05-14 3 views
0

Привет, в моем проекте У меня есть панель поиска, в которой пользователь вводит имя животного, и мое приложение отобразит анимированную картинку этого животного (.gif). Im в настоящее время сохраняет пути изображения в моей базе данных 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 изображение, как можно расширить его, я должен написать код еще раз для каждого файла изображения?

Конечно, нет, в методе, что сохранить изображение, saveImage, вы можете пройти путь изображения для сохранения в качестве параметра, чтобы сделать его вообще. 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 гифов, и я хочу их добавить к моему приложению, сохраняя их во внутреннем или внешнем хранилище телефона. Пользователь не может редактировать или изменять их пользователя, просто будет искать имя животного, и мое приложение отобразит изображение с этим именем. Это все функционально там (PS im думает о добавлении голосового ввода тоже, но это для последующего). – HeroicJokester

Смежные вопросы