2017-02-18 54 views
1

在Azure Mobile Services Android SDK中使用脱机同步时,是否需要在每个需要访问某个表的Activity中调用MobileServiceSyncContext.initialize?如果是这样,为什么?本地数据库不应该只初始化一次?我做错了吗?每次调用初始化方法时,它都会尝试再次创建所有表,即使它们已经存在,对我而言,它并不是那么好。有什么办法可以初始化syncContext一次,或者至少避免每次syncContext初始化时运行sql脚本来创建表的框架?我是否需要在每个Activity中调用MobileServiceSyncContext.initialize?

谢谢!

PS:我在Android开发新手,所以是很好:)

回答

0

根据你的描述,根据我的理解,似乎你有遵循以下一些文件和样品用来创建您的应用程序脱机同步数据功能。

  1. 博客:Offline support in the Azure Mobile Services Android SDK
  2. 样品:https://github.com/Azure/mobile-services-samples/blob/master/TodoOffline/Android/blog20140807/app/src/main/java/com/example/blog20140807/ToDoActivity.java

按我的经验&根据Azure的移动应用SDK为Android的javadocs,我想你可以尝试使用方法MobileServiceSyncContext.isInitalized添加代码下面根据下面的sample code检查MobileServiceSyncContext初始化状态,以避免重复初始化操作。

MobileServiceSyncContext syncContext = mClient.getSyncContext(); 

if(syncContext.isInitalized()) { 

    Map<String, ColumnDataType> tableDefinition = new HashMap<String, ColumnDataType>(); 
    tableDefinition.put("id", ColumnDataType.String); 
    tableDefinition.put("text", ColumnDataType.String); 
    tableDefinition.put("complete", ColumnDataType.Boolean); 
    tableDefinition.put("__version", ColumnDataType.String); 

    localStore.defineTable("ToDoItem", tableDefinition); 
    syncContext.initialize(localStore, handler).get(); 
} 
0

也许下面的细节可以帮助解决方案。对于MobileServiceClient,您需要应用程序的上下文,而不是每个活动的上下文。所以,你不必为每个Activity初始化syncContext。可能你可以使用Gson()将它保存在SharedPreferences中。

MobileServiceClient mClient = new MobileServiceClient(
"<MobileAppUrl>",  // Replace with the Site URL 
this);     // Your application Context 

来源:[1]:https://docs.microsoft.com/en-us/azure/app-service-mobile/app-service-mobile-android-how-to-use-client-library

相关问题