我想将JSON用作我的firebase数据的本地数据库,我不想离线数据存储。我使用path_provider将我的数据存储在手机上
所以我尝试用
存储数据file.writeAsStringSync(json.encode(snapshot.toString()))
它使存储的数据文件看起来像JSON文件
"{-key:{name:name,age:age},-key:{name:name,age:age}}"
“”丢失的地方,我无法解码它。 那么这里可以做些什么呢? (编辑:Firestore是否提供了可以帮助我的任何内容?)
答案 0 :(得分:1)
您可以使用shared_preferences包来存储JSON, 或者如果要写入自定义文件,请使用path_provider包来获取应用程序有权写入的目录的路径。
您可能还需要使用dart:io
API的异步版本来访问Flutter中的文件(不确定那么难)
"{-key:{name:name,age:age},-key:{name:name,age:age}}"
无效JSON
使用
import 'dart:convert';
...
var myJson = {'-key':{'name:name','age:age'},'-key':{'name:name','age:age'}}";
var myJsonString = jsonEncode(myJson);
await file.writeAsString(myJsonString);
或
var myJsonString = '{"-key":{"name:name","age:age"},"-key":{"name:name","age:age"}}';
await file.writeAsString(myJsonString);
答案 1 :(得分:0)
创建JSON文件
Future<String> get _localPath async {
final directory = await getExternalStorageDirectory();
return directory.path;
}
Future<File> get _dbFile async {
final path = await _localPath;
return new File("$path/demo.json");
}
将数据写入文件
Future<File> write(DataSnapshot snapshot,String chatId) async {
final path = await _dbFile;
final String key = snapshot.key;
final String name = snapshot.value['senderUid'];
final int age= snapshot.value['receivedUid'];
String content = '{"$key":{"name":"$name","age":"$age"}}';
return file.writeAsStringSync(content);
}
读取数据
Future<Null> read() async {
try {
final file = await _dbFile;
String content = file.readAsStringSync();
Map<String, dynamic> chatMap=json.decode(content);
chatMap.keys.forEach((E){debugPrint(E);});
} catch (e) {
debugPrint('Error : '+e.toString());
}
}