我有一个Android应用程序,我需要拍照并将其存储为字节数组(在SQLite中的blob),以供将来的purpouses使用并检索此图像并显示它。但它不会显示。我检查了创建表的方法,有BLOB
类型,我还检查了我是否使用cursor.getBlob()
检索数据。
为了捕获我接下来这个教程http://developer.android.com/guide/topics/media/camera.html exept我的onActivityResult
看起来不同,因为我得到空数据(当然,因为我已经存储了那张图片):
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAMERA_REQUEST) {
if (resultCode == RESULT_OK) {
InputStream iStream = getContentResolver().openInputStream(fileUri);
inputData = getBytes(iStream);
}
}
和inputData
是我在SQLite
数据库中存储为BLOB
的内容。请注意,方法getBytes
来自https://stackoverflow.com/a/10297073/2966401
这就是我从db返回图片的方式:
public byte[] getAttachment(int taskId) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(TABLE_TASKS, new String[] { KEY_ATTACHMENT1 },
KEY_ID + "=?", new String[] { String.valueOf(taskId) },
null, null, null, null);
if (cursor != null)
cursor.moveToFirst();
return cursor.getBlob(0);
}
在这里,我正在调用它并填入ImageView:
ImageView imgView = (ImageView) findViewById(R.id.attachment);
byte b[] = db.getAttachment(task.id);
Bitmap bp = BitmapFactory.decodeByteArray(b, 0, b.length);
imgView.setImageBitmap(bp);
请注意bp
不为空。
这是附件的布局,背景图像只是为了看它是否显示正确:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
tools:context=".TaskDetailActivity" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin" >
<ImageView
android:id="@+id/attachment"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignLeft="@+id/button3"
android:layout_below="@+id/button3"
android:src="@drawable/background" />
</RelativeLayout>
</ScrollView>
问题是它不会显示任何图片,我不知道我在这里做错了什么。我试图将它传递给新的Activity,但它太大了。我还尝试根据提到的第一个教程将jpg
更改为png
,没有区别。我也尝试了对话https://stackoverflow.com/a/6045066/2966401的这个建议。但是,它再次显示为空白。
答案 0 :(得分:0)
你可以这样使用
Blob ImgByte = _CreditDetails.getBlob("ImageName");
Drawable image = null;
int blobLength = (int) ImgByte.length();
byte[] blobAsBytes = ImgByte.getBytes(1, blobLength);
//release the blob and free up memory. (since JDBC 4.0)
ImgByte.free();
image = new BitmapDrawable(BitmapFactory.decodeByteArray(blobAsBytes, 0, blobAsBytes.length));
Imageview.setBackgroundDrawable(image);
试试这个家伙..这个对你有帮助。
答案 1 :(得分:0)
确定试试这个兄弟。
ImageView imgView = (ImageView) findViewById(R.id.attachment);
byte b[] = db.getAttachment(task.id);
Drawable image = null;
image = new BitmapDrawable(BitmapFactory.decodeByteArray(b, 0,b.length));
Imageview.setBackgroundDrawable(image);