У меня есть узел огня по имени myHire, у которого есть дочерний элемент, который идентифицируется текущим идентификатором пользователя (кто бы ни вошел в систему). Дочерний элемент ниже текущего идентификатора пользователя - это PostNode, который может быть любым и ниже. postnode - это идентификатор всех тех людей, которые взаимодействуют с этой записью. идентификатор postnode и идентификатор peopleInvolvedNode в postnode не известны мне по какому-то определенному идентификатору, поэтому я пытаюсь получить их ключи и значения с помощью цикла ValueEventListener / onDataChange. Моя проблема возникает, когда цикл извлекает только последний дочерний узел и игнорирует все узлы, которые находятся выше.
Я пытаюсь решить эту проблему очень долго. Так что любая помощь будет оценена
Спасибо и хорошего дня
Это моя структура базы данных, чтобы помочь понять вопрос точно
Ниже мой код
myHire = FirebaseDatabase.getInstance().getReference().child("My Hire").child(currentUserID);
myHire.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot child1 : dataSnapshot.getChildren()) {
String checkKeys1 = child1.getKey();
Query query = myHire.child(checkKeys1);
FirebaseRecyclerOptions<hiredListDetails> options = new FirebaseRecyclerOptions.Builder<hiredListDetails>()
.setQuery(query, hiredListDetails.class).build();
final FirebaseRecyclerAdapter<hiredListDetails, MyViewHolder> adapter =
new FirebaseRecyclerAdapter<hiredListDetails, MyViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull final MyViewHolder holder, int position, @NonNull final hiredListDetails model) {
Log.d(TAG, "onBindViewHolder: call 4");
holder.topic.setText(model.getWorktitle());
Log.d(TAG, "onBindViewHolder: the topic is "+model.getWorktitle());
holder.hiredPersonName.setText(model.getHiredpersonname());
holder.hiredPersonBidPrice.setText(model.getHiredpersonprice() + " BD");
String givenDateString = model.getCurrentdateandtime();
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy, HH:mm");
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Bahrain"));
long timeInMilliseconds = 0;
try {
Date mDate = sdf.parse(givenDateString);
timeInMilliseconds = mDate.getTime();
} catch (ParseException e) {
e.printStackTrace();
}
final CharSequence ch = DateUtils.getRelativeTimeSpanString(timeInMilliseconds, System.currentTimeMillis(), DateUtils.MINUTE_IN_MILLIS);
holder.timeAgo.setText(ch);
Picasso.get().load(model.getHiredpersonimage()).placeholder(R.drawable.profile)
.into(holder.hiredPersonPic);
holder.requestTracker.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String clickedRecyclerKey = getRef(holder.getAdapterPosition()).getKey();
Log.d(TAG, "onClick: clicked Recycler key is " + clickedRecyclerKey);
String checkStatusForTracking = model.getActivatelocation();
if (checkStatusForTracking.equalsIgnoreCase("True")) {
Intent intent = new Intent(getContext(), TrackUserMap.class);
startActivity(intent);
} else {
getLocationRequest(clickedRecyclerKey);
Toast.makeText(getContext(), "Please wait while the tracking process is completed",
Toast.LENGTH_LONG).show();
}
}
});
String checkStatusForTracking = model.getActivatelocation();
if (checkStatusForTracking.equalsIgnoreCase("Request")) {
holder.requestTrackerStatusMark.setImageDrawable(getResources().getDrawable(R.drawable.statusyellow));
} else if (checkStatusForTracking.equalsIgnoreCase("True")) {
holder.requestTrackerStatusMark.setImageDrawable(getResources().getDrawable(R.drawable.statusgreen));
}
loadingBar.dismiss();
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.hired_individual_row_layout, parent, false);
MyViewHolder viewHolder = new MyViewHolder(view);
return viewHolder;
}
};
myHiredList.setAdapter(adapter);
adapter.startListening();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});