Как сделать сортировку по значению true , firebase database android?

137
31 декабря 2019, 23:10

База выглядит таким образом, в ключе "stars" будут создаваться ключи с id пользователей.У них есть значения true или false. Мне же нужно сделать запрос , что бы он находил свой id и проверял если значение истина , то показывать в списке,если ложно , то не отображать в списке. public abstract class PostListFragment extends Fragment { private Activity mActivity; private DatabaseReference mDatabase; private FirebaseRecyclerAdapter mAdapter; private RecyclerView mRecycler;

    public PostListFragment() {
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);
        View rootView = inflater.inflate(R.layout.fragment_all_posts, container, false);
        mRecycler = rootView.findViewById(R.id.messages_list);
        mRecycler.setHasFixedSize(true);
        mDatabase = FirebaseDatabase.getInstance().getReference();
        return rootView;
    }
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        mActivity = getActivity();
        final Dialog mDialog = new Dialog(mActivity, R.style.NewDialog);
        mDialog.addContentView(
                new ProgressBar(mActivity),
                new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)
        );
        mDialog.setCancelable(true);
        mDialog.show();
        // Set up Layout Manager, reverse layout
        LinearLayoutManager mManager = new LinearLayoutManager(mActivity);
        mManager.setReverseLayout(true);
        mManager.setStackFromEnd(true);
        mRecycler.setLayoutManager(mManager);
        // Set up FirebaseRecyclerAdapter with the Query
        Query postsQuery = getQuery(mDatabase);
        FirebaseRecyclerOptions<Post> options = new FirebaseRecyclerOptions.Builder<Post>()
                .setQuery(postsQuery, Post.class)
                .build();
        mAdapter = new FirebaseRecyclerAdapter<Post, PostViewHolder>(options) {
            @Override
            protected void onBindViewHolder(PostViewHolder viewHolder, int position, final Post model) {
                final DatabaseReference postRef = getRef(position);
                // Determine if the current user has liked this post and set UI accordingly
                if (model.stars.containsKey(getUid())) {
                    viewHolder.starView.setImageResource(R.drawable.ic_toggle_star_24);
                } else {
                    viewHolder.starView.setImageResource(R.drawable.ic_toggle_star_outline_24);
                }
                if(!TextUtils.isEmpty(model.kzSongytblink)) viewHolder.mImage.setImageResource(R.drawable.on_line_logo);
                else viewHolder.mImage.setImageResource(R.drawable.off_line_logo);

                // Bind Post to ViewHolder, setting OnClickListener for the star button
                viewHolder.bindToPost(model, new View.OnClickListener() {
                    @Override
                    public void onClick(View starView) {
                        // Need to write to both places the post is stored
                        DatabaseReference globalPostRef = mDatabase.child("songsDB").child(postRef.getKey());
                        // Run two transactions
                        onStarClicked(globalPostRef);
                    }
                });
                viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Intent intent = new Intent(mActivity, PostDetailActivity.class);
                        intent.putExtra(PostDetailActivity.EXTRA_POST_KEY, postRef.getKey());
                        startActivity(intent);
                    }
                });
            }
            @Override
            public PostViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
                LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
                return new PostViewHolder(inflater.inflate(R.layout.item_post, viewGroup, false));
            }
            @Override
            public void onDataChanged() {
                super.onDataChanged();
                mDialog.dismiss();
            }
        };
        mRecycler.setAdapter(mAdapter);
    }
private void onStarClicked(DatabaseReference postRef) {
        postRef.runTransaction(new Transaction.Handler() {
            @Override
            public Transaction.Result doTransaction(MutableData mutableData) {
                Post p = mutableData.getValue(Post.class);
                if (p == null) {
                    return Transaction.success(mutableData);
                }
                if (p.stars.containsKey(getUid())) {
                    // Unstar the post and remove self from stars
                    p.starCount = p.starCount - 1;
                    p.stars.remove(getUid());
                } else {
                    // Star the post and add self to stars
                    p.starCount = p.starCount + 1;
                    p.stars.put(getUid(), true);
                }
                // Set value and report transaction success
                mutableData.setValue(p);
                return Transaction.success(mutableData);
            }
            @Override
            public void onComplete(DatabaseError databaseError, boolean b, DataSnapshot dataSnapshot) {
                Log.d("postTransaction", "onComplete:" + dataSnapshot.getKey());
            }
        });
    }}
READ ALSO
Обработчик нажатий на строку textview

Обработчик нажатий на строку textview

Есть фрагмент в котором я подгружаю данные из firebaseРодительский каталог называется "News" У него есть "ребёнок" news1, news2, newsn

152
Как в Freemarker проверить существования ключа в Map и вывести значения?

Как в Freemarker проверить существования ключа в Map и вывести значения?

Подскажите пожалуйста! Как в Freemarker проверить существования ключа в Map и вывести значения?

140
Два maven проекта в одном

Два maven проекта в одном

У меня есть два отдельных maven проекта data_importer и data_exporterОба проекта собираются в свои отдельные Docker контейнеры

189