解决方案 »

  1.   

    五、 Kii Cloud的Object存储
    在Kii Cloud中,有文件存储和单条目的object存储。我们记事本应用,使用的是object存储方式。Object存储方式支持key/value对的存储,我们可以把每条记事条目存为一个object,分别记入title和content域。
    对于数据存储,我们首先要理解一个Bucket的概念。Bucket在这里是一些条目或者文件的集合区域。比如,我们的应用将来除了笔记,还有一些日历事项存储,那么我们虽然可以和笔记混着存储在一起,用一个专门的位来标记类型,当然还可以采用不同的bucket来存储在不同区域,互不干扰。
    在Kii Cloud中,bucket可以属于应用,或者属于一个用户组,或单独属于一个用户。比如游戏分数,我们想做排行,那么每个用户的分数要存储在应用的bucket中,这样这些数据才可以所有用户都能访问,才好排序。但如当前这个例子,笔记条目属于个人,更适合于存储在用户自己的bucket空间中。
    六、 笔记列表界面的实现和逻辑
    如上篇文章讨论的,我们的列表界面是程序的入口界面,在程序启动时检查是否已经登录,这里是检查是否有token的存储。如果没有,就关闭当前页面,打开登录界面。如果有token,则用token获取KiiUser实例,然后取用户bucket的所有KiiObject。
    KiiQuery all_query = new KiiQuery();
    KiiQueryResult result = kUser.bucket("notes").query(all_query);
    objLists = result.getResult();
    for (KiiObject obj : objLists) {
        Note n = new Note();
        n.title = obj.getString("title");
        n.content = obj.getString("content");
        n.uri = obj.toUri();
        //将Note添加进显示的list列表
        …
    }
    实际上,通过KiiQuery,我们可以扩展出搜索功能,这个就留待读者自己去发掘了
    七、 编辑保存的逻辑实现
    新建一个Note条目,也就是在Kii Cloud上创建一个新的对象,可以用 NotesList.kUser.bucket(“notes”).object()。 那么,又如何修改一个已经存在的对象呢?我们是用Uri的方式来获得一个对象的引用。在列表中,我们列出了所有远端的条目,通过toUri来获得该对象的uri地址。在编辑界面,我们就可以用KiiObject.createByUri(uri) 来重新获得这个对象。在调用保存save()方法后,将内容或者说更改保存到服务器。
    那么我们的笔记的标题和正文如何存储呢?如前面所说,Kii Cloud的Object存储是以JSON的key-value方式存储。所以我们可以用obj.set(key, value)来存储或更新条目。
    要小心,查询列表和保存都是一个连接服务器的过程,并且是同步方法,所以我们需要一个ASyncTask来包装它。