如何将图像路径存储到SQlite数据库并检索以在imgeView中显示

时间:2018-11-20 06:00:52

标签: android sqlite

我想将图像路径存储到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中填充图像?

1 个答案:

答案 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

中设置图像