问题描述
在我的主活动中按“添加”按钮时,将调用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;
}
解决方法
可能看起来与此线程相似!
实际上,您可以将图像(位图)转换为byteArray,因此我们可以将其存储为sqlite表中的blob,请像上面已经标记了答案那样在上面检查,这两个功能都已提及1>如何转换图像(位图)到Blob或字节数组,然后2>从转换后的位置检索原始图像。