1 - 创建了同步适配器以在后台同步客户端和服务器数据。它作为与应用程序不同的进程执行。
2 - SQLite不能由多个进程编写
考虑到这两点,我应该如何将从服务器解析的数据写入sqlite数据库? ContentProvider会在这种情况下工作吗?这是唯一的选择吗?
PS。我在这里找到的所有答案都是关于从多个线程读/写的。在这种情况下,Android实现(使用SQLiteOpenHelper)将序列化对单个数据库连接的访问。但问题是,同步适配器作为与应用程序不同的进程运行,因此无法通过Java代码进行同步。
答案 0 :(得分:0)
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]));
}
}