我正在开发一个论坛类的应用程序,用户可以在其中发布问题,并用相关技术对其进行标记。
该应用程序具有类似于Firebase database repo的模块和数据库。
我想根据他们的标签过滤帖子。由于无法对多个键值在服务器端进行筛选,所以在使用recyclerview填充之前,我必须找到一种方法对其进行筛选。
我在这里提了很多问题,发现pufanswer与本案有关。
这是我的json树

"posts" : {
"-Kdb0BsybfpPtkAPRF1-" : {
  "author" : "Anush Surendran",
  "body" : "Test 1 ",
  "commentCount" : 0,
  "created" : 1487787053303,
  "starCount" : 1,
  "stars" : {
    "v9KTwyI2DMbDgKHALgPSJEBK3fi1" : true
  },
  "tag" : "#CSS",
  "title" : "Checking Post Time",
  "uid" : "BvNgX2U5U4SriTWsoEtqbGYgOTw1"
},
"-Kdb2D9vD-3kHWpCMIFi" : {
  "author" : "Anush Surendran",
  "body" : "Abc",
  "commentCount" : 0,
  "created" : 1485000000000,
  "starCount" : 0,
  "tag" : "#HTML",
  "title" : "Test 2",
  "uid" : "BvNgX2U5U4SriTWsoEtqbGYgOTw1"
}

我正在用以下逻辑重写parsesnapshot
    @Override
    protected Post parseSnapshot(DataSnapshot snapshot) {
        if (snapshot.getValue(Post.class).tag.equals("#HTML")){
            Log.d(TAG,"gotHTML Filtered Posts");
            return snapshot.getValue(Post.class);
        }
        else
        return super.parseSnapshot(snapshot);
    }

现在只尝试一个值。我将把这个放在一个循环中过滤多个标记(比如html、css、js)
代码运行良好,我可以看到if条件按预期工作。
如果没有带有特定标签的帖子,我不知道在else部分返回什么。当前的else部分返回所有帖子。
有没有比这更好的方法来过滤数据?
任何帮助都将不胜感激!

最佳答案

覆盖parseSnapshot可用于将视图映射到快照中的数据子集。如果不能用于筛选数据。
当前无法使用firebaseui筛选客户端上的数据。它有一个打开的功能请求:https://github.com/firebase/FirebaseUI-Android/issues/15。正如你在那期中看到的,这是一个有争议的特性。
如AA>:
[FireBaseUI]已经将过滤作为一个故意的非目标,因为我们不想鼓励贪婪地提取可能永远不会显示的数据。
我绝对害怕在你的场景中检索太多的数据。最好是提出一个数据模型,允许在服务器上进行所需的筛选。

10-07 19:21
查看更多