Проблемы с получением данных Firebase - PullRequest
0 голосов
/ 11 мая 2018

Хорошо, поэтому я пытаюсь создать функцию подписчика / подписчика (не совсем лучший подход) и продолжаю сталкиваться с проблемами, когда дело доходит до извлечения данных из базы данных Firebase.Я использую RecyclelerView, который показывает всех пользователей, каждый пользователь имеет кнопку «следовать / следовать».Проблема, с которой я сталкиваюсь, заключается в проверке того, подписан ли уже пользователь или нет.Я разберусь с кодом ниже

ViewHolder для RecyclerView

@Override
        public UserViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(getContext())
                    .inflate(R.layout.artist_list_single, parent, false);
            TextView username = (TextView) view.findViewById(R.id.all_users_name);
            username.setTypeface(notes_font);

            return new UserViewHolder(view);
        }

        @Override
        protected void onBindViewHolder(@NonNull UserViewHolder holder, int position, @NonNull Users model) {

            final String current_uid = currentUser.getUid();
            final String user_uid = getRef(position).getKey();
            final String test = mUserDatabase.child(current_uid).child("following").child(user_uid).getKey();

            final Button follow_following = (Button) holder.mView.findViewById(R.id.follow_button);
            follow_following.setTypeface(notes_font);

            follow_following.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if (!test.equals(user_uid)) {
                        Toast.makeText(getActivity(), test, Toast.LENGTH_LONG).show();
                        mUserDatabase.child(current_uid).child("following").child(user_uid).setValue("true").addOnCompleteListener(new OnCompleteListener<Void>() {
                            @Override
                            public void onComplete(@NonNull Task<Void> task) {
                                if (task.isSuccessful()) {
                                    mUserDatabase.child(user_uid).child("follower").child(current_uid).setValue("true");
                                    follow_following.setBackgroundResource(R.drawable.login_button);
                                    follow_following.setTextColor(getResources().getColor(R.color.white));
                                    follow_following.setText("Following");
                                } else {
                                    Toast.makeText(getActivity(), "Error", Toast.LENGTH_LONG).show();
                                }
                            }
                        });
                    } else if (test.equals(user_uid)) {
                        Toast.makeText(getActivity(), test, Toast.LENGTH_LONG).show();
                        AlertDialog.Builder dialog = new AlertDialog.Builder(getActivity())
                                .setTitle("Unfollow?")
                                .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        mUserDatabase.child(current_uid).child("following").child(user_uid).removeValue().addOnCompleteListener(new OnCompleteListener<Void>() {
                                            @Override
                                            public void onComplete(@NonNull Task<Void> task) {
                                                if (task.isSuccessful()) {
                                                    follow_following.setBackgroundResource(R.drawable.round_outline);
                                                    follow_following.setTextColor(getResources().getColor(R.color.app_theme));
                                                    follow_following.setText("Follow");
                                                } else {
                                                    Toast.makeText(getActivity(), "Error", Toast.LENGTH_LONG).show();
                                                }
                                            }
                                        });
                                    }
                                })
                                .setNegativeButton("No", null)
                                .setCancelable(false);
                        dialog.show();
                    }
                }
            });

                holder.setName(model.getName());
                holder.setThumbImage(model.getThumbImage());
                holder.setStatus(model.getStatus());


            holder.mView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                    Intent profileIntent = new Intent(getActivity(), All_Profiles.class);
                    profileIntent.putExtra("user_uid", user_uid);
                    startActivity(profileIntent);
                }
            });
        }

    };

Так что при получении тестовой строки, находится ли User_uid в базе данных или нет, он обнаруживает этот test.equals (user_uid)верно .. не уверен, где я ошибся там.Итак, затем я попытался использовать ValueEventListening для извлечения данных с помощью onDataChange () следующим образом:

@Override
        protected void onBindViewHolder(@NonNull UserViewHolder holder, int position, @NonNull Users model) {

            final String current_uid = currentUser.getUid();
            final String user_uid = getRef(position).getKey();
            final String test = mUserDatabase.child(current_uid).child("following").child(user_uid).getKey();

            mUserDatabase.child(current_uid).child("following").addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    testing = dataSnapshot.child(user_uid).getKey();
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });

            final Button follow_following = (Button) holder.mView.findViewById(R.id.follow_button);
            follow_following.setTypeface(notes_font);

            follow_following.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    mUserDatabase.child(current_uid).child("following").addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                            testing = dataSnapshot.child(user_uid).getKey();
                        }

                        @Override
                        public void onCancelled(DatabaseError databaseError) {

                        }
                    });
                    if (!testing.equals(user_uid)) {
                        Toast.makeText(getActivity(), testing, Toast.LENGTH_LONG).show();
                        mUserDatabase.child(current_uid).child("following").child(user_uid).setValue("true").addOnCompleteListener(new OnCompleteListener<Void>() {
                            @Override
                            public void onComplete(@NonNull Task<Void> task) {
                                if (task.isSuccessful()) {
                                    mUserDatabase.child(user_uid).child("follower").child(current_uid).setValue("true");
                                    follow_following.setBackgroundResource(R.drawable.login_button);
                                    follow_following.setTextColor(getResources().getColor(R.color.white));
                                    follow_following.setText("Following");
                                } else {
                                    Toast.makeText(getActivity(), "Error", Toast.LENGTH_LONG).show();
                                }
                            }
                        });
                    } else if (testing.equals(user_uid)) {
                        Toast.makeText(getActivity(), testing, Toast.LENGTH_LONG).show();
                        AlertDialog.Builder dialog = new AlertDialog.Builder(getActivity())
                                .setTitle("Unfollow?")
                                .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        mUserDatabase.child(current_uid).child("following").child(user_uid).setValue("false").addOnCompleteListener(new OnCompleteListener<Void>() {
                                            @Override
                                            public void onComplete(@NonNull Task<Void> task) {
                                                if (task.isSuccessful()) {
                                                    follow_following.setBackgroundResource(R.drawable.round_outline);
                                                    follow_following.setTextColor(getResources().getColor(R.color.app_theme));
                                                    follow_following.setText("Follow");
                                                } else {
                                                    Toast.makeText(getActivity(), "Error", Toast.LENGTH_LONG).show();
                                                }
                                            }
                                        });
                                    }
                                })
                                .setNegativeButton("No", null)
                                .setCancelable(false);
                        dialog.show();
                    }
                }
            });

                holder.setName(model.getName());
                holder.setThumbImage(model.getThumbImage());
                holder.setStatus(model.getStatus());


            holder.mView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                    Intent profileIntent = new Intent(getActivity(), All_Profiles.class);
                    profileIntent.putExtra("user_uid", user_uid);
                    startActivity(profileIntent);
                }
            });
        }

примечание: я вызывал его дважды, потому что, вызывая его только один раз, по какой-то причине onClick извлекал только ключ первого пользователя.и вызывая его только один раз во время каждого сбоя onClick.звонить по нему дважды отчасти сработало для меня, за исключением того, что каждый раз, когда я нажимаю кнопку, ключ не обновляется, пока я не нажму на него дважды ... в общем, я действительно в растерянности.прошу прощения за мое невежество, так как я все еще учусь, я знаю, что мой код не идеален (или даже близко смеется), поэтому, пожалуйста, имейте это в виду.Кроме того, я читал официальную документацию по Firebase и Android обо всем, что я пытаюсь сделать больше недели, я бы не приехал сюда, если бы не сделал этого.Спасибо всем заранее за любую помощь, вы можете предоставить:)

вот изображение моей базы данных Firebase Database

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...