W8.1现场SDK 5.6 - LiveAuthClient.InitializeAsync S

2019-10-20 12:02发布

我正在开发一个Windows应用程序8.1(XAML / C#)与MVVM光。

我曾将我的LiveID里面的代码只是为了调试,但现在是时候做登录。

目前我只能和这一段代码:

this.authClient = new LiveAuthClient();
LiveLoginResult loginResult = await this.authClient.InitializeAsync(scopes);

它不断给我的错误:

类型“System.NullReferenceException”的异常出现在mscorlib.dll,但在用户代码中没有处理

附加信息:对象没有设置为一个对象的一个​​实例。

源代码:

    private static readonly string[] scopes =
            new string[] { 
               "wl.signin", 
               "wl.basic", 
               "wl.offline_access"};

    private LiveAuthClient authClient;
    private LiveConnectClient liveClient;


    public DashboardView()
    {
        this.InitializeComponent();
    }

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        base.OnNavigatedTo(e);
        this.InitializePage();
    }

    private async void InitializePage()
    {
        this.authClient = new LiveAuthClient();
        LiveLoginResult loginResult = await this.authClient.InitializeAsync(scopes);
        if (loginResult.Status == LiveConnectSessionStatus.Connected)
        {
            if (this.authClient.CanLogout)
            {
                this.btnLogin.Content = "Sign Out";
            }
            else
            {
                this.btnLogin.Visibility = Visibility.Collapsed;
            }

            this.liveClient = new LiveConnectClient(loginResult.Session);
            this.GetMe();
        }
    }

    private async void btnLogin_Click(object sender, RoutedEventArgs e)
    {
        if (this.btnLogin.Content.ToString() == "Sign In")
        {
            LiveLoginResult loginResult = await this.authClient.LoginAsync(scopes);
            if (loginResult.Status == LiveConnectSessionStatus.Connected)
            {
                if (this.authClient.CanLogout)
                {
                    this.btnLogin.Content = "Sign Out";
                }
                else
                {
                    this.btnLogin.Visibility = Visibility.Collapsed;
                }

                this.liveClient = new LiveConnectClient(loginResult.Session);
                this.GetMe();
            }
        }
        else
        {
            this.authClient.Logout();
            this.btnLogin.Content = "Sign In";
        }
    }

    private async void GetMe()
    {
        Task<LiveOperationResult> task = this.liveClient.GetAsync("me");

        var result = await task;
        dynamic profile = result.Result;
    }

我甚至尝试了一些不同的范围,这是我的最后一次尝试。

提前致谢。

Answer 1:

至于我已经注意到在调用时出现问题在我的情况LiveAuthClient.LoginAsync通过接口和/或类库。 为了解决这个问题,我已经使用中介Messenger类从MVVMLight库从与商店相关的应用程序进入项目登录。 要应用与存储关联按照本文http://www.codeproject.com/Articles/708863/Developer-Guide-to-Write-Windows-Store-App-usi 。

我的观点模型是独立的(便携式)库和它们引用的合同库,包含了服务接口,从而没有得到登陆NullReferenceException创建消息类。

该解决方案是WP8.1,但由于平台共享相同的SDK,它应该工作。 在示例代码中,我使用Messenger和SimpleIoc从MVVM光。

消息类:

public class OneDriveLoginRequestMessage
{
    public Action CallbackAction { get; set; }
}

注册比如你的OneDriveClient (或无论你在呼唤你的包装)我使用MVVMLight的SimpleIoc

SimpleIoc.Default.Register(() => new OneDriveClient());

里面App.xaml.cs在方法文件RootFrame_FirstNavigated添加以下代码登录:

Messenger.Default.Register<OneDriveLoginRequestMessage>(this, async (msg) =>
{
    await SimpleIoc.Default.GetInstance<OneDriveClient>().Login();
    if (msg != null && msg.CallbackAction != null)
    {
        msg.CallbackAction();
    }
});

最后,从视图模型登录:

private void NavigateToOneDrivePage()
{
    MessengerInstance.Send(new OneDriveLoginRequestMessage
    {
        CallbackAction = async () =>
        {
            // after login continue here...
            var client = SimpleIoc.Default.GetInstance<OneDriveClient>();
        }
    });
}

我希望解决您的问题。

最佳,男



文章来源: W8.1 Live SDK 5.6 - LiveAuthClient.InitializeAsync System.NullReferenceException