当您在Android应用中处理Firebase数据(读取,写入...)时,您需要获取firebase引用,然后才能处理数据。
由于Firebase参考是一个JSON树,如果你指向树根,你可以随时访问一个孩子,并不重要。
问题:从内存和延迟角度来看,在代码中处理此引用的最佳方法是什么?
1 /在应用程序的根目录中创建一个静态Firebase引用。
MyApplication.getFirebaseRootRef().chid(C1).chid(C11).setValue(...);
2 /为孩子C11创建一个新的firebase参考
Firebase ref = new Firebase("https://your.firebaseio.com/C1/C11");
ref..setValue(...);
3 / Hybrid
Firebase ref = new Firebase("https://your.firebaseio.com");
ref.child(C1).child(C11).setValue(...);
4 / Hybrid 2
Firebase ref = new Firebase("https://your.firebaseio.com").child(C1).child(C11);
ref.setValue(...);
性能有什么不同吗?
也许您可能对可读性和维护有一些建议?
答案 0 :(得分:5)
Firebase查询和引用是轻量级对象。繁重的工作是由Firebase SDK本身内部(并由其管理)的类在幕后完成的。
因此,您提出的任何方法之间的性能都不会有显着差异。
下面的个人偏好
我通常会在每项活动中保留一个参考作为参与者。
class MainActivity extends AppCompatActivity {
Firebase mRef;
如果我有更多的主要列表类型,我会为这些添加成员:
class MainActivity extends AppCompatActivity {
Firebase mRef;
Firebase mUsersRef;
Firebase mPostsRef;
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(...);
...
mRef = new Firebase("https://yours.firebaseio.com");
mUsersRef = mRef.child("users");
mPostsRef = mRef.child("posts");
...
}
通过在每项活动中放置所有内容,这些内容都非常独立。
答案 1 :(得分:0)
1)我个人并没有使用单吨的火力 2)。不要使用第二个。可能有时你想要一个动态路径变量.. 3)我认为3 n 4具有相同的效果..
答案 2 :(得分:0)
我这样做。!这个方法也可以帮助我获取未知的子密钥及其访问权限。!
mdatabaseRef.child("users").orderByKey().equalTo(key).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(lList.size()>0)
lList.clear();
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
if(postSnapshot.getKey()!=null)
{
Log.e(TAG, "::User:Child:1"+postSnapshot.getKey());
mdatabaseRef.child("Users")
.child(postSnapshot.getKey())
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.e(TAG, "::Post::Child:2"+dataSnapshot.getKey());
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
final Post post= postSnapshot.getValue(Post.class);