微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

可以读取 /storage 但不能读取 react-native-fs 中的 /storage/emulated [错误:尝试获取空数组的长度]

如何解决可以读取 /storage 但不能读取 react-native-fs 中的 /storage/emulated [错误:尝试获取空数组的长度]

我正在尝试编写一个需要在文件系统(基于目录的音乐播放器)中导航的应用程序。为此,我正在使用 react-native-fs。问题是我可以读取 /storage 目录的内容,但是当我尝试读取更深的内容时,例如 /storage/emulated 或 SD 卡的内容,应用程序向我显示一个错误 - [Error: Attempt to获取空数组的长度].

当我检查权限时,内置功能和应用程序设置都显示我已获得权限。 android模拟器和真机都出现这个问题。

任何想法我做错了什么或如何绕过这个问题?

这是我的安卓清单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.filesys">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

    <application ...

这就是我的代码

import { View,Text,StyleSheet,PermissionsAndroid,Alert,Button } from 'react-native';
import * as RNFS from 'react-native-fs';


const requestPermission = async () => {
  try {
    const granted = await PermissionsAndroid.request(
      PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE,{
        'title': 'Read External Storage Permission','message': 'The App needs access to your external storage '
      }
    )
    if (granted === PermissionsAndroid.RESULTS.GRANTED) {
      Alert.alert("Read external storage permission granted.");
    }
    else {
      Alert.alert("Read external storage permission not granded");
    }
  }
  catch (err) {
    console.log(err)
  }
}

const checkPermission = () => {
  PermissionsAndroid.check( PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE)
  .then(result => console.log(result))
  .catch(err => console.log(err));
}

const showFiles = (path) => {
  RNFS.readDir(path)
  .then(files => {
    console.log('files:')
    files.forEach(file => console.log(file))
  })
  .catch(err => console.log(err));
}


export default class Main extends Component {

  async componentDidMount() {
    await requestPermission()
  }

  render() {
    return (
      <View style={styles.container} >
        <Text>show files app</Text>
        <Button title='check permission' onPress={checkPermission}/>
        <Button title='show storage files' onPress={() => showFiles('/storage')}/>
        <Button title='show storage/amulated files' onPress={() => showFiles('/storage/emulated')}/>
      </View>
    );
  }
}

const styles = StyleSheet.create(
  {
    container: {
      flex: 1,justifyContent: 'center',alignItems: 'center'
    },});

当我按下“显示存储文件”按钮时,控制台会记录我:

日志文件

LOG {"ctime": null,"isDirectory": [Function isDirectory],"isFile": [Function isFile],"mtime": 2021-03-21T21:02:49.000Z,“名称”:“0123-4567”,“路径”:“/storage/0123-4567”,“大小”:131072}

LOG {"ctime": null,"mtime": 2021-03-21T21:01:52.000Z,"name": "emulated","path": "/storage/emulated","size": 4096}
LOG {"ctime": null,"mtime": 2021-03-21T20:54:25.000Z,"name": "sdcard0","path": "/storage/sdcard0","size": 4096}

LOG {"ctime": null,"name": "self","path": "/storage/self","size": 60}

但是当我按下“显示存储/模拟文件”时,我得到了:

LOG [错误:尝试获取空数组的长度]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。