Xamarin.Android Samsung 在 DatePickerDialog

问题描述

我有一个 UserHandler Singleton 类,我声明了一个这样的变量

class UserHandler
{
  ...
  public DatePickerDialog dialog = null;
  ...
}

然后在我的 MainActivity.cs 文件

using Android.App;
using Android.Content.PM;
using Android.OS;
using Android.Runtime;
using Android.Support.Design.Widget;
using Android.Support.V7.App;
using Android.Text;
using Android.Views;
using Android.Widget;
using Java.Interop;
using java.lang;
using System;
using System.Collections.Generic;
using System.Globalization;
using AlertDialog = Android.Support.V7.App.AlertDialog;
using Exception = System.Exception;
class MainActivity
{
  private readonly UserHandler U_Handler = UserHandler.GetInstance;
  ...
  protected override void OnCreate(Bundle savedInstanceState)
  {
    base.OnCreate(savedInstanceState);
    Xamarin.Essentials.Platform.Init(this,savedInstanceState);
    SetContentView(Resource.Layout.activity_main);
    ...
    U_Handler.dialog = new DatePickerDialog(this);
    ...
}

当我在我的设备(Oppo,Android 8.1.0)上运行它时,它可以正常工作,但是当我在其他设备(Samsung,Android 6.0.1)上尝试它时,它崩溃了,在调试时,它显示了这一点>

**java.lang.NoSuchMethodError:** 'no non-static method "Landroid/app/DatePickerDialog;.<init>(Landroid/content/Context;)V"'

如何解决这个问题? 我应该使用第 3 方库吗?

解决方法

因为DatePickerDialog(Context context)中添加了构造函数API level 24,所以在Samsung,Android 6.0.1中运行时会抛出Java.Lang.NoSuchMethodError异常。

SDK 版本小于 24 时可以判断调用使用旧 API,大于 24 时使用新 API。

您可以查看的 api DatePickerDialog