当我为我的Xamarin.Forms Android项目启动调试会话时,它会立即崩溃,并显示以下错误消息:
java.lang.RuntimeException:无法获取提供者mono.MonoRuntimeProvider:java.lang.NullPointerException:尝试在空对象引用上调用虚方法'java.lang.String java.io.File.getAbsolutePath()'
我正在使用Shared Runtime和Fast Deploy,虽然停用它们似乎并不能解决我的问题。
但是,解决我的问题的方法是从设备手动卸载应用程序。然后它将适用于一个调试会话,但是一旦我启动下一个调试会话,就会返回相同的错误。
在我看来,如果它在以前的调试会话中安装,应用程序在某种程度上无法找到Mono Shared Runtime,但我不能为我的生活看到原因。
以下是尝试修复此类内容时要执行的步骤:
Mono Shared Runtime
但尝试删除所有这些都不会有害):
单声道共享运行时
Mono Android-x支持
Xamarin.Android API-X支持如果这些不能解决问题,您应该从错误日志中发布更多内容。我正在寻找的主要异常定义之后的几行来看堆栈跟踪,就像这样(主要是以at开头的行):
java.lang.RuntimeException: Unable to start activity ComponentInfo{plp.cs4b.thesis.drawitapp/plp.cs4b.thesis.drawitapp.PlayGame}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String plp.cs4b.thesis.drawitapp.Player.getName()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
使用Xamarin和Android时,错误可能并不总是异常似乎指向的位置。这就是为什么在这种情况下更深入地研究它的原因。
根据此处发现的另外两篇帖子:
Xamarin.Forms "App has stopped working" on android
Why does my Xamarin Android application suddenly require external storage permissions?
看起来你“可能”缺少外部存储权限,通常在AssemblyInfo.cs
文件中:
[assembly: UsesPermission(Android.Manifest.Permission.WriteExternalStorage)]
或者你可以在AndroidManifest.xml
文件中设置它。
或者作为第一个问题的作者发布了他的答案,他只是将安装位置更改为内部。
我建议这可能值得一试。
尝试删除项目中的所有“bin”和“obj”文件夹。然后清理并重建。