Android 是否需要在每个活动中调用MobileServiceSyncContext.initialize?

Android 是否需要在每个活动中调用MobileServiceSyncContext.initialize?,android,azure-mobile-services,azure-android-sdk,Android,Azure Mobile Services,Azure Android Sdk,使用Azure Mobile Services Android SDK的脱机同步时,是否需要在需要访问某些表的每个活动中调用MobileServiceSyncContext.initialize?若然,原因为何?本地数据库不应该只初始化一次?我做错了吗?每次调用initialize方法时,它都会尝试再次创建所有表,即使它们已经存在,但对我来说这并不太好。是否有任何方法可以只初始化syncContext一次,或者至少避免框架在每次初始化syncContext时运行sql脚本来创建表 谢谢大家! P

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

谢谢大家!


PS:我是Android开发的新手,所以要友善:)

根据您的描述,根据我的理解,您似乎已经按照下面的一些文档和示例使用离线同步数据功能创建了应用程序

  • 博客:
  • 样本:
  • 根据我的经验&根据Azure Mobile Apps SDK for Android的版本,我认为您可以尝试使用下面的方法添加代码,以检查
    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();
    }
    
    MobileServiceSyncContext-syncContext=mClient.getSyncContext();
    if(syncContext.isnitialized()){
    Map tableDefinition=新建HashMap();
    tableDefinition.put(“id”,ColumnDataType.String);
    tableDefinition.put(“text”,ColumnDataType.String);
    tableDefinition.put(“完成”,ColumnDataType.Boolean);
    tableDefinition.put(“\u版本”,ColumnDataType.String);
    localStore.defineTable(“ToDoItem”,tableDefinition);
    初始化(localStore,handler).get();
    }
    
    根据您的描述,根据我的理解,您似乎已经按照下面的一些文档和示例使用脱机同步数据功能创建了应用程序

  • 博客:
  • 样本:
  • 根据我的经验&根据Azure Mobile Apps SDK for Android的版本,我认为您可以尝试使用下面的方法添加代码,以检查
    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();
    }
    
    MobileServiceSyncContext-syncContext=mClient.getSyncContext();
    if(syncContext.isnitialized()){
    Map tableDefinition=新建HashMap();
    tableDefinition.put(“id”,ColumnDataType.String);
    tableDefinition.put(“text”,ColumnDataType.String);
    tableDefinition.put(“完成”,ColumnDataType.Boolean);
    tableDefinition.put(“\u版本”,ColumnDataType.String);
    localStore.defineTable(“ToDoItem”,tableDefinition);
    初始化(localStore,handler).get();
    }
    
    以下细节可能有助于找到解决方案。对于MobileServiceClient,您需要应用程序的上下文,而不是每个活动的上下文。因此,您不必为每个活动初始化syncContext。可能您可以使用Gson()将其保存在SharedReferences中

    MobileServiceClient mClient=新的MobileServiceClient(
    “”,//替换为站点URL
    这是我的本意您的应用程序上下文
    

    资料来源:[1]:

    也许下面的细节有助于解决问题。对于MobileServiceClient,您需要应用程序的上下文,而不是每个活动的上下文。因此,您不必为每个活动初始化syncContext。可能您可以使用Gson()将其保存在SharedReferences中

    MobileServiceClient mClient=新的MobileServiceClient(
    “”,//替换为站点URL
    这是我的本意您的应用程序上下文
    
    资料来源:[1]: