我想将图像路径存储到SQlite数据库中,然后再检索它以填充到listView中。
这是我的下面的代码。问题是将图像路径保存到数据库后,ImageView没有填充。
从图库获取图像Uri并获取图像路径的代码
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent
data) {
if (requestCode == 1 && resultCode == Activity.RESULT_OK){
if (data != null){
imageUri = data.getData();
imagePath = getImagePath(imageUri);
itemImage.setImageURI(imageUri);
itemImage.invalidate();
}
}
}
//Method to get the image path from the Uri
public String getImagePath(Uri currentUri){
String path = "no-path-found";
String[] projection = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(currentUri, projection, null,
null, null);
if(cursor.moveToFirst()) {
int column_Index =
cursor.getColumnIndex(MediaStore.Images.Media.DATA);
path = cursor.getString(column_Index);
}
cursor.close();
return path;
}
这是将图像路径插入db的代码:
private void insertItem(){
//Get a writable database
SQLiteDatabase database = itemDbHelper.getWritableDatabase();
Uri mUri;
//Get values from the fields from user
String name = itemName.getText().toString().trim();
imagePath = getImagePath(imageUri).trim();
//Create a content values object to insert items
ContentValues values = new ContentValues();
values.put(ItemEntry.COLUMN_NAME, name);
values.put(ItemEntry.COLUMN_IMAGE, imagePath);
然后我使用游标适配器类填充视图:
public class ItemCursorAdapter extends CursorAdapter {
public ItemCursorAdapter(Context context) {
super(context, null, 0);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return LayoutInflater.from(context).inflate(R.layout.list_item, parent,
false);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
ImageView imageView = view.findViewById(R.id.item_image);
TextView textView = view.findViewById(R.id.item_name);
//Fetching the values from the cursor
String name =
cursor.getString(cursor.getColumnIndex(ItemEntry.COLUMN_NAME));
String image =
cursor.getString(cursor.getColumnIndex(ItemEntry.COLUMN_IMAGE));
File file = new File(image);
Uri uri = Uri.fromFile(file);
//Populate the views
imageView.setImageURI(uri);
textView.setText(name);
}
}
这是list_item xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/item_image"
android:layout_width="90dp"
android:layout_height="90dp"
tools:src="@tools:sample/avatars" />
<TextView
android:id="@+id/item_name"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:textSize="20sp"
android:textStyle="bold|italic"
tools:text="Name"/></LinearLayout>
如何获取保存在数据库中的路径并在imageView中填充图像?
答案 0 :(得分:0)
尝试这一步,我已经实现了这一步。
第一个表格字段是(Get-Content file.txt) -Replace "abc", "def" | Add-Content other.txt
,就像BLOB
。
img_driver BLOB
第二张图像转换为ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
Bitmap mBitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream);
byte[] byteArray = byteArrayOutputStream.toByteArray();
encImage = Base64.encodeToString(byteArray, Base64.DEFAULT);
格式。
此过程是将图像存储在Base64
数据库中。
现在从Sqlite
数据库中获取图像。
第1次,您在一次抓取到SqLite
String
byte[] decodedString = Base64.decode(arr_image.get(0).getImg_driver(), Base64.DEFAULT);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
iv_sign.setImageBitmap(decodedByte);
字符串以转换为解码为Base64
您可以在byte array