Android 与'合作;关联的';Firebase中的数据
我是Firebase数据库的新手,到目前为止一直在使用MySQL。我知道Firebase本身没有“关联”数据,但我认为我仍在尝试创建它,因为这就是我的思维方式!所以,我遇到的问题可能是因为我的数据格式不好——我希望有任何指针 在我的应用程序(使用Android Studio)中,每个用户都可以有多个框。每个框使用一个调色板(可以是默认调色板,也可以是用户定义的调色板)。调色板由许多颜色组成 目前,我的数据如下:Android 与'合作;关联的';Firebase中的数据,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我是Firebase数据库的新手,到目前为止一直在使用MySQL。我知道Firebase本身没有“关联”数据,但我认为我仍在尝试创建它,因为这就是我的思维方式!所以,我遇到的问题可能是因为我的数据格式不好——我希望有任何指针 在我的应用程序(使用Android Studio)中,每个用户都可以有多个框。每个框使用一个调色板(可以是默认调色板,也可以是用户定义的调色板)。调色板由许多颜色组成 目前,我的数据如下: Boxes BoxKey1 name: Test Box
Boxes
BoxKey1
name: Test Box
paletteKey: paletteKey1
belongsTo: userKey1
BoxKey2
... etc ...
Colours
ColourKey1
name: Red
hexCode: ff0000
ColourKey2
name: Blue
... etc ...
Palettes
PaletteKey1
name: default
colours
ColourKey1: true
ColourKey7: true
... etc ...
PaletteKey2
... etc ...
Users
UserKey1
name: Joe Bloggs
boxes
BoxKey1: true
BoxKey5: true
... etc ...
public void initialiseBox(ValueEventListener listener) {
if(this.key == null) return;
DatabaseReference mBoxReference = FirebaseDatabase.getInstance().getReference()
.child("boxes").child(this.key);
mBoxReference.addListenerForSingleValueEvent(listener);
}
因此,我可以很容易地检索用户框列表,并列出所有名称。如果用户单击某个名称,则检索并显示具有该名称的框。我还需要显示使用的调色板(名称和它包含的颜色)
在“活动”中,我检索框,如下所示:
mBox.setKey(boxKey);
mBox.initialiseBox(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
mBox = dataSnapshot.getValue(Box.class);
boxName.setText(mBox.getName()); // Show Box name
// AT THIS POINT I HAVE THE BOX DETAILS, BUT I NEED THE PALETTE DETAILS TOO
}
});
在Box类中,initialiseBox如下所示:
Boxes
BoxKey1
name: Test Box
paletteKey: paletteKey1
belongsTo: userKey1
BoxKey2
... etc ...
Colours
ColourKey1
name: Red
hexCode: ff0000
ColourKey2
name: Blue
... etc ...
Palettes
PaletteKey1
name: default
colours
ColourKey1: true
ColourKey7: true
... etc ...
PaletteKey2
... etc ...
Users
UserKey1
name: Joe Bloggs
boxes
BoxKey1: true
BoxKey5: true
... etc ...
public void initialiseBox(ValueEventListener listener) {
if(this.key == null) return;
DatabaseReference mBoxReference = FirebaseDatabase.getInstance().getReference()
.child("boxes").child(this.key);
mBoxReference.addListenerForSingleValueEvent(listener);
}
这很好,但现在我只从数据库中检索了调色板键和其他框数据。然后我如何得到实际的调色板,以及它的所有颜色,这样我也可以展示它们
我一直在尝试在主要活动中使用一种“嵌套侦听器”:
mBox.initialiseBox(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// Same as before
mBox = dataSnapshot.getValue(Box.class);
boxName.setText(mBox.getName()); // Show Box name
// Now add a new listener for the Palette
mPalette.setKey(mBox.getPaletteKey());
mPalette.initialisePalette(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
mPalette = dataSnapshot.getValue(Palette.class);
paletteName.setText(mPalette.getName());
}
});
}
});
但是它看起来非常笨拙,我不能完全让它工作(调色板没有填充,所以在paletteName.setText位我得到了一个错误)
这是正确的方法吗?如果没有,我应该怎么做?如果这是一个正确的想法,有人能看出我的错误吗?Firebase(以及许多其他NoSQL数据库)中的相关数据几乎与SQL数据库中的数据一样常见。主要区别在于: