FirebaseUI не позволяет мне искать более одного, используя базу данных Firebase - PullRequest
0 голосов
/ 21 мая 2018

У меня есть массив имен пользователей (идентификаторов), которые мне нужно искать с использованием базы данных Firebase и рендеринга с использованием интерфейса Firebase, способ, которым я делаю это, показывает только последнего пользователя, а не всех пользователей, имеющих эти идентификаторы.Мне нужно сделать карты или всех пользователей с разными идентификаторами.

Это мой класс

public class UserMessageListFragment extends Fragment {

    private ProgressDialog progressDialog;
    private final String TAG = "UsersMessageList";
    private RecyclerView mResultList;
    private ArrayList<String> arrayUsers;

    public static UserMessageListFragment newInstance() {
        return new UserMessageListFragment();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_user_message_list, container, false);

        mResultList = view.findViewById(R.id.message_list);
        mResultList.setHasFixedSize(true);
        mResultList.setLayoutManager(new LinearLayoutManager(mResultList.getContext()));

        final DatabaseReference refMessages = FirebaseDatabase.getInstance().getReference();
        final DatabaseReference ref= FirebaseDatabase.getInstance().getReference().child("usuarios");

        refMessages.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                if(dataSnapshot.getKey().contains(UserDetails.username+ "_")) {
                    String[] userChatWithId = dataSnapshot.getKey().split(UserDetails.username+"_");
                    final Query firebaseSearchQuery = ref.orderByChild("username").equalTo(userChatWithId[1]);
                    final FirebaseRecyclerOptions<User> options =
                            new FirebaseRecyclerOptions.Builder<User>()
                                    .setQuery(firebaseSearchQuery, User.class)
                                    .build();
                    bindAndBuildFirebaseUi(options);
                }
            }

            @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) {

            }
        });
//        progressDialog = new ProgressDialog(getContext());
//        progressDialog.setMessage("Carregando...");
//        progressDialog.show();

        return view;
    }


    public void bindAndBuildFirebaseUi(FirebaseRecyclerOptions options) {
        final FirebaseRecyclerAdapter<User, UsersViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<User, UsersViewHolder>(options) {
            @Override
            public UsersViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.message_list_layout, parent, false);
                return new UsersViewHolder(v);
            }

            @Override
            protected void onBindViewHolder(final UsersViewHolder holder, int position, final User model) {
                holder.bind(model);
                holder.itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        UserDetails.chatWithId = model.getUsername();
                        UserDetails.chatWith = model.getName();
                        startActivity(new Intent(getContext(), Chat.class));
                    }
                });
            }
        };
        firebaseRecyclerAdapter.startListening();
        mResultList.setAdapter(firebaseRecyclerAdapter);
    }
}

, в этой строке

 final Query firebaseSearchQuery = ref.orderByChild("username").equalTo(userChatWithId[1]);

будут разные значениявнутри userChatWithid 1 , однако FirebaseUI отображает только последний.

Я начинаю ненавидеть FirebaseUI, потому что у меня так много проблем с ним.

Можеткто-нибудь, помогите мне, пожалуйста ???

enter image description here

1 Ответ

0 голосов
/ 21 мая 2018

Вы делаете очень необычные вещи ... FirebaseUI будет обрабатывать все слушатели базы данных и запросы для вас.Все, что вам нужно сделать, это перейти в корневой узел, содержащий всех ваших пользователей, а об остальном позаботятся.(Я полагаю, что в вашем случае это usuarios, поэтому ref справится с задачей.) Я бы рекомендовал прочитать документы: https://github.com/firebase/FirebaseUI-Android/blob/master/database/README.md

...