Я недавно подключил свое приложение к 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();
}
}
}));