【问题标题】:CouchDB for Android Uses适用于 Android 的 CouchDB
【发布时间】:2016-09-07 09:50:40
【问题描述】:

我有一个用于应用程序后端的 nosql 服务器,json 通过 Retrofit 来自该服务器。

现在我想存储 Json 以供离线使用,我可以使用该 json 存储在 couchdb 数据库中吗?

Json结构可以是

player -|
        | id
        | name -|
                | firstname
                | lastname

然后我想搜索名字

我可以在android中使用couchbase-lite吗

或者是否有任何其他好的替代解决方案:- 注意:-它是一个复杂的 json,所以我不能再次将它转换为 POJO,否则我将使用 Realm。

【问题讨论】:

  • 请正确解释!
  • 您需要将其放入某种 POJO 中以将其存储在 RealmObjects 中,因为 RealmObject 是一个具有属性/getters/setters 的类

标签: android database realm couchbase-lite nosql


【解决方案1】:

以下是如何执行此操作的示例。如果您的 JSON 在 JSONString 中

ObjectMapper mapper = new ObjectMapper();  // Usually you only need one instance of this per app.
try {
    Map<String, Object> map = mapper.readValue(JSONString, Map.class);
    Document document = db.createDocument();
    document.putProperties(map);
} catch (IOException | CouchbaseLiteException ex) {
    ex.printStackTrace();
}

ObjectMapper 来自 Jackson JSON 库。目前 Couchbase Lite 使用 Jackson,因此您无需添加任何额外的依赖项。

对于查询,您可以使用视图通过 map/reduce 函数灵活地创建索引。然后针对您创建的索引构建查询。

【讨论】:

    【解决方案2】:

    您只能在couchbase lite 的文档属性中存储“标准java 对象”。那些是,

    int/Integer
    String
    float/Float
    Collections of the above (maps, lists, sets).
    

    所以即使你想存储JsonObjectJsonArray,首先你需要使用toString() 方法将它们转换为string 并将其存储在couchbase 中。

    在这种情况下,您执行搜索查询等将非常低效。

    所以我认为一种方法是通过转换将其转换为poJo,然后使用couchbase,但正如您所写的那样

    这是一个复杂的 json,所以我不能再把它转换成 POJO 我将为此使用领域。

    我建议不要使用couchbase

    【讨论】:

    • 这是不正确的。 Couchbase Lite 存储 JSON,而不是子集。使用 Views 和 map/reduce 功能查询可以变得简单高效。
    • 是的,它链接到一个简单的方法来做到这一点。类似于我的答案中显示的。 OP 讨论了将接收到的 JSON 存储为字符串。这很容易。不知道你的批评是什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多