在使用Azure Mobile Services Android SDK进行离线同步时,是否需要在需要访问某些表的每个Activity中调用MobileServiceSyncContext.initialize?如果是这样,为什么?本地数据库不应只初始化一次?我做错了吗?每次调用方法初始化时,即使它们已经存在,它也会尝试再次创建所有表,对我而言,它并不是那么好。有没有什么方法可以初始化syncContext一次或至少避免每次初始化syncContext时运行sql脚本的框架创建表?
谢谢!
PS:我是Android开发的新手,所以要好看:)。
答案 0 :(得分:0)
根据您的描述,根据我的理解,您似乎已按照以下某些文档和示例使用离线同步数据功能创建应用。
根据我的经验和根据适用于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