如何从库中存储SQLite数据库中的图像

时间:2012-06-11 09:36:23

标签: android image sqlite

我已经尝试过这段代码将图片从图库上传到我的应用程序中的sqllite数据库但是当我的应用程序尝试打开图库时,它会强制关闭错误,我不知道是什么问题。帮助我和thanx在高级< / p>

public class ImagggggggActivity extends Activity { 

    private static final int SELECT_PICTURE = 1;
    private String selectedImagePath; 
    private ImageView img; 

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);    
        setContentView(R.layout.main);  

         ((Button) findViewById(R.id.button1)) 
         .setOnClickListener(new OnClickListener() { 

             public void onClick(View arg0) { 

                 // in onCreate or any event where your want the user to 
                 // select a file 
                 Intent intent = new Intent(); 
                 intent.setType("image/*"); 
                 intent.setAction(Intent.ACTION_GET_CONTENT); 
                 startActivityForResult(Intent.createChooser(intent, 
                         "Select Picture"), SELECT_PICTURE); 
             } 
         }); 
} 

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
 if (resultCode == RESULT_OK) { 
     if (requestCode == SELECT_PICTURE) { 
         Uri selectedImageUri = data.getData(); 
         selectedImagePath = getPath(selectedImageUri); 
     } 
 } 
} 

public String getPath(Uri uri) { 
 String[] projection = { MediaStore.Images.Media.DATA }; 
 Cursor cursor = managedQuery(uri, projection, null, null, null); 
 int column_index = cursor 
         .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
 cursor.moveToFirst(); 
 return cursor.getString(column_index); 
}}

3 个答案:

答案 0 :(得分:1)

使用BLOB数据类型,我们可以将图像存储在SQLite数据库中。实际存储在数据库中的数据是组成图像或文件的字节。

至于从画廊获取图片,看here,看来,你已经忘记了超级&#34;调用

答案 1 :(得分:1)

点击按钮

导入表单设备
Intent sdintent = new Intent(Intent.ACTION_PICK);
sdintent.setType("image/*");
startActivityForResult(sdintent, SD_REQUEST);

获取图像表单SD卡

if (requestCode == SD_REQUEST) {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };

Cursor cursor = getContentResolver().query(selectedImage,
                filePathColumn, null, null, null);
cursor.moveToFirst();

int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String filePath = cursor.getString(columnIndex);
cursor.close();

Bitmap yourSelectedImage = BitmapFactory.decodeFile(filePath);

testimage.setImageBitmap(yourSelectedImage);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
yourSelectedImage.compress(Bitmap.CompressFormat.PNG, 100, stream);
byteArray = stream.toByteArray();
}

保存图片

DatabaseAdapter dbHelper = new DatabaseAdapter(Profiles.this);

       dbHelper.open();
       dbHelper.createUserProfiles( byteArray);
       dbHelper.close();

DatabaseAdapter.java中的NOW

定义

  public static final String U_PIC = "picture";

然后

private long createUserTableContentValues(long id,byte[] byteImage) {
        ContentValues values = new ContentValues();
        values.put(ID, id);
        values.put(U_PIC, byteImage);
return database.insert(IMAGE_INSERT, null, values);
}

我认为这可能对你有所帮助.....

其他资源: http://www.helloandroid.com/tutorials/store-imagesfiles-database

http://www.coderanch.com/t/507054/Android/Mobile/Storing-image-database

http://hi.baidu.com/_java/blog/item/971e142a13afe6305243c12f.html

http://www.tutorialforandroid.com/2009/10/how-to-insert-image-data-to-sqlite.html

答案 2 :(得分:0)

db.execSQL("CREATE TABLE images (" 
    + "_id INTEGER PRIMARY KEY AUTOINCREMENT," 
    + "data BLOB," 
    + "hash BLOB UNIQUE" 
    + ");"); 
  

要将图像转换为BLOB,请使用以下代码:(请注意   我们在这里压缩图像)

 private byte[] getBitmapAsByteArray(Bitmap bitmap)
 { 
   ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 
   // Middle parameter is quality, but since PNG is lossless, it doesn't matter 
   bitmap.compress(CompressFormat.PNG, 0, outputStream); 
   return outputStream.toByteArray(); 
}