CrossCurrentActivity имеет нулевую зависимость, даже если она инициализирована, а не нулевая в приложении - PullRequest
1 голос
/ 23 января 2020

В моем проекте Xamarin.Forms я использую Plugin.FirebaseAuth для входа по номеру телефона.

Работает нормально для проекта iOS, но для Android вызов VerifyPhoneNumberAsyn c ()

await CrossFirebaseAuth.Current.PhoneAuthProvider.VerifyPhoneNumberAsync(CrossFirebaseAuth.Current.Instance, user.PhoneNumber);

выдает "текущая активность равна нулю" из CrossCurrentActivity.Current.Activity ?? регистрация https://github.com/f-miyu/Plugin.FirebaseAuth/blob/master/Plugin.FirebaseAuth.Android/PhoneAuthProviderWrapper.cs

Plugin.CurrentActivity инициализируется (ранее в MainActivity.cs, но теперь в MainApplication.cs в соответствии с рекомендациями) без ошибок согласно инструкциям в https://github.com/jamesmontemagno/CurrentActivityPlugin:

MainActivity.cs OnCreate ():

Plugin.CurrentActivity.CrossCurrentActivity.Current.Init(this, bundle);

MainApplication.cs OnCreate ():

Plugin.CurrentActivity.CrossCurrentActivity.Current.Init(this);

Я получаю ту же нулевую ошибку когда я вызываю VerifyPhoneNumberAsyn c () независимо от того, где я инициализирую CurrentActivity.

Добавление строки

var activity = CrossCurrentActivity.Current.Activity ?? throw new NullReferenceException("current activity is null"); 

в мой файл MainActivity.cs напрямую не вызывает ошибок.

Есть ли что-то еще, что я мог бы пропустить?

Версии зависимостей

  • Plugin.FirebaseAuth 1.1.2
  • Xamarin.Forms 4.4.0.991265

Ответы [ 2 ]

0 голосов
/ 30 января 2020

Если плагин не работает в вашем проекте.

Вы можете попробовать следующий код

//current activity
var currentActivity= Android.App.Activity;

//current context
var currentContext = Android.App.Application.Context;
0 голосов
/ 23 января 2020

Вместо метода init просто присвойте MainActivity текущей активности плагина.

Попробуйте установить нижеприведенное решение для установки текущей активности.

Plugin.CurrentActivity.CrossCurrentActivity.Current.Init(this, bundle);

Заменить на

CrossCurrentActivity.Current.Activity = this;

У меня была такая же проблема. Я исправил эту проблему, применив такое же рабочее решение в моем случае.

...