Я хочу создать фрагмент уведомления в приложении Android, для этого у меня есть база данных firebase, подобная следующей
{
"comments" : {
"-M5TzP6GKDal61bEUY66" : {
"-M5bP5nDhmEcHRij05SE" : {
"comment" : "salaaaam",
"username" : "snoussi khalil"
}
},
"-M5co-nrZ8RxdFiuR_Vl" : {
"-M5co92GjJDbs5mqTnp1" : {
"comment" : "first",
"username" : "omar kinani"
},
"-M5co9TwnSqcNzELI46x" : {
"comment" : "first",
"username" : "omar kinani"
},
"-M5coCPjicyKVeEC61B1" : {
"comment" : "first",
"username" : "omar kinani"
},
"-M5coE2WHdGrBGEi1QCn" : {
"comment" : "first",
"username" : "omar kinani"
},
"-M5coj-Z8jPekGDre3Ie" : {
"comment" : "yea",
"username" : "omar kinani"
}
}
},
"posts" : {
"-M5TbWiSlgN7lW4_vJkm" : {
"author" : "snoussi khalil",
"lat" : 34.0401902,
"longt" : -4.9937379,
"txt" : "hello there guys"
},
"-M5TjFWG7abQnap0IOPH" : {
"author" : "snoussi khalil",
"lat" : 34.0401842,
"longt" : -4.9937646,
"txt" : "bonjor"
},
"-M5TzP6GKDal61bEUY66" : {
"author" : "snoussi khalil",
"lat" : 34.0401748,
"longt" : -4.9937932,
"txt" : "dude"
},
"-M5co-nrZ8RxdFiuR_Vl" : {
"author" : "omar kinani",
"txt" : "hey"
}
, и получить комментарии к сообщениям, автор которых равен идентификатору пользователя, который я сделал. два за петли и попытался добавить Arraylist с комментариями к каждому сообщению. Моя проблема в том, что мой Arraylist пуст за пределами l oop, но содержит элементы внутри l oop, я знаю, потому что я использовал функцию LOG.d (), чтобы внимательно посмотреть, что происходит.
public class NotifFragment extends Fragment {
private FirebaseDatabase database;
private DatabaseReference postRef;
private DatabaseReference comRef;
private FirebaseAuth mAuth;
private List<String> comments;
@Nullable
@Override
public View onCreateView(@NonNull final LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_notification,container,false);
//database init
database = FirebaseDatabase.getInstance();
postRef = database.getReference("posts");
comRef = database.getReference("comments");
//user init
mAuth = FirebaseAuth.getInstance();
final String username = mAuth.getCurrentUser().getDisplayName();
//init an empty arraylist for comments
comments = new ArrayList<>();
postRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (final DataSnapshot keynode : dataSnapshot.getChildren()){
String author = keynode.child("author").getValue(String.class);
if (author.equals(username)){
comRef.child(keynode.getKey()).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot1) {
for (DataSnapshot item:dataSnapshot1.getChildren()){
String comment = item.child("comment").getValue(String.class);
Log.d("sos",""+comment+"and list size: "+comments.size());
comments.add(comment);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
Log.d("sos","your final list size is : "+comments.size());
return view;
}
}
Я выполнил приложение и добавил фиктивные комментарии в пост. Три комментария "first"
, и четвертый: да, массив действительно увеличился внутри l oop, но достиг нулевого размера, когда, наконец, вышел за пределы l oop.
и LOGCAT:
12020-04-23 22:12:49.372 1664-1664/com.snoussi.univox D/sos: your final list size is : 0
2020-04-23 22:12:51.340 1664-1664/com.snoussi.univox D/sos: firstand list size: 0
2020-04-23 22:12:51.341 1664-1664/com.snoussi.univox D/sos: firstand list size: 1
2020-04-23 22:12:51.342 1664-1664/com.snoussi.univox D/sos: firstand list size: 2
2020-04-23 22:12:51.343 1664-1664/com.snoussi.univox D/sos: firstand list size: 3
2020-04-23 22:12:51.344 1664-1664/com.snoussi.univox D/sos: yeaand list size: 4