Читать все дочерние ключи родительского ключа из базы данных Firebase - PullRequest
0 голосов
/ 21 апреля 2019

Я недавно подключил свое приложение к firebase, и мне нужна помощь.Я хочу показать категории, как на картинке, но я не знаю, как это сделать.

https://imgur.com/a/v812Roc

Обновление: я добавил категории в родительский ключ

https://imgur.com/a/epaszdO

Я использую этот код для Firebase:

Обновление: новый void readDataCategory

 FirebaseDatabase firebaseDatabase;
    Context context;

    DatabaseReference reference;

    public OnlineDBHelper(Context context , FirebaseDatabase firebaseDatabase) {
        this.firebaseDatabase = firebaseDatabase;
        this.context = context;
        reference=this.firebaseDatabase.getReference("AllInOne");
    }

    private static OnlineDBHelper instance;

    public static synchronized OnlineDBHelper getInstance(Context context, FirebaseDatabase firebaseDatabase){
        if (instance==null)
            instance=new OnlineDBHelper(context,firebaseDatabase);
        return instance;
    }


    public void readData(final MyCallback myCallback , String category) {
        final AlertDialog dialog = new SpotsDialog.Builder()
                .setContext(context)
                .setCancelable(false)
                .build();

        if (!dialog.isShowing())
            dialog.show();

        reference.child(category)
                .child("question")
                .addListenerForSingleValueEvent(new ValueEventListener() {


                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        List<Question> questionList = new ArrayList<>();


                        //////// Questions ///////

                        for (DataSnapshot questionSnapShot : dataSnapshot.getChildren())
                            questionList.add(questionSnapShot.getValue(Question.class));
                        myCallback.setQuestionList(questionList);

                        if (dialog.isShowing())
                            dialog.dismiss();
                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError) {
                        Toast.makeText(context, "" + databaseError.getMessage(), Toast.LENGTH_SHORT).show();
                    }

                });

         public void readDataCategory(final MiCategory mycategory,String category){
        final AlertDialog dialog =new SpotsDialog.Builder()
                .setContext(context)
                .setCancelable(false)
                .build();

        if (!dialog.isShowing())
            dialog.show();

        reference.child(category)
                .child("category")
                .addListenerForSingleValueEvent(new ValueEventListener() {


                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        List<Category> categoryList=new ArrayList<>();


                        //////// MiCategory ////////
                        for (DataSnapshot categorySnapShot:dataSnapshot.getChildren())
                            categoryList.add(categorySnapShot.getValue(Category.class));
                               mycategory.setCategoryList(categoryList);


                        if (dialog.isShowing())
                            dialog.dismiss();
                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError) {
                        Toast.makeText(context,""+databaseError.getMessage(),Toast.LENGTH_SHORT).show();
                    }

                });

    }

Интерфейс MyCallback у меня

public interface MyCallback {
    void setQuestionList(List<Question>questionList);

}

Обновление: новый интерфейс MiCategory

public interface MiCategory {

    void setCategoryList(List<Category> categoryList);
}

В упражнении, в котором должны появляться категории, у меня есть эта строка, которая должна быть изменена на базу данных firebased (в настоящее время у меня есть категории в локальной базе данных, но я хочуизменить в базе данных реального времени).

Обновление: я прокомментировал строку из локальной базы данных и добавил что-то похожее на firebase, но у меня есть ошибка "readDataCategory (MiCategory, String), в OnlineDBHelper нельзя применить к MiCategory".

    //CategoryAdapter adapter=new CategoryAdapter(Quiz.this,  DBHelper.getInstance(this).getAllCategories());
        CategoryAdapter adapter=new CategoryAdapter(Quiz.this,  OnlineDBHelper.getInstance(this,
                FirebaseDatabase.getInstance())
                .readDataCategory(new MiCategory() {
                    @Override
                    public void setCategoryList(List<Category> categoryList) {
                       Common.categoryList.clear();
                       Common.categoryList=categoryList;
                        if (Common.categoryList.size() == 0) {
                            new MaterialStyledDialog.Builder(Quiz.this)
                                    .setTitle("Oppss")
                                    .setDescription("We don't have any " + Common.selectedCategory.getName() + " Category")
                                    .setPositiveText("ok")
                                    .onPositive(new MaterialDialog.SingleButtonCallback() {
                                        @Override
                                        public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
                                            dialog.dismiss();
                                            finish();
                                        }
                                    }).show();

                        }
                    }
                }));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...