【问题标题】:Attempt to invoke virtual method 'android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData尝试调用虚拟方法 'android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData
【发布时间】:2018-01-19 20:28:07
【问题描述】:

从我的 Android 应用拍照时出现异常。我使用媒体插件https://github.com/jamesmontemagno/MediaPlugin

   var file = await CrossMedia.Current.TakePhotoAsync(new StoreCameraMediaOptions
                        {
                            PhotoSize = PhotoSize.Medium,
                            Directory = "Sample",
                            Name = "test.jpg"
                        }); 

{Java.Lang.NullPointerException: 尝试调用虚方法 'android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)' 在空对象引用上 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] 在 :0 中 Java.Interop.JniEnvironment+StaticMethods.CallStaticObjectMethod (Java.Interop.JniObjectReference 类型,Java.Interop.JniMethodInfo 方法,Java.Interop.JniArgumentValue* args) [0x00069] in :0 在 Android.Runtime.JNIEnv.CallStaticObjectMethod (System.IntPtr jclass, System.IntPtr jmethod, Android.Runtime.JValue* parms) [0x0000e] in :0 在 Android.Support.V4.Content.FileProvider.GetUriForFile (Android.Content.Context 上下文,System.String 权限, Java.IO.File 文件)[0x00078] in :0
在 Plugin.Media.MediaPickerActivity.OnCreate (Android.OS.Bundle savedInstanceState) [0x0023f] 在 C:\projects\mediaplugin\src\Media.Plugin.Android\MediaPickerActivity.cs:162

--- 从先前抛出异常的位置结束堆栈跟踪--- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] 在 :0 中 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task 任务) [0x0003e] in :0 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task 任务) [0x00028] in :0 在 System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task 任务) [0x00008] in :0 在 System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult () [0x00000] 在 :0 处 Plugin.Media.MediaImplementation+d__16.MoveNext() [0x000c7] 在 C:\projects\mediaplugin\src\Media.Plugin.Android\MediaImplementation.cs:119

--- 从先前抛出异常的位置结束堆栈跟踪--- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] 在 :0 中 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task 任务) [0x0003e] in :0 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task 任务) [0x00028] in :0 在 System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task 任务) [0x00008] in :0 在 System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult () [0x00000] 在 :0 处 Propznet.Mobile.Features.Inventory.Helpers.UnitCreateUpdateViewModelBase+d.MoveNext () [0x00091] 在 E:\Propznet Mobile\Source\Propznet.Mobile\Propznet.Mobile.Features.Inventory\Helpers\UnitCreateUpdateViewModelBase.cs:322 --- 托管 Java.Lang.NullPointerException 堆栈跟踪结束 --- java.lang.NullPointerException:尝试调用虚拟方法 'android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)' 在空对象引用上 android.support.v4.content.FileProvider.parsePathStrategy(FileProvider.java:583) 在 android.support.v4.content.FileProvider.getPathStrategy(FileProvider.java:557) 在 android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:399) 在 md5f1b52d9f1d5d1981437e7e130649468a.MediaPickerActivity.n_onCreate(Native 方法)在 md5f1b52d9f1d5d1981437e7e130649468a.MediaPickerActivity.onCreate(MediaPickerActivity.java:42) 在 android.app.Activity.performCreate(Activity.java:6259) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1130) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2382) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2493) 在 android.app.ActivityThread.-wrap11(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1357) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5459) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) }

【问题讨论】:

  • 您应用的目标版本是什么?您是否在 android 项目的清单中添加了元数据并创建了一个名为“file_path.xml”的新 xml?
  • Android 7.0 .file_path?
  • ANDROID N 部分检查您使用的库的自述部分。
  • 这些 cmets 解决了您的问题吗?
  • 是的,它的工作原理

标签: android xamarin xamarin.android


【解决方案1】:

As james montemagno mentioned

您必须将目标版本设置为 API 23+ 并针对 API 进行编译 23+:

【讨论】:

    【解决方案2】:

    在 ANDROID N 部分查看您使用的库的自述文件(如上面 cmets 中的 Grace Feng 所述)。

    【讨论】:

      【解决方案3】:

      我有同样的错误,当我在发布模式下运行应用程序时,在调试中它是好的。因此,我在 Android 选项页面上将 Android 项目的属性从 SDK Assemblies 切换为 None。它解决了我的问题。

      【讨论】:

        猜你喜欢
        • 2023-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-03
        相关资源
        最近更新 更多