2012-06-11 88 views
1

我已经试过这段代码从图库上传图像到我的应用程序中的sqllite数据库,但是当我的应用程序试图打开图库时,它给了FORCE TO CLOSE错误,我不知道什么是problem.help我和thanx先进的如何在图库中存储SQLite数据库中的图像

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); 
}} 

回答

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

定义

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

1

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

至于从画廊获取图片,看看here,看起来,你已经忘记了“超级”呼叫。

+0

你能请告诉我一个在android应用程序中完成的例子吗? – Djkgotso

+0

嗯。看来,你的问题并不是将图像存储到SQLite中,而是从图库中获取它。我认为,你的问题应该根据这个编辑。回答编辑。 – Gangnus

+0

是的,这是我的问题 – Djkgotso

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(); 
} 
相关问题