Может ли queryEqual () использоваться для сравнения с массивом? [Дубликат]

Это наиболее обсуждаемый аспект спецификации Selectors Level 4. С помощью этого селектора вы сможете стилизовать элемент в соответствии с его дочерним элементом, используя восклицательный знак после данного селектора (!).

Например:

body! a:hover{
   background: red;
}

установит красный цвет фона, если пользователь наводится на любой якорь.

Но нам нужно ждать реализации браузеров: (

1
задан Daniel Kaparunakis 1 December 2016 в 15:31
поделиться

2 ответа

База данных Firebase не имеет эквивалента SQL WHERE id IN (1,2,3). В случае выбора по идентификатору способ извлечения объектов Firebase одинаково быстро, потому что Firebase конвейер запрашивает запросы .

. Ваш случай отличается, поскольку вы не выбираете по идентификатору , К сожалению, нет способа напрямую сопоставить ваш запрос с эквивалентом в базе данных Firebase.

Вместо того, чтобы пытаться создать базу данных NoSQL Firebase для SQL-трюков, я настоятельно рекомендую вам начать сопоставление вашей модели данных с тем, что лучше подходит для базы данных NoSQL. Некоторые полезные ресурсы для запуска этого процесса - это статья о моделировании данных NoSQL и нашей новой серии видеороликов в Firebase для разработчиков SQL .

Также см. Комплекс "Firebase" содержит " Запросы

2
ответ дан Community 17 August 2018 в 14:18
поделиться
  • 1
    что делать, когда мы выбираем ID? давайте предположим, что у нас есть всего 10 сообщений .. и мы хотим получить только некоторые сообщения пользователей ..... например, в facebook мы получаем только наши сообщения в друзьях ..... так мы должны сделать, чтобы выполнить мои требования. пожалуйста, помогите мне сэр ..... теперь я делаю свой проект в колледже с использованием firebase .... это приложение, подобное facebook ... отправка запросов друзьям ... просмотр их сообщений на временной шкале и т. д. – Vignesh Viper 2 December 2016 в 12:51
  • 2
    Итак, ваше решение проблемы , в которой должен быть отображен голос пользователя , заключается в том, чтобы просто запускать каждый запрос для каждого элемента голосования? Я знаю, что запросы выполняются параллельно, и я могу сохранить поездку туда и обратно, выполняя все это в облачной функции, но это все еще звучит приветливо. – Ced 3 September 2017 в 21:09

Я нашел решение: мы не можем использовать FirebaseRecyclerAdapter. Вместо этого мы должны создать пользовательский адаптер, который расширяет RecyclerView.ViewHolder.

Для передачи значений этому адаптеру сначала нам нужно извлечь данные с помощью addValueEventListener, а затем мы должны передать значения нашему адаптеру.

Это мой код ...

final ArrayList<Timeline> timelines = new ArrayList<>();

    mDatabaseTimeline.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {

            final Timeline timeline = dataSnapshot.getValue(Timeline.class);

            if(timeline != null){

                mDatabaseFriends.child(mAuth.getCurrentUser().getUid()).child("active").addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {

                        if (mAuth.getCurrentUser().getUid().equals(timeline.getUid()) || dataSnapshot.hasChild(timeline.getUid())) {

                            timelines.add(timeline);
                            mTimelineRecycler.setAdapter(new RecyclerAdapter(TimelineFragment.this.getContext(), timelines));

                        }
                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                });
            }
        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

адаптер ----->

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

    Context context;
    ArrayList<Timeline> timeline;


    public RecyclerAdapter(Context context, ArrayList<Timeline> timeline) {
        this.context = context;
        this.timeline = timeline;



    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        LayoutInflater inflater = LayoutInflater.from(context);
        View row = inflater.inflate(R.layout.timeline_row, parent, false);
        TimelineViewHolder holder = new TimelineViewHolder(row);
        return holder;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {


        final String post_key = timeline.get(position).getPostkey();

        ((TimelineViewHolder) holder).setUsername(timeline.get(position).getUsername());


 }

    @Override
    public int getItemCount() {
        return timeline.size();
    }

    public class TimelineViewHolder extends RecyclerView.ViewHolder {
        public TimelineViewHolder(View itemView) {
            super(itemView);

            view = itemView;
        }

        public View getView() {
            return view;
        }    

        public void setUsername(String username) {
            TextView usernameTxtView = (TextView) view.findViewById(R.id.timeline_username);
            usernameTxtView.setText(username);
        }

    }
}
1
ответ дан Vignesh Viper 17 August 2018 в 14:18
поделиться
  • 1
    Замечательно, что вы нашли решение. И спасибо за обмен кодом! – Frank van Puffelen 2 December 2016 в 16:22
Другие вопросы по тегам:

Похожие вопросы: