下面的代码花费了1MB从firebase中提取数据。这正常吗?我能做些什么来减少它呢?因为它的开销太大了。我认为有一个更好的方法。有人能帮忙吗?
mDatabaseRef.child("FalMetinleri").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
long KapasiteGiris= dataSnapshot.child("giris").child(finalKategoriCinsiyet).child(finalKategoriGiris).getChildrenCount();
long KapasiteKarsilama= dataSnapshot.child("karsilama").getChildrenCount();
long KapasiteAskDurumu1= dataSnapshot.child("askDurumu").child(finalKategoriCinsiyet).child(finalKategoriAskdurumu).getChildrenCount();
long KapasiteAskDurumu2= dataSnapshot.child("askDurumu2").child(finalKategoriCinsiyet).child(finalKategoriAskdurumu).getChildrenCount();
long KapasiteisDurumu1= dataSnapshot.child("isDurumu").child(finalKategoriCinsiyet).child(finalKategoriMeslek).getChildrenCount();
long KapasiteisDurumu2= dataSnapshot.child("isDurumu2").child(finalKategoriCinsiyet).child(finalKategoriMeslek).getChildrenCount();
long KapasiteBitis= dataSnapshot.child("bitis").child(finalKategoriCinsiyet).child(finalKategoriBitis).getChildrenCount();
kapasite[0] = KapasiteGiris;
kapasite[1] = KapasiteKarsilama;
kapasite[2] = KapasiteAskDurumu1;
kapasite[3] = KapasiteAskDurumu2;
kapasite[4] = KapasiteisDurumu1;
kapasite[5] = KapasiteisDurumu2;
kapasite[6] = KapasiteBitis;
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
dialogFragment.dismissAllowingStateLoss();
}
});
输出量:
KapasiteGiris:8
KapasiteKarsilama:5
KapasiteAskDurumu1:4
KapasiteAskDurumu2:14
KapasiteisDurumu1:5
KapasiteisDurumu2:4
KapasiteBitis:13
CLI报告:
2条答案
按热度按时间mrwjdhj31#
这里唯一重要的代码是附加监听器的查询:
它所做的是获取节点“FalMetinleri”下的所有内容。侦听器中的所有其他代码都不会消耗更多的数据,因为该子节点的整个快照已经在内存中了。看起来该快照中大约有1MB的数据。
如果您不需要该子项的全部内容,则可以单独请求其中的每个嵌套子项。这将需要为每个子项创建一个查询,并为每个子项创建一个新的侦听器。
xmjla07d2#
如果每个节点内都有大量数据,getChildrenCount()是一个不好的做法。您应该尝试使用firestore。