не удается получить данные из базы данных на объекте datasnapshot - PullRequest
0 голосов
/ 01 сентября 2018

enter image description here

это мои данные, и я хочу получить их с помощью addValueEventListener, но мое приложение, к сожалению, остановится

 @Override
    public void onStart() {
        super.onStart();

        db.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                List.clear();

               for(DataSnapshot dSnapshot :dataSnapshot.getChildren()){
                   List<String> td = (ArrayList<String>) dataSnapshot.getValue();
                 // data data1=dSnapshot.getValue(data.class);
                   List.add(data1);

               }

              DataList adapter =new DataList(Fragment1.this.getActivity(),List);
               list.setAdapter(adapter);
            }


            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });


    }

мое приложение остановлено из-за этой строки кода, поэтому скажите мне любую альтернативу.

//**data data1=dSnapshot.getValue(data.class);

 List.add(data1);)

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

Предполагая, что ваша переменная db указывает на правильную ссылку.

Вместо использования ValueEventListener и циклического прохождения через каждого ребенка. Используйте ChildEventListener и убедитесь, что DatabaseReference указывает на корень, где находится дочерний элемент, чтобы мы могли перебирать каждый POJO.

db.addChildEventListener(new ChildEventListener() {
public void onChildAdded(DataSnapshot dataSnapshot, String previousKey) {
    list.add(dataSnapshot.getValue(YourModel.class)); // Change with your POJO
    // Add to your list
}
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
public void onCancelled(DatabaseError er) { }});

Если вы хотите получить общие сведения в базе данных реального времени, используйте Абстрактный класс Firebase GenericTypeIndicator

GenericTypeIndicator<List<Message>> t = new GenericTypeIndicator<List<Message>>() {};
 List<Message> messages = snapshot.getValue(t);
0 голосов
/ 01 сентября 2018
 use this method
//-----------------// data inside kids----------

        private void getDataFrom() {

            String userId = FirebaseAuth.getInstance().getCurrentUser().getUid();

            DatabaseReference mCustomerDatabase = FirebaseDatabase.getInstance().getReference().child("users").child("kids");

            mCustomerDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    if (dataSnapshot.exists() && dataSnapshot.getChildrenCount() > 0) {
                        Map<String, Object> map = (Map<String, Object>) dataSnapshot.getValue();
                        if (map.get("kid1ID") != null) {
                            customer_name = map.get("title").toString();
                            Log.i("kid1ID",String.valueOf(kid1ID));

                        }

                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {
                }
            });
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...