我正在尝试使用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
答案 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