从外部存储器获取JSON
我正在尝试从外部存储(Android)读取json文件。但是做不到 我已经在清单中设置了权限,并且在阅读之前检查了权限。虽然文件已在目录中,但无法读取它从外部存储器获取JSON,json,flutter,dart,Json,Flutter,Dart,我正在尝试从外部存储(Android)读取json文件。但是做不到 我已经在清单中设置了权限,并且在阅读之前检查了权限。虽然文件已在目录中,但无法读取它 ModelTestModel modelTestModel; List<ModelTests> listModelTests; Future<bool> get readPermission async { await new Future.delayed(new Duration(seconds: 1));
ModelTestModel modelTestModel;
List<ModelTests> listModelTests;
Future<bool> get readPermission async {
await new Future.delayed(new Duration(seconds: 1));
bool checkResult = await SimplePermissions.checkPermission(
Permission.ReadExternalStorage);
if (!checkResult) {
var status = await SimplePermissions.requestPermission(
Permission.ReadExternalStorage);
if (status == PermissionStatus.authorized) {
var res = await fetchModelTest;
return res != null;
}
} else {
var res = await fetchModelTest;
return res != null;
}
return false;
}
Future<List<ModelTests>> get fetchModelTest async {
var dir = await getExternalStorageDirectory();
print(dir);
final data =
await rootBundle.loadString("${dir.path}/BCS/bsc.json");
print(data);
// var data = await rootBundle.loadString('assets/database/bcs-preparation.json'); this is working when when the file is inside assets
var jsonData = json.decode(data);
modelTestModel = ModelTestModel.fromJson(jsonData);
listModelTests = modelTestModel.modelTests;
return listModelTests;
}
ModelTestModel;
列表模型测试;
Future get readPermission异步{
等待新的未来。延迟(新的持续时间(秒:1));
bool checkResult=等待SimplePermissions.checkPermission(
权限。ReadExternalStorage);
如果(!checkResult){
var status=wait SimplePermissions.requestPermission(
权限。ReadExternalStorage);
if(status==PermissionStatus.authorized){
var res=等待获取模型测试;
返回res!=null;
}
}否则{
var res=等待获取模型测试;
返回res!=null;
}
返回false;
}
未来获取fetchModelTest异步{
var dir=await getExternalStorageDirectory();
印刷(dir);
最终数据=
等待rootBundle.loadString(“${dir.path}/BCS/bsc.json”);
打印(数据);
//var data=await-rootBundle.loadString('assets/database/bcs-preparation.json');当文件位于资产内时,此选项有效
var jsonData=json.decode(数据);
modelTestModel=modelTestModel.fromJson(jsonData);
listModelTests=modelTestModel.modelTests;
返回列表模型测试;
}
日志
I/SimplePermission(17862):检查权限:
android.permission.READ_外部_存储I/flatter(17862):目录:
“/storage/emulated/0”
权限已成功,但无法读取文件。rootBundle用于访问应用程序的资源,不能用于访问手机存储器中的文件 使用打开文件
File jsonFile = await File("${dir.path}/BCS/bsc.json");
然后使用
var jsonData = json.decode(jsonFile.readAsStringSync());
您是否收到任何错误或空数据?Futurebuilder中的快照错误