将Firebase数据存储为本地JSON

时间:2018-06-17 12:49:51

标签: firebase firebase-realtime-database dart flutter

我想将JSON用作我的firebase数据的本地数据库,我不想离线数据存储。我使用path_provider将我的数据存储在手机上

所以我尝试用

存储数据
file.writeAsStringSync(json.encode(snapshot.toString()))

它使存储的数据文件看起来像JSON文件

"{-key:{name:name,age:age},-key:{name:name,age:age}}"

“”丢失的地方,我无法解码它。 那么这里可以做些什么呢? (编辑:Firestore是否提供了可以帮助我的任何内容?)

2 个答案:

答案 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());
    }
  }