Как отфильтровать данные firebase для отображения в recyclerview

Как отфильтровать данные firebase для отображения в recyclerview

Как отфильтровать данные firebase для отображения в recyclerview

У меня есть база данных 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();
                    }


        });

    }

Пожалуйста, помогите показать контент, а не изображения

Ashok 06.04.2021 21:20

извини, я не понимаю, что ты имеешь в виду, можешь немного уточнить, пожалуйста @ Ашок

The greatest 06.04.2021 21:24

Пожалуйста, опубликуйте контент, который есть на изображении, которым вы поделились. если вы разместите изображения, это будет сложно для поисковой системы, а также для нас будет сложно воспроизвести

Ashok 06.04.2021 21:25

Похоже, вы пытаетесь отфильтровать два свойства: rider и done. Запросы к базе данных Firebase могут упорядочивать / фильтровать только одно свойство. Во многих случаях можно объединить значения, которые вы хотите отфильтровать, в одно (синтетическое) свойство. В вашем случае вы можете, например, создать свойство "rider_done": "uidOfRider_true" и упорядочить / отфильтровать его. Для примера этого и других подходов см. Мой ответ здесь: stackoverflow.com/questions/26700924/…

Frank van Puffelen 07.04.2021 01:38
0
4
21
0

Другие вопросы по теме