【发布时间】:2022-01-20 09:51:15
【问题描述】:
我正在尝试使用颤振将图像保存在 sqlite 数据库中,下面是我的助手类 我想保存数据的地方
class DBHelper{
static Database? _db;
static const String ID = 'id';
static const String NAME = 'photo_name';
static const String TABLE = 'PhotosTable';
static const String DB_NAME = 'photos.db';
Future<Database> get db async {
if (null != _db) {
return _db!;
}
_db = await initDb();
return _db!;
}
initDb() async {
io.Directory documentsDirectory = await getApplicationDocumentsDirectory();
String path = join(documentsDirectory.path, DB_NAME);
var db = await openDatabase(path, version: 1, onCreate: _onCreate);
return db;
}
_onCreate(Database db, int version) async {
await db.execute("CREATE TABLE $TABLE ($ID INTEGER, $NAME TEXT)");}
Future<SaveImage> save(SaveImage employee) async {
var dbClient = await db;
employee.id = await dbClient.insert(TABLE, employee.toMap());
return employee;
}
Future<List<SaveImage>> getPhotos() async {
var dbClient = await db;
List<Map> maps = await dbClient.query(TABLE, columns: [ID, NAME]);
List<SaveImage> employees = [];
if (maps.length > 0) {
for (int i = 0; i < maps.length; i++) {
employees.add(SaveImage.fromMap(maps[i]));
}
}
return employees;
}
Future close() async {
var dbClient = await db;
dbClient.close();
}
}
我使用图像选择器从图库中选择转换为 base 64 字符串的图像并将其保存在数据库中。
selectImages() async {
final List<XFile>? selectedImages = await _picker.pickMultiImage();
if (selectedImages!.isNotEmpty) {
_imageList.addAll(selectedImages);
}
for (var i = 0; i > _imageList.length; i++) {
try {
var bytes = Io.File(_imageList[i].path).readAsBytesSync();
String img64 = base64Encode(bytes);
SaveImage saveImage = SaveImage(id: i, image: img64);
dbHelper.save(saveImage);
} catch (e) {
print(e);
}
}
print("selected images are " + _imageList.length.toString());
if (images.isEmpty) {
print("no data");
} else {
print("data");
}
}
这是我的初始化状态方法和从数据库中检索数据的方法
@override
void initState() {
// TODO: implement initState
super.initState();
dbHelper = DBHelper();
images = [];
refreshImages();
print("length of image is " + images.length.toString());
}
refreshImages() async {
await dbHelper.getPhotos().then((value) {
images.addAll(value);
});
}
我无法将图像保存在数据库中,请帮助我
【问题讨论】:
-
您遇到错误了吗?
-
不,我没有收到任何错误
-
所以它只是不添加字节数组?你能试试像“hello world”这样的小东西吗?
-
好的,我会试试的
-
我用字符串“hello world”试过同样的问题!!!!在控制台中我得到这个 I/OpenGLRenderer(4969): Davey!
标签: android flutter sqlite dart imagepicker