在脱机同步到Azure移动服务期间发生NullReferenceException

时间:2015-05-26 20:58:16

标签: azure-mobile-services xamarin.forms

我正在尝试使用azure移动服务离线同步到桌面。我的Xamarin表格版本是1.4.2.6359。

我尝试使用readyState == 4 OnCreate方法测试我的代码。所有准备步骤,例如MainActivity初始化,MobileServiceClient初始化,MobileServiceSQLiteStore创建等都可以。

当我尝试拨打SyncTable时,我收到了PullAsync。我使用移动设备上的Package Capture App捕获包。该请求将转至Azure Mobile服务,并成功返回正确的json数据。

当我在Xamarin Android项目(而不是Xamarin表单)中尝试相同的代码时,它运行正常。

重现此问题。 只需创建Xamarin Form(Portable)项目并使用我的代码。

我的代码

NullReferenceException

参考文献:
http://azure.microsoft.com/en-us/documentation/articles/mobile-services-xamarin-android-get-started-offline-data/
http://blogs.msdn.com/b/carlosfigueira/archive/2014/04/07/deep-dive-on-the-offline-support-in-the-azure-mobile-service-managed-client-sdk.aspx

1 个答案:

答案 0 :(得分:0)

我得到了这个案子的解决方案 据我所知,这就是正在发生的事情。在加载应用程序期间,我致电PullAsync。它是异步调用,在此调用期间,应用程序继续加载其他组件。实际NullReferenceException来自OnPrepareOptionsMenu函数(Xamarin.Forms.Platform.Android.AndroidActivity.OnPrepareOptionsMenu)。异常发生在其他线程上,线程就会死掉。这就是我无法从主线程获得堆栈跟踪的原因 此NullReferenceException问题与 Azure移动服务完全无关。

我覆盖OnPrepareOptionsMenu中的MainActivity并将try-catch块添加到基类函数调用。问题已经解决了。这是我在MainActivity课程中的代码。

public override bool OnPrepareOptionsMenu(IMenu menu) {
    try {
        // I am always getting menu.HasVisibleItems = false in my app
        if (menu != null && menu.HasVisibleItems) {
            // Exception is happening when the following code is executed
            var result = base.OnPrepareOptionsMenu(menu);
            return result;
        }
    }
    catch{      
    }
    return true;
}

我真的不明白为什么会这样。如果您对此案例和更好的解决方案有更好的理解,请指出我。

我认为我的问题与此相同:http://forums.xamarin.com/discussion/23579/exception-whilte-trying-to-open-activity-from-xamarin-forms-page