Android:如何将GridView选定的图像插入SqlLite

问题描述

在我的主活动中按“添加”按钮时,将调用BottomSheetDialogFragment,BottomSheet包含EditText和ImageView(来自gridview的图像视图)

用户输入Edittext名称,然后在“网格视图”中选择一个图像,我想将Edittext值和用户选择的图像保存到新表中以创建Listview

我不知道如何在sqliteDatabase中保存所选图像

这是我的代码

数据库助手

public class DatabaseHelper extends sqliteOpenHelper {

   public static final String DATABASE_NAME = "slate.db";
   public static final String TABLE_NAME ="listview_name";
   public static final String COLUMN_ID="ID";
   public static final String COLUMN_TITLE="ITEM_NAME";
    private static final String COLUMN_IMAGE = "image_bitmap";;
    private  Context context;

    public DatabaseHelper(Context context)
   {
      super(context,DATABASE_NAME,null,1);
      this.context=context;

   }
    @Override
    public void onCreate(sqliteDatabase sqliteDatabase) {

       String query = "CREATE TABLE " +TABLE_NAME +"("+COLUMN_ID + "INTEGER PRIMARY KEY AUTOINCREMENT,"+
               COLUMN_TITLE + "TEXT," +COLUMN_IMAGE +  " BLOB);";

       sqliteDatabase.execsql(query);

    }

    @Override
    public void onUpgrade(sqliteDatabase sqliteDatabase,int i,int i1) {

        sqliteDatabase.execsql("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(sqliteDatabase);

    }
    void createlist(String title,byte[] image)
    {
        sqliteDatabase sqliteDatabase = this.getWritableDatabase();
        ContentValues cv = new ContentValues();

        cv.put("COLUMN_TITLE",title);
        cv.put("COLUMN_IMAGE",image);
       Long result =  sqliteDatabase.insert( TABLE_NAME,cv );
        if (result==-1)
        {
            Toast.makeText(context,"Faild to create",Toast.LENGTH_SHORT).show();
        }else {
            Toast.makeText(context,"Created Sucessfully",Toast.LENGTH_SHORT).show();
        }
    }
}

BottomSheet

 public View onCreateView(@NonNull LayoutInflater inflater,@Nullable ViewGroup container,@Nullable Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.new_list_create,container,false);

        ImageButton done = view.findViewById(R.id.done);
        final EditText listname = (EditText) view.findViewById(R.id.listname);
        final GridView gridView = (GridView) view.findViewById(R.id.gridview);

        final MyCustomAdpter customAdpter = new MyCustomAdpter(images,getContext());
        gridView.setAdapter(customAdpter);
        gridView.setonItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView,View view,long l) {
                customAdpter.selectedImage = i;
                customAdpter.notifyDataSetChanged();
                imageRes = images[i];
          

            }
        });




        done.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                DatabaseHelper myDB= new DatabaseHelper(getContext());
                myDB.createlist(listname.getText().toString(),);//how to get the selected image and display here to add the item or How to Convert the blob into String

                String itemname = listname.getText().toString();
                if (!TextUtils.isEmpty(listname.getText().toString())) {

                    startActivity(new Intent(getContext(),CheckslateHome.class).putExtra("data",itemname).putExtra("image",imageRes));
                    dismiss();
                } else {
                    Toast.makeText(getContext(),"List Name not Empty ",Toast.LENGTH_SHORT).show();
                }

            }

        });


        return view;


    }

解决方法

可能看起来与此线程相似!

https://stackoverflow.com/questions/9357668/how-to-store-image-in-sqlite-database#:~:text=Inorder%20to%20store%20images%20to,to%20set%20it%20to%20imageview

实际上,您可以将图像(位图)转换为byteArray,因此我们可以将其存储为sqlite表中的blob,请像上面已经标记了答案那样在上面检查,这两个功能都已提及1>如何转换图像(位图)到Blob或字节数组,然后2>从转换后的位置检索原始图像。