小编THe*_*rOX的帖子

如何从firebase中的值获取密钥

当我知道Firebase中的以下结构中的"name"字段包含"efg"时,如何获取密钥"-KLpcURDV68BcbAvlPFy".

clubs
    -KLpcURDV68BcbAvlPFy
        dept: "abc"
        desc: "xyz"
        name: "efg"
    -asdasdasddsad
        dept: "asda"
        desc: "asd"
        name: "adddd"
Run Code Online (Sandbox Code Playgroud)

我尝试了这个,但它返回了"俱乐部"

mDatabase.child("clubs").orderByChild("name").equalTo("efg").addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            String clubkey =dataSnapshot.getKey();
Run Code Online (Sandbox Code Playgroud)

android firebase firebase-realtime-database

10
推荐指数
2
解决办法
3万
查看次数

如何强制派生类在多层上调用超类方法?

我正在尝试找到一种最优雅的方式来允许孩子和父母对祖父母发起的事件做出反应。这是一个天真的解决方案:

abstract class A {
    final public void foo() {
        // Some stuff here
        onFoo();
    }

    protected abstract void onFoo();
}

abstract class B extends A {
    @Override
    final protected void onFoo() {
        // More stuff here
        onOnFoo();
    }

    protected abstract void onOnFoo();
}

class C extends B {
    @Override
    protected void onOnFoo() {
        // Even more stuff here
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,基本上,我正在尝试找到一种最佳方法,以便在调用foo()时允许所有相关类执行某些逻辑。为了稳定和简单起见,我希望所有步骤都按顺序完成,尽管这不是必需的。

我发现的另一种解决方案涉及将所有事件处理程序存储为某种形式的Runnable:

abstract class A {
    private ArrayList<Runnable> fooHandlers = new ArrayList<>();

    final public void foo() {
        // Some …
Run Code Online (Sandbox Code Playgroud)

java design-patterns

9
推荐指数
1
解决办法
103
查看次数