如何使用同步适配器将数据从服务器同步到android SQLite?

时间:2016-12-23 22:11:52

标签: android sqlite android-sqlite android-syncadapter

1 - 创建了同步适配器以在后台同步客户端和服务器数据。它作为与应用程序不同的进程执行。

2 - SQLite不能由多个进程编写

考虑到这两点,我应该如何将从服务器解析的数据写入sqlite数据库? ContentProvider会在这种情况下工作吗?这是唯一的选择吗?

PS。我在这里找到的所有答案都是关于从多个线程读/写的。在这种情况下,Android实现(使用SQLiteOpenHelper)将序列化对单个数据库连接的访问​​。但问题是,同步适配器作为与应用程序不同的进程运行,因此无法通过Java代码进行同步。

1 个答案:

答案 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]));
        }
    }