gpt4 book ai didi

android - Firebase Android 计数 child /徽章

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:20:25 25 4
gpt4 key购买 nike

我尝试开发一个简单的购物应用程序。将有几个产品类别,我为每个类别使用不同的 ListView Activity 。当用户选择产品类别时(比如 items1 ="drinks")- 新屏幕打开,他可以添加“苏打水”、“可乐”……我想在每个类别上添加计数徽章以显示每个类别的产品数量。因此,例如对于“items”我需要显示 5,对于“items1”- 2 和对于“items10/11”- 显示 1:

enter image description here

我的 ActivityItems1 代码:

       private Firebase mRef;
private String mUserId;
private String itemsUrl;
private TextView badge;


itemsUrl = Constants.FIREBASE_URL + "/users/" + mUserId + "/items1";



// Set up LisView
final ListView listView = (ListView) findViewById(R.id.listView);
final ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, android.R.id.text1);
listView.setAdapter(adapter);

// Find badge
badge =(TextView)findViewById(R.id.badgeView);


// Use Firebase to populate the list.
new Firebase(itemsUrl)
.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
adapter.add((String) dataSnapshot.child("title").getValue());


Log.e(dataSnapshot.getKey(), dataSnapshot.getChildrenCount() + "");

badge.setText(dataSnapshot.getChildrenCount() + "");
}

运行代码后,我收到了 key 和他的 child 的数量:E-KJGG2driQ6HJI8R7eve: 1E-KJGG3Ua6rmlQYn4IHF: 1

它始终是每个 key 的 1 个子项,因为 key = 产品 ID 和 key 的子项 - 它是标题。 但我需要计算 key /产品 ID(“饮料”类别中的产品)而不是他的 child ...

最佳答案

Databse Reference

有了这个数据库,你有两个选择:

1)使用添加的 child

FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference();
//You must remember to remove the listener when you finish using it, also to keep track of changes you can use the ChildChange
myRef.addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
        Log.e(dataSnapshot.getKey(),dataSnapshot.getChildrenCount() + "");
    }

    @Override
    public void onChildChanged(DataSnapshot dataSnapshot, String s) {

    }

    @Override
    public void onChildRemoved(DataSnapshot dataSnapshot) {

    }

    @Override
    public void onChildMoved(DataSnapshot dataSnapshot, String s) {

    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});

2)使用值监听器

FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference();

//You can use the single or the value.. depending if you want to keep track
thismyRef.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot snap: dataSnapshot.getChildren()) {
            Log.e(snap.getKey(),snap.getChildrenCount() + "");
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});

这是两种情况的输出

enter image description here

如果您需要保持持续跟踪,最好使用子事件...因为否则每次发生任何更改时,您都会通过网络收到整个 json,而不仅仅是更改的部分信息

如果你只需要一次快照,你最好使用 singleValue 因为这样你会同时收到所有信息

关于android - Firebase Android 计数 child /徽章,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37600442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com