首页 > 解决方案 > 如何获取片段内在firebase中注册的用户数?

问题描述

我使用以下方法检索我的 firebase 数据库中的用户帐户数。当我使用活动时,它工作正常。但是当我在片段中使用相同的方法时,应用程序会崩溃。要做哪些修改?

private void loadDetails() {
        DatabaseReference ref= FirebaseDatabase.getInstance().getReference("Users");
        ref.orderByChild("accountType").equalTo("User").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                userList.clear();
                for(DataSnapshot ds: snapshot.getChildren()){
                    ModelUsers modelUsers=ds.getValue(ModelUsers.class);
                    userList.add(modelUsers);
                }
                cusValueTv.setText(userList.size());

            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });


    }

Logcat如下,

2020-08-01 16:28:34.048 3697-3697/com.myproject.marutiVendor E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.myproject.marutiVendor, PID: 3697
    android.content.res.Resources$NotFoundException: String resource ID #0x19
        at android.content.res.Resources.getText(Resources.java:360)
        at android.content.res.MiuiResources.getText(MiuiResources.java:97)
        at android.widget.TextView.setText(TextView.java:5873)
        at com.myproject.marutiVendor.DashboardFragment$2.onDataChange(DashboardFragment.java:92)
        at com.google.firebase.database.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:75)
        at com.google.firebase.database.core.view.DataEvent.fire(DataEvent.java:63)
        at com.google.firebase.database.core.view.EventRaiser$1.run(EventRaiser.java:55)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:201)
        at android.app.ActivityThread.main(ActivityThread.java:6810)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)

标签: androidfirebaseandroid-fragmentsfirebase-realtime-database

解决方案


您正在为这一行中的文本视图设置一个数值:

cusValueTv.setText(userList.size());

Android 将此调用映射到此方法签名

setText(int resid)

使用字符串资源标识符设置要显示的文本。

因此,它会寻找具有该数字 ID 的资源。这很有帮助的原因是,您可以在资源包中为不同语言提供文本的翻译。

当然,这些都不适用于您的场景,因为您实际上只是想显示数字本身,而不是资源。要调用 的正确版本setText,您只需在调用中将数字转换为字符串:

cusValueTv.setText(userList.size().toString());

或者:

cusValueTv.setText("" + userList.size());

推荐阅读