当Android 9中的xamarin.forms中的设备方向发生变化时,我得到了NullReferenceException

当Android 9中的xamarin.forms中的设备方向发生变化时,我得到了NullReferenceException,xamarin.forms,xamarin.android,Xamarin.forms,Xamarin.android,在我使用Xamarin.forms开发的android应用程序中,每当我改变设备的方向时,我都会收到一个NullReferenceException,应用程序会在android 9中崩溃。但在之前的android版本中,该应用程序运行得非常好。没有撞车 这里是MainActivity.cs namespace RSMapp.Droid { [Activity(Label = "FIRE", Icon = "@drawable/launcherIcon", Theme = "@style/

在我使用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.肖像,但问题仍然存在

将方向纵向更改为横向后,在输出窗口中获取此项

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.肖像

然后将其添加到您的
main活动中:

public override void OnConfigurationChanged(Configuration newConfig)
    {
        base.OnConfigurationChanged(newConfig);
    }

不工作。如果我将手机设置为自动旋转并更改方向,app get crash.@D.madushanka如果在Mainactivity的onCreate方法中设置断点,请查看在更改方向时它是否中断orientation@D.madushanka但仍然崩溃?如果它进入OnConfiguration Changed方法?它进入OnConfiguration Changed方法,我想我发现了问题所在。我会更新。@D.madushanka这真的很奇怪,你能分享一个测试项目吗?我会在我这边测试它。