

У меня есть база данных firebase с таблицей Trips, которую я создал для записи всех поездок, совершаемых пользователем. В базе данных о поездках у меня есть узел с именем done, который возвращает логическое значение true, если поездка завершена, или false, если поездка отменена или не завершена.
Я хочу отобразить все данные в recyclerview из базы данных поездки, в которой узел ridermodel равен текущему пользователю, а узел done равен true (логическое значение). Но когда я заполняю данные в recyclerview, мне удалось заполнить все данные для текущего пользователя с помощью orderByChild, но когда я пытаюсь отфильтровать данные, чтобы получить только данные с истинным значением в готовом узле, я не могу, и в результате я получаю все данные, включая данные, которые ложны в узле done.
private void loadTripplannerList() {
String user = FirebaseAuth.getInstance().getCurrentUser().getUid();
List<TripPlannerModel> tempList = new ArrayList<>();
DatabaseReference tripRef = FirebaseDatabase.getInstance().getReference(Common.Trip);
query = tripRef.orderByChild("rider").equalTo(user);
options = new FirebaseRecyclerOptions.Builder<TripPlannerModel>()
.setLifecycleOwner(this)
.setQuery(query, TripPlannerModel.class)
.build();
adapter = new FirebaseRecyclerAdapter<TripPlannerModel, CompletedTripAdapter>(options) {
@Override
protected void onBindViewHolder(@NonNull final CompletedTripAdapter holder, int position,
@NonNull final TripPlannerModel model) {
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
for (DataSnapshot itemSnapshot : dataSnapshot.getChildren()) {
Boolean isDone = itemSnapshot.child("done").getValue(Boolean.class);
if (isDone.equals(true)){
compositeDisposable.add(iGoogleAPI.getDirections("driving",
"less_driving",
model.getOrigin(), model.getDestination(),
getString(R.string.google_api_key))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(returnResult -> {
try {
//parse json
JSONObject jsonObject = new JSONObject(returnResult);
JSONArray jsonArray = jsonObject.getJSONArray("routes");
JSONObject object = jsonArray.getJSONObject(0);
JSONArray legs = object.getJSONArray("legs");
JSONObject legObjects = legs.getJSONObject(0);
String start_address = legObjects.getString("start_address");
holder.txt_pickup.setText(Common.formatAdress(start_address));
} catch (Exception e) {
Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show();
}
}));
TripPlannerModel model = itemSnapshot.getValue(TripPlannerModel.class);
tempList.add(model);
}
try {
marker_me = "color:holo_red|" + model.getOrigin();
// marker_dest = "color:orange|label:7|San Francisco,USA";
key = getString(R.string.google_api_key);
marker_me = URLEncoder.encode(marker_me, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
//String STATIC_MAP_API_ENDPOINT = "https://maps.googleapis.com/maps/api/staticmap?size = " +width+ "x300&path = " + path + "&markers = " + marker_me + "&markers = " + marker_dest + "&key = " + key;
String STATIC_MAP_API_ENDPOINT = "https://maps.googleapis.com/maps/api/staticmap?size = " + width / 2 + "x300&markers = " + marker_me + "&zoom=14&style=feature:poi|element:labels|visibility:off&key = " + key;
;
Long timeStamp = model.getComplete_time();
holder.txt_trip_date.setText(UserUtils.getDate(timeStamp));
Picasso.get()
.load(STATIC_MAP_API_ENDPOINT)
.into(holder.img_map);
holder.txt_destination.setText(model.getDestinationString());
holder.txt_trip_status.setText(R.string.status_complete);
holder.setItemClickListerner(new IRecyclerClickListerner() {
@Override
public void onItemClickListerner(View view, int pos) {
//
Toast.makeText(getActivity(), adapter.getRef(position).getKey(), Toast.LENGTH_SHORT).show();
Intent intent = new Intent(getActivity(), TripHistorySinglePage.class);
intent.putExtra("destination", getItem(position).getDestinationString());
startActivity(intent);
}
});
}
}
}
@Override
public void onCancelled (@NonNull DatabaseError databaseError){
Toast.makeText(getContext(), "" + databaseError.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
извини, я не понимаю, что ты имеешь в виду, можешь немного уточнить, пожалуйста @ Ашок
Пожалуйста, опубликуйте контент, который есть на изображении, которым вы поделились. если вы разместите изображения, это будет сложно для поисковой системы, а также для нас будет сложно воспроизвести
Похоже, вы пытаетесь отфильтровать два свойства: rider и done. Запросы к базе данных Firebase могут упорядочивать / фильтровать только одно свойство. Во многих случаях можно объединить значения, которые вы хотите отфильтровать, в одно (синтетическое) свойство. В вашем случае вы можете, например, создать свойство "rider_done": "uidOfRider_true" и упорядочить / отфильтровать его. Для примера этого и других подходов см. Мой ответ здесь: stackoverflow.com/questions/26700924/…
Пожалуйста, помогите показать контент, а не изображения