如何使用同步适配器将数据从服务器同步到android SQLite?
1-创建同步适配器以在后台同步客户端和服务器数据。它作为与应用程序不同的进程执行 2-SQLite不能由多个进程写入 考虑到这两点,我应该如何将从服务器解析的数据写入sqlite数据库?ContentProvider在这种情况下可以工作吗?这是唯一的选择吗如何使用同步适配器将数据从服务器同步到android SQLite?,android,sqlite,android-sqlite,android-syncadapter,Android,Sqlite,Android Sqlite,Android Syncadapter,1-创建同步适配器以在后台同步客户端和服务器数据。它作为与应用程序不同的进程执行 2-SQLite不能由多个进程写入 考虑到这两点,我应该如何将从服务器解析的数据写入sqlite数据库?ContentProvider在这种情况下可以工作吗?这是唯一的选择吗 另外,我在这里找到的所有答案都是关于多线程的读/写。在这种情况下,Android实现(使用SQLiteOpenHelper)将序列化对单个db连接的访问。不过,我的问题是,同步适配器作为与应用程序不同的进程运行,因此无法通过Java代码进行同
另外,我在这里找到的所有答案都是关于多线程的读/写。在这种情况下,Android实现(使用SQLiteOpenHelper)将序列化对单个db连接的访问。不过,我的问题是,同步适配器作为与应用程序不同的进程运行,因此无法通过Java代码进行同步。ContentProvider将完全适合您的目的。它将为您处理IPC。 我是这样做的:
@Override
public void onPerformSync(Account account, Bundle bundle, String s, ContentProviderClient contentProviderClient, SyncResult syncResult) {
try {
ResponseModel response = getAllData(deviceId);
if (response != null) {
addDataToDatabase(contentProviderClient, response);
}
} catch (RemoteException | RetrofitError exception) {
e.printStackTrace();
}
}
private void addDataToDatabase(ContentProviderClient contentProviderClient, ResponseModel response) throws RemoteException {
addTasks(contentProviderClient, response);
}
private void addTasks(ContentProviderClient contentProviderClient, ResponseModel response) throws RemoteException {
if (response.getTasks() != null) {
int size = response.tasksContentValues().size();
contentProviderClient.bulkInsert(TaskTable.CONTENT_URI,
response.tasksContentValues().toArray(new ContentValues[size]));
}
}
我是否可以仅在后台进程中使用ContentProvider,并在应用程序中直接使用SqliteDatabase?或者我也应该在内部使用ContentProvider?如果要使用SyncAdapter,它必须有ContentProvider。但是您可以只使用这里提到的虚拟ContentProvider:这就是问题所在,我已经在使用SyncAdapter和虚拟ContentProvider了。但由于SyncAdapter是作为一个不同的进程启动的,所以对数据库的访问不同步,因此在批处理执行的同时使用应用程序时,我会遇到各种各样的错误。