我正在使用react-native构建应用程序,但遇到了一个奇怪的错误。我正在使用一个名为react-native-fs的react本机库来读取文件系统上的音频文件,但是该插件似乎无法对任何音频文件进行操作,尽管它适用于文本文件。我在Android Studio中调试了我的android应用,并将错误跟踪到以下功能:
private InputStream getInputStream(String filepath) throws IORejectionException
{
Uri uri = getFileUri(filepath);
InputStream stream;
try
{
stream = reactContext.getContentResolver().openInputStream(uri);
}
catch (FileNotFoundException ex)
{
throw new IORejectionException("ENOENT", "ENOENT: no such file or directory, open '" + filepath + "'");
}
if (stream == null)
{
throw new IORejectionException("ENOENT", "ENOENT: could not open an input stream for '" + filepath + "'");
}
return stream;
}
具体来说,当filePath参数指向音频文件(例如.wav文件)时,openInputStream方法将抛出FileNotFoundException,而当指向相同位置的文本文件时,则不会抛出FileNotFoundException。我已经确保我具有WRITE_EXTERNAL_STORAGE和READ_EXTERNAL_STORAGE权限,并且我已请求Android 23+的权限。而且我也确定文件确实存在。这是我的监视窗口的屏幕截图,其中显示了确切的错误以及音频文件和文本文件的存在检查结果:
具体来说,该异常将引发以下行:
stream = reactContext.getContentResolver()。openInputStream(uri);
这是FileNotFoundException的完整堆栈跟踪:
libcore.io.IoBridge.open(IoBridge.java:452),
java.io.FileInputStream.<init>(FileInputStream.java:76),
java.io.FileInputStream.<init>(FileInputStream.java:103),
android.content.ContentResolver.openInputStream(ContentResolver.java:660),
com.rnfs.RNFSManager.getInputStream(RNFSManager.java:101),
com.rnfs.RNFSManager.readFile(RNFSManager.java:214),
java.lang.reflect.Method.invoke(Native Method),
com.facebook.react.bridge.JavaMethodWrapper.invoke(JavaMethodWrapper.java:372),
com.facebook.react.bridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:160),
com.facebook.react.bridge.queue.NativeRunnable.run(Native Method),
android.os.Handler.handleCallback(Handler.java:739),
android.os.Handler.dispatchMessage(Handler.java:95),
com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:29),
android.os.Looper.loop(Looper.java:148), com.facebook.react.bridge.queue.MessageQueueThreadImpl$3.run(MessageQueueThreadImpl.java: 192),
java.lang.Thread.run(Thread.java:818)
任何帮助将不胜感激。谢谢