NumberPicker与数据库中的数组

问题描述 投票:1回答:1

我想帮助我开发一个带有我从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) {

        }
    } );

如果我留下最小和最大两行,则会出错

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

java android firebase numberpicker
1个回答
0
投票

你在setMaxValue完全填满之前设置setMinValueCBSList

像这样更改你的代码

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) {

    }
} );
© www.soinside.com 2019 - 2024. All rights reserved.