从 DialogFragment 调用 FileProvider 时出错 - 空引用对象,

Error with calling FileProvider from DialogFragment - null object of reference,

我正在尝试修复此错误,但我有点看不出它的来源。

从创建新用户的片段中,我调用了另一个片段对话框(在 ImageButton Click 上),它使我能够从相机或图库中挑选照片。画廊工作正常,但相机没有。在这一行中:

 Uri photoUri = FileProvider.getUriForFile(globalContext, getActivity().getPackageName() + ".provider", getCameraFile());

我收到这个错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)' on a null object reference

所有数据都正确显示(我查看日志)。

问题出在哪里?

此致, 格热戈日

编辑:

完整堆栈跟踪:

FATAL EXCEPTION: main
                                                                             Process: com.myapp.myapp, PID: 27523
                                                                             java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)' on a null object reference
                                                                                 at android.support.v4.content.FileProvider.parsePathStrategy(FileProvider.java:583)
                                                                                 at android.support.v4.content.FileProvider.getPathStrategy(FileProvider.java:557)
                                                                                 at android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:399)
                                                                                 at com.myapp.myapp.utils.PictureDialog.onTakePhoto(PictureDialog.java:80)
                                                                                 at com.myapp.myapp.utils.PictureDialog_ViewBinding.doClick(PictureDialog_ViewBinding.java:32)
                                                                                 at butterknife.internal.DebouncingOnClickListener.onClick(DebouncingOnClickListener.java:22)
                                                                                 at android.view.View.performClick(View.java:5184)
                                                                                 at android.view.View$PerformClick.run(View.java:20893)
                                                                                 at android.os.Handler.handleCallback(Handler.java:739)
                                                                                 at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                 at android.os.Looper.loop(Looper.java:145)
                                                                                 at android.app.ActivityThread.main(ActivityThread.java:5940)
                                                                                 at java.lang.reflect.Method.invoke(Native Method)
                                                                                 at java.lang.reflect.Method.invoke(Method.java:372)
                                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1389)
                                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1184)

FileProvider 在清单中找不到 android:authorities 值等于 getActivity().getPackageName() + ".provider"<provider> 元素。具体来说,此代码会为 info:

生成 null
final ProviderInfo info = context.getPackageManager()
            .resolveContentProvider(authority, PackageManager.GET_META_DATA);

(其中 contextgetUriForFile() 的第一个参数,authoritygetUriForFile() 的第二个参数)

确保您提供的权限字符串与您的 <provider> 元素匹配。