Вы думаете, что ваша база данных реляционным способом, просто сделайте это легко, вместо того, чтобы зацикливаться 2 раза и получать 2 запроса, вы можете сделать это всего за 1 подход.(именно поэтому структура firebase позволяет сделать это легко)
Например, допустим, у вас есть рецепты и лайки, вы можете иметь внутри рецепты лайки каждого из них, а затем зацикливаться более 1 раза в этой таблице, получитьлайки, получите рецепт и покажите все это в 1 цикле в своем обзоре переработчиков, не нужно головной боли думать о запросе 2 разных узлов.
Итак, я бы посоветовал вам провести реструктуризацию в вашей БД, разместите лайкивнутри каждого рецепта, а затем просто зациклите 1 раз в нем.
Например, у вас есть это
"Likes" : {
"-LAJRnaAaCGrbv8-cXvD" : {
"5SWi7kiLTdW4WS1MDV5Knxeo0qt1" : {
"-LDqyWmTa-sbgKpxOztv" : {
"Likes" : "5SWi7kiLTdW4WS1MDV5Knxeo0qt1"
}
, как это соответствует этому рецепту
"PostRecipe" : {
"-LAJRnaAaCGrbv8-cXvD" : {
"appetizer" : "Appetizer",
"cooking_time" : "40 mins",
"desert" : "Dessert",
"difficult_level" : "5",
"main_course" : "Main course",...
так,просто добавьте это как внутри этого pushID
, и вы можете иметь свой рецепт и подобные этому рецепту внутри PostRecipe
, таким образом, вы делаете цикл только один раз и с 1 запросом через все рецепты
это то, что вынужно сделать
"PostRecipe" : {
"-LAJRnaAaCGrbv8-cXvD" : {
"appetizer" : "Appetizer",
"likes":{
"5SWi7kiLTdW4WS1MDV5Knxeo0qt1" : {
"-LDqyWmTa-sbgKpxOztv" : {
"Likes" : "5SWi7kiLTdW4WS1MDV5Knxeo0qt1"
}
"cooking_time" : "40 mins",
"desert" : "Dessert",
"difficult_level" : "5",
"main_course" : "Main course",...
, а затем, с этой структурой, вы можете получить аналог каждого рецепта, просто запросив таблицу 1 раз.
в вашей RecipeModel вы должны иметьУстановщики и получатели для всех переменных, которые вам нужны, например, name, appetizers, photo1 и т. д., должны быть уверены, что имена переменных совпадают с именами в базе данных firebase.
так, чтобы получитьданные, которые вы должны сделать примерно так
, запомните, ваш mRef должен начинаться с вашего уровня UserID.то есть mRef.child("PostRecipe").child(uid).addValue....
mRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
try {
for(DataSnapshot snap : dataSnapshot.getChildren())
RecipeModel rm = snap.getValue(RecipeModel.class);
String name =rm.getName();
String name =rm.getAppetizer();
//and then just create a new variable likes in your POJO
String likes = rm.getLikes();
//and then do whatever you want with the data, remember that forEach will iterate through all the recipes for each user, and then you can get any field inside your users
}
}catch (Exception ex){
// Toast.makeText(FacultiesActivity.this, ex.toString(), Toast.LENGTH_LONG).show();
}
}
@Override
public void onCancelled(DatabaseError error) {
Toast.makeText(FacultiesActivity.this, "Error", Toast.LENGTH_LONG).
});