xamarin.forms - 当 Android 9 中 xamarin.forms 中的设备方向发生变化时,我收到 NullReferenceException
问题描述
在我使用 Xamarin.forms 开发的 android 应用程序中,每当我更改设备的方向时,我都会收到 NullReferenceException 并且应用程序在 Android 9 中崩溃。但在以前的 android 版本中,应用程序运行良好。没有崩溃。
这是 MainActivity.cs
namespace RSMapp.Droid
{
[Activity(Label = "FIRE", Icon = "@drawable/launcherIcon", Theme = "@style/splashscreen", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation, ScreenOrientation = ScreenOrientation.Portrait)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
internal static MainActivity Instance { get; private set; }
protected async override void OnCreate(Bundle savedInstanceState)
{
TryToGetPermissions();
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
base.Window.RequestFeature(WindowFeatures.ActionBar);
base.SetTheme(Resource.Style.MainTheme);
UserDialogs.Init(this);
base.OnCreate(savedInstanceState);
Instance = this;
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
CrossCurrentActivity.Current.Init(this, savedInstanceState);
Plugin.InputKit.Platforms.Droid.Config.Init(this, savedInstanceState);
UltimateXFSettup.Initialize(this);
LoadApplication(new App());
}
}
}
我尝试删除 ScreenOrientation = ScreenOrientation.Portrait,但存在问题。
在将方向纵向更改为横向后,在“输出”窗口中获取此信息
10-18 11:52:37.366 I/MultiWindowDecorSupport(19021): updateCaptionType >> DecorView@3acb272[MainActivity], isFloating: false, isApplication: true, hasWindowDecorCaption: false, hasWindowControllerCallback: true
10-18 11:52:37.366 D/MultiWindowDecorSupport(19021): setCaptionType = 0, DecorView = DecorView@3acb272[MainActivity]
10-18 11:52:37.373 D/ViewRootImpl@403bf69[MainActivity](19021): MSG_RESIZED_REPORT: frame=[0,0][2048,1536] ci=[0,48][0,0] vi=[0,48][0,0] or=2
10-18 11:52:37.399 D/ViewRootImpl@403bf69[MainActivity](19021): Relayout returned: old=[0,0][2048,1536] new=[0,0][2048,1536] result=0x23 surface={true 490213163008} changed=false
10-18 11:52:37.401 D/OpenGLRenderer(19021): eglDestroySurface = 0x7222da2700, 0x7222fb4000
10-18 11:52:37.402 D/OpenGLRenderer(19021): eglCreateWindowSurface = 0x7222da2700, 0x7222fb4010
Unhandled Exception:
System.NullReferenceException: Object reference not set to an instance of an object.
此代码中存在问题。
public override Resources Resources
{
get
{
if ((int)Build.VERSION.SdkInt >= 25)
{
Configuration config = new Configuration();
config.SetToDefaults();
Context context = CreateConfigurationContext(config);
Resources resources = context.Resources;
return resources;
}
else
{
Resources res = base.Resources;
Configuration config = new Configuration();
config.SetToDefaults();
res.UpdateConfiguration(config, res.DisplayMetrics);
return res;
}
}
}
我正在使用它来省略用户的系统级字体大小更改为应用程序。这给出了 Android 9 中的错误
解决方案
你可以试试这个:
删除ScreenOrientation = ScreenOrientation.Portrait
然后将其添加到您的MainActivity
:
public override void OnConfigurationChanged(Configuration newConfig)
{
base.OnConfigurationChanged(newConfig);
}
推荐阅读
- node.js - 接收错误:html-pdf:PDF 生成超时。Phantom.js 脚本没有退出。在 Firebase 云函数中
- c++ - 完美的前向返回类型,但带有 const
- azure - 为什么我的 Azure Cosmos DB SQL API 容器拒绝具有相同分区键值的多个项目?
- amazon-web-services - 创建 web 源模块 oracle apex 20.0
- xamarin.forms - 在轮播视图中调整每个图像的大小
- python - 将 numpy 数据类型转换为本机 python 数据类型的更简单方法
- c - 二叉搜索树和结构
- thymeleaf - Thymeleaf - 如何编写 Html 字符串文字?
- pine-script - 将自己的战略与另一个战略联系起来
- javascript - 在 html 中使用 Javascript 更改视频源,而无需仅刷新视频页面