如何使用FileProvider使用多个提供程序

时间:2017-06-23 18:32:16

标签: java android react-native react-native-android

我是Android开发的新手,我刚开始使用React Native。

我正在使用两个使用FileProvider的npm包。

第一个:

<provider
  android:name="android.support.v4.content.FileProvider"
  android:authorities="com.reactlibrary.provider"
  android:exported="false"
  android:grantUriPermissions="true">
    <meta-data
      android:name="android.support.FILE_PROVIDER_PATHS"
      android:resource="@xml/filepaths" />
</provider>

第二个:

<provider>
  android:name="android.support.v4.content.FileProvider"
  android:authorities="com.imagepicker.provider"
  android:exported="false"
  android:grantUriPermissions="true">
  <meta-data
    android:name="android.support.FILE_PROVIDER_PATHS"
    android:resource="@xml/provider_paths" />
</provider>

并且在调用需要FileProvider的操作时,我收到错误:

--------- beginning of crash
06-23 11:30:30.879 32664 32664 E AndroidRuntime: FATAL EXCEPTION: main
06-23 11:30:30.879 32664 32664 E AndroidRuntime: Process: com.swipes, PID: 32664
06-23 11:30:30.879 32664 32664 E AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.XmlResourceParser android.content.pm.PackageItemInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)' on a null object reference
06-23 11:30:30.879 32664 32664 E AndroidRuntime:        at android.support.v4.content.FileProvider.parsePathStrategy(FileProvider.java:583)
06-23 11:30:30.879 32664 32664 E AndroidRuntime:        at android.support.v4.content.FileProvider.getPathStrategy(FileProvider.java:557)
06-23 11:30:30.879 32664 32664 E AndroidRuntime:        at android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:399)
06-23 11:30:30.879 32664 32664 E AndroidRuntime:        at com.reactlibrary.RNReactNativeDocViewerModule$FileDownloaderAsyncTask.onPostExecute(RNReactNativeDocViewerModule.java:213)
06-23 11:30:30.879 32664 32664 E AndroidRuntime:        at com.reactlibrary.RNReactNativeDocViewerModule$FileDownloaderAsyncTask.onPostExecute(RNReactNativeDocViewerModule.java:176)
06-23 11:30:30.879 32664 32664 E AndroidRuntime:        at android.os.AsyncTask.finish(AsyncTask.java:667)
06-23 11:30:30.879 32664 32664 E AndroidRuntime:        at android.os.AsyncTask.-wrap1(AsyncTask.java)
06-23 11:30:30.879 32664 32664 E AndroidRuntime:        at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:684)
06-23 11:30:30.879 32664 32664 E AndroidRuntime:        at android.os.Handler.dispatchMessage(Handler.java:102)
06-23 11:30:30.879 32664 32664 E AndroidRuntime:        at android.os.Looper.loop(Looper.java:154)
06-23 11:30:30.879 32664 32664 E AndroidRuntime:        at android.app.ActivityThread.main(ActivityThread.java:6121)
06-23 11:30:30.879 32664 32664 E AndroidRuntime:        at java.lang.reflect.Method.invoke(Native Method)
06-23 11:30:30.879 32664 32664 E AndroidRuntime:        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
06-23 11:30:30.879 32664 32664 E AndroidRuntime:        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)

我怎么解决这个问题?

修改

我尝试为FileProvider创建一个新类,但它仍会导致相同的错误。这是我的新代码

<provider
  android:name=".FileProviderClass"
  android:authorities="com.reactlibrary.provider"
  android:exported="false"
  android:grantUriPermissions="true">
    <meta-data
      android:name="android.support.FILE_PROVIDER_PATHS"
      android:resource="@xml/filepaths" />
</provider>

和The Class

package com.reactlibrary;

public class FileProviderClass extends android.support.v4.content.FileProvider {
} 

1 个答案:

答案 0 :(得分:0)

  

我使用了两个都使用FileProvider的npm包

如果没有Java和明显的更改,那将无法工作。

  

并且在调用需要FileProvider的操作时,我收到错误

您只有一个FileProvider。我不能说这两个中的哪一个赢了#34;但是这个错误来自于为另一个创建Uri的请求。

最简单的解决方案是用其他东西替换其中一个npm包。