Сбой динамического расширяемого списка вторсырья

#android #firebase #firebase-realtime-database

# #Android #firebase #firebase-база данных в реальном времени

Вопрос:

Я новичок в Android, и я знаю, что это может быть проще простого, но я борюсь.

Я пытался создать динамическое расширяемое представление recycler с использованием базы данных firebase в реальном времени, но данные отображаются неправильно.

Я передаю строку из одного действия в другое и сравниваю строку с полем базы данных, а затем отображаю ее дочерние компоненты, но я не знаю, где я терплю неудачу.

Я хочу отобразить родительское и дочернее поля, сравнив поле name со значением.

   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_course_detail);
        //string value from another activity
        String value = getIntent().getExtras().getString("name");

        recycler_view = (RecyclerView) findViewById(R.id.recycler_expand);
        recycler_view.setLayoutManager(new LinearLayoutManager(this));

        FirebaseDatabase database = FirebaseDatabase.getInstance();

        DatabaseReference parentReference = database.getReference().child("Tutors");
        //comparing
        parentReference.equalTo(value).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                final List<ParentList> Parent = new ArrayList<>();
                for (final DataSnapshot snapshot : dataSnapshot.getChildren()){


                    final String ParentKey = snapshot.getKey().toString();

                    snapshot.child("title").getValue();

                    DatabaseReference childReference =
                            FirebaseDatabase.getInstance().getReference().child(ParentKey);
                    childReference.addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                            final List<ChildList> Child = new ArrayList<>();


                            for (DataSnapshot snapshot1:dataSnapshot.getChildren())
                            {
                                final String ChildValue =  snapshot1.getValue().toString();

                                snapshot1.child("title").getValue();

                                Child.add(new ChildList(ChildValue));

                            }

                            Parent.add(new ParentList(ParentKey, Child));

                            DocExpandableRecyclerAdapter adapter = new DocExpandableRecyclerAdapter(Parent);

                            recycler_view.setAdapter(adapter);

                        }

                        @Override
                        public void onCancelled(DatabaseError error) {
                            // Failed to read value
                            System.out.println("Failed to read value."   error.toException());
                        }

                    });}}

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

    }
 

Структура базы данных
введите описание изображения здесь

ChildList.java

 
public class ChildList implements Parcelable {

    private String title;


    public ChildList(String title) {
        this.title = title;
    }

    protected ChildList(Parcel in) {
        title = in.readString();
    }

    public static final Creator<ChildList> CREATOR = new Creator<ChildList>() {
        @Override
        public ChildList createFromParcel(Parcel in) {
            return new ChildList(in);
        }

        @Override
        public ChildList[] newArray(int size) {
            return new ChildList[size];
        }
    };

    public String getTitle() {
        return title;
    }

    public void setTitle(String Title) {
        this.title = Title;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel parcel, int i) {
        parcel.writeString(title);
    }
}
 

Пожалуйста, кто-нибудь, помогите мне с этим: (

Комментарии:

1. Строковое значение = GetIntent().getExtras().getString(«имя»); является родительским именем?

2. @Hard’Kgosai Это значение, которое я извлекаю из другого действия.

3. snapshot.child(«title»).GetValue(); Что это?

4. @Hard’Kgosai snapshot.child(«title»).GetValue(); является переменной в классе childList

5. Да, но где вы сохранили это значение? к нему не прикреплена строка, подобная этой String string = .snapshot.child(«title»).GetValue().toString();

Ответ №1:

Не используйте equalTo().

Попробуйте это:

  DatabaseReference parentReference = database.getReference().child("Tutors");
   
    parentReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
           
            for (final DataSnapshot snapshot : dataSnapshot.getChildren()){

                final String NameKey = snapshot.getKey().toString();

                if(value.equals(NameKey)){
                   //DO WHATEVER YOU WANT   
                }
             }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });