我是否需要在每个Activity中调用MobileServiceSyncContext.initialize?

时间:2017-02-18 23:57:30

标签: android azure-mobile-services azure-android-sdk

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

谢谢!

PS:我是Android开发的新手,所以要好看:)。

2 个答案:

答案 0 :(得分: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
  3. 根据我的经验和根据适用于Android的Azure移动应用SDK的javadocs,我认为您可以尝试使用下面的MobileServiceSyncContext.isInitalized方法添加代码,以便根据{{MobileServiceSyncContext初始化状态进行检查3}}如下,避免重复初始化操作。

    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();
    }
    

答案 1 :(得分:0)

以下细节可能有助于解决问题。对于MobileServiceClient,您需要Application的上下文,而不是每个Activity的上下文。因此,您不必为每个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