android - 如何为离线支持构建 SQLite 数据库?
问题描述
我正在尝试在我的应用程序中提供离线支持,因此用户也可以在没有互联网的情况下阅读信息。我正在创建一个应用程序来显示来自不同公司的一些包。我已经在远程服务器中创建了我的 API 和以下数据库。
companies -- id, name
duration-- id, type (type could be, monthly, weekly, yearly)
packages -- id, name, company_id, duration_id
我的 API 返回结果为
{
"id":3,
"package":"premimum",
"company_id":6,
"duration_id": 5,
}
现在我想将从 API 获取的所有信息存储到本地数据库 SQLite。现在我想知道我应该如何构建我的本地数据库?我的结构应该与远程数据库相同吗?我应该在本地数据库SQLite中创建三个表一样吗?
companies -- id, name
duration-- id, type (type mean package duration, monthly, yearly, daily)
packages -- id, name, company_id, duration_id
如果是,那么id
在本地数据库和远程数据库中会有所不同,因为两个数据库都会生成自己的primary key
我该如何处理?或者你可以建议我保持相同的ID?还是我应该保持id
不同?
解决方案
您不一定需要本地数据库上的内部 ID 来匹配云服务器数据库的内部 ID。例如,如果您使用 Parse 作为云服务器,Parse 将生成自己的内部对象 ID。您的应用不需要知道它们。
话虽如此,我强烈建议您在本地对象和云对象之间有一个共同的关键属性,以便您可以保持它们同步。
例如,您可以package_id
在本地和云对象上添加一个属性。这package_id
在双方都是相同的,因此您可以在更新远程对象时更新本地对象,反之亦然。
例如,下面是在 Parse 服务器上创建对象的代码:
ParseObject gameScore = new ParseObject("GameScore");
gameScore.put("score", 1337);
gameScore.put("playerName", "Sean Plott");
gameScore.put("cheatMode", false);
gameScore.saveInBackground();
您可以让他们从应用程序中检索此对象,如下所示:
ParseQuery<ParseObject> query = ParseQuery.getQuery("GameScore");
query.getInBackground("xWMyZ4YEGZ", new GetCallback<ParseObject>() {
public void done(ParseObject object, ParseException e) {
if (e == null) {
// object will be your game score
int score = object.getInt("score");
String playerName = object.getString("playerName");
boolean cheatMode = object.getBoolean("cheatMode");
} else {
// something went wrong
}
}
});
我建议您阅读文档以获取有关在 Parse 服务器上存储对象的更多信息: https ://docs.parseplatform.org/android/guide/
此外,此库可以帮助您在本地数据库和 Parse 服务器之间同步数据: https ://github.com/ntoskrnl/DataSync
推荐阅读
- laravel - Chrome 无法打开 localhost:3000 BrowserSync
- flutter - 如何在卡片内添加 PopupMenuButton
- c - 如何从循环单链表中删除一个节点
- node.js - 使用打字稿节点js express返回具有接口函数类型的对象
- python - Python - 此函数中的变量如何通过字典进行?
- python - 如何使用单个 shell 实例在 Python 中运行多个命令?(避免shell启动时间)
- database - 试图从数据库中获取记录并传递给控制器
- javascript - 节点.js。在 readline.question 的情况下尝试 catch 不起作用
- python - 在 RNN 中找不到模块 rnn_utils
- node.js - 如何安装 Expo CLI 而不会卡在已弃用的警告中?