2015-01-18 3 views
0

Я собираюсь сохранить изображение, которое находится в папке с возможностью переноса в базу данных SQlite, и после нее просто получить его. Я собираюсь изменить эту концепцию позже, но я ничего не получил в ImageView.Храните и загружайте изображение в базу данных SQLite

Вот код:

public class DBHelper extends SQLiteOpenHelper { 

    protected static final String DATABASE_NAME = "kamuskerul2"; 
    private static final int DB_VERSION = 1; 
    private final Context myContext; 

    public DBHelper(Context context) { 
     super(context, DATABASE_NAME, null, DB_VERSION); 
     this.myContext = context; 
    } 

    public void onCreate(SQLiteDatabase sqlitedatabase) { 

     sqlitedatabase.execSQL("CREATE TABLE tableimage (image BLOB);"); 
     Bitmap mybitmap = BitmapFactory.decodeResource(myContext.getResources(), R.drawable.me); 
     ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
     mybitmap.compress(Bitmap.CompressFormat.PNG, 100, bos); 
     byte[] img = bos.toByteArray(); 

     ContentValues myContentValues = new ContentValues(); 
     myContentValues.put("imag", img); 

     sqlitedatabase.execSQL("INSERT INTO tableimage (image) VALUES('"+myContentValues+"');"); 


    }// END of onCreate(). 


    public void onUpgrade(SQLiteDatabase sqlitedatabase, int i, int j) { 
     if (i >= j) { 
      return; 
     } else { 
      sqlitedatabase.execSQL("DROP DATABASE IF EXISTS kamuskerul2;"); 
      onCreate(sqlitedatabase); 
      return; 
     } 
    } 
    } 

А другой класс (получить изображение и отобразить его).

private DBHelper dbhelper = new DBHelper(this); 
private SQLiteDatabase db; 
ImageView myTestedImageView; 
byte[] imgimg; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.MainActivity); 

    db = dbhelper.getReadableDatabase(); 

    // ImageView 
    myTestedImageView = (ImageView)findViewById(R.id.myTestedImageViewXML); 

}// end onCreate 



public void onClick(View v) { 
    String image_name = "myContentValues"; 
    Cursor cursor_image = db.rawQuery("SELECT * FROM tableimage " + "WHERE image='" + image_name + "';", null); 

    if (cursor_image.getCount() != 0) { 

      cursor_image.moveToFirst(); 
      do { 
       imgimg = cursor_image.getBlob(cursor_image.getColumnIndex("image")); 
      } while (cursor_image.moveToNext()); 

      Bitmap b1 = BitmapFactory.decodeByteArray(imgimg, 0, imgimg.length); 
      myTestedImageView.setImageBitmap(b1); 

} 

Когда я запускаю приложение, ничего не отображается, а db пуст. Надеюсь, вы получите мою идею и поможете мне преодолеть эту проблему.

ответ

0

Вместо сохранения байтов изображения в базе данных было бы лучше клонировать изображение во внешнюю память вашего приложения. Вы можете сохранить путь или просто имя изображения в базе данных.

Android Документы о вариантах хранения файлов, в частности: http://developer.android.com/guide/topics/data/data-storage.html#filesExternal

Сохранение изображения в SQLite базы данных как сгусток с моей точки зрения плохой практики, даже если преобразование изображения в байты.

+0

Итак, вы знаете любой учебник, который идет шаг за шагом, чтобы достичь моей цели. Некоторые из них я знал для Android и вам нужно больше советов и поиска. TNX. – SDG69

+0

Ссылка в моем ответе - это несколько учебник о том, как сохранить изображение на устройстве Android. Просто введите путь к этому файлу и сохраните его в базе данных sqlite в виде строки. – kevto

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