2015-05-17 2 views
0

Я создал функцию для входа в систему с помощью Facebook.Xamarin.Auth OAuth2Authenticator Facebook NullReferenceException

public void Login() 
{ 
    var ctx = Forms.Context as MainActivity; 
    var accounts = 
     new List<Account>(AccountStore.Create (ctx).FindAccountsForService (SERVICE)); 
    if (accounts.Count == 1) { 
     GetAccount (accounts [0]); 
     return; 
    } 

    var auth = new OAuth2Authenticator (
     clientId: FBID, 
     scope: string.Empty, 
     authorizeUrl: new Uri (AUTH_URL), 
     redirectUrl: new Uri (REDIRECT_URL)); 

    auth.Completed += (sender, eventArgs) => { 
     AccountStore.Create (ctx).Save (eventArgs.Account, "Facebook"); 
     GetAccount (eventArgs.Account); 
    }; 
    ctx.StartActivity (auth.GetUI (ctx)); 
} 

Дело в том, что после того как я ввожу свои учетные данные на странице входа в систему FB, создается исключение, прежде чем он достигнет Completed событие.
Я загрузил проект Xamarin.Auth от GitHub, пытаясь отладить программу, но, к сожалению, она не сломается на контрольной точке.

Caused by: JavaProxyThrowable: System.NullReferenceException: Object reference not set to an instance of an object 
at Xamarin.Auth.OAuth2Authenticator.OnRetrievedAccountProperties (System.Collections.Generic.IDictionary`2) [0x00017] in d:\Downloads\Xamarin.Auth-master\Xamarin.Auth-master\src\Xamarin.Auth\OAuth2Authenticator.cs:373 
at Xamarin.Auth.OAuth2Authenticator.OnRedirectPageLoaded (System.Uri,System.Collections.Generic.IDictionary`2,System.Collections.Generic.IDictionary`2) [0x00016] in d:\Downloads\Xamarin.Auth-master\Xamarin.Auth-master\src\Xamarin.Auth\OAuth2Authenticator.cs:282 
at Xamarin.Auth.WebRedirectAuthenticator.OnPageEncoun...[intentionally cut off]

Я сейчас борюсь с этой проблемой. Пожалуйста помоги!

+0

возможно дубликат [? Что такое NullReferenceException и как это исправить] (http://stackoverflow.com/questions/4660142/what-is- а-NullReferenceException-и-как-делать-я-Fix-It) –

ответ

0

Я нашел его! Это было сочетание обстоятельств.
Мой отладчик не останавливался на контрольных точках (не знаю почему).
В результате возникла проблема с тем, что я создал объект с помощью метода Login выше в методе OnCreate().
Затем я привязал EventHandler к событию этого объекта.
В тот момент, когда аутентификатор возвращается из своего намерения, Контекст, в котором был привязан мой объект, исчез.
Возможно, это немного расплывчато, чтобы понять, но, возможно, какой-то код прояснится дальше.

//Not working, causes the problem 
public class MyActivity { 
    MyAuthenticator auth; //the object containing Login(); 
    public void OnCreate() { 
     auth=new MyAuthenticator(); 
     auth.LoggedIn += blabla; 
    } 
    public void SomeMethod() { 
     auth.Login(); 
    } 
} 

Решение:

//Working, own scope 
public class MyActivity { 
    public void OnCreate() { 
     //ILB 
    } 
    public void SomeMethod() { 
     var auth=new MyAuthenticator(); 
     auth.LoggedIn += blabla; 
     auth.Login(); 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^