java - NumberPicker 与数据库中的数组

标签 java android firebase numberpicker

我想帮助我开发一个带有从 firebase 获得的列表的数字选择器,此代码现在给我一个错误,如果我删除“setMaxValue 和 MinValue”,它只会给我带来一个值。

    CBSList = new ArrayList<>();
    DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Posts").child(post.getIDPost()).child("CBS");

    reference.addValueEventListener( new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            CBSList.clear();
            for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                CBSList.add(snapshot.getKey());

                String array[] = new String[CBSList.size()];
                for(int j =0;j<CBSList.size();j++){
                    array[j] = CBSList.get(j);
                }

                numberPicker.setMaxValue(CBSList.size() - 1);
                numberPicker.setMinValue(0);
                numberPicker.setDisplayedValues(array);
                numberPicker.setWrapSelectorWheel(true);
            }
        }

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

        }
    } );

如果我留下 min 和 max 两行会出错

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.ibra.kl, PID: 13463 java.lang.ArrayIndexOutOfBoundsException: length=1; index=1 at android.widget.NumberPicker.ensureCachedScrollSelectorValue(NumberPicker.java:1900) at android.widget.NumberPicker.initializeSelectorWheelIndices(NumberPicker.java:1715) at android.widget.NumberPicker.setMaxValue(NumberPicker.java:1471) at com.example.ibra.kl.ProductoPostActivity$2.onDataChange(ProdActivity.java:143) at com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@16.1.0:75) at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@16.1.0:63) at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@16.1.0:55) at android.os.Handler.handleCallback(Handler.java:789) at android.os.Handler.dispatchMessage(Handler.java:98) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6944) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

最佳答案

您正在 CBSList 完全填充之前设置 setMaxValuesetMinValue

像这样更改你的代码

reference.addValueEventListener( new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        CBSList.clear();
        for (DataSnapshot snapshot : dataSnapshot.getChildren()) {

            CBSList.add(snapshot.getKey());
        }

        String array[] = new String[CBSList.size()];

        for(int j =0;j<CBSList.size();j++){
            array[j] = CBSList.get(j);
        }

        if (CBSList.size() > 1) {
            numberPicker.setMaxValue(CBSList.size() - 1);
            numberPicker.setMinValue(0);
            numberPicker.setDisplayedValues(array);
            numberPicker.setWrapSelectorWheel(true);
        }
    }

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

    }
} );

关于java - NumberPicker 与数据库中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55656558/

相关文章:

android - 如何获取Textview中设置的字体大小

ios - 在 iOS 的 firebase 数据库中查询

firebase - Flutter Firebase Cloud Firestore 通过 ID 获取文档列表流

java - 如何将 .jar 文件添加到 native 包?

Java 泛型 : interface method that receives type argument of implementing class

android - 如何将用户定义的 Intent 限制在您的应用程序中

javascript - Firebase 存储 : string does not match format base64: invalid character found. 仅当调试关闭时

Visual Studio Code 中的 Java 代码覆盖率

java - 设置SWT表列的宽度

android - 在错误日志中使用记帐信息的优缺点