NumberPicker с массивом из базы данных - PullRequest
1 голос
/ 12 апреля 2019

Я хотел помочь мне разработать средство выбора номера со списком, который я получаю из firebase, этот код теперь выдает мне ошибку, и если я удаляю "setMaxValue and 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 Процесс: com.example.ibra.kl, PID: 13463 java.lang.ArrayIndexOutOfBoundsException: length = 1; Индекс = 1 на android.widget.NumberPicker.ensureCachedScrollSelectorValue (NumberPicker.java:1900) на android.widget.NumberPicker.initializeSelectorWheelIndices (NumberPicker.java:1715) на android.widget.NumberPicker.setMaxValue (NumberPicker.java:1471) на com.example.ibra.kl.ProductoPostActivity $ 2.onDataChange (ProdActivity.java:143) на com.google.firebase.database.core.ValueEventRegistration.fireEvent (com.google.firebase: firebase-database @@ 16.1.0: 75) на com.google.firebase.database.core.view.DataEvent.fire (com.google.firebase: firebase-database @@ 16.1.0: 63) на com.google.firebase.database.core.view.EventRaiser $ 1.run (com.google.firebase: firebase-database @@ 16.1.0: 55) на android.os.Handler.handleCallback (Handler.java:789) на android.os.Handler.dispatchMessage (Handler.java:98) на android.os.Looper.loop (Looper.java:164) на android.app.ActivityThread.main (ActivityThread.java:6944) в java.lang.reflect.Method.invoke (родной метод) на com.android.internal.os.Zygote $ MethodAndArgsCaller.run (Zygote.java:327) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1374)

1 Ответ

0 голосов
/ 12 апреля 2019

Вы устанавливаете setMaxValue и setMinValue до полного заполнения CBSList.

Измените свой код следующим образом

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

    }
} );
...