Как получить правильную таблицу для получения изображения профиля для каждого пользователя в таблицах firbase - PullRequest
1 голос
/ 01 мая 2020

Может ли кто-нибудь помочь мне здесь, я в замешательстве, поскольку я пробовал много примеров, но я все время ошибаюсь. Думаю, что firebase не подходит для начинающих, я пытаюсь добиться получения профиля из своей таблицы под названием Users и пользователей. Извлеките изображение профиля, используя Glide или Picasso, внутри этой таблицы пользователей у меня есть Имя пользователя, Пароль, электронная почта, profilePi c, userIds, URL-адрес моего профиля сохранен в profilePi c дочерней таблице при регистрации пользователя, я попробовал некоторый код но это дает ноль. Вот что я пробовал.

String url = dataSnapshot.child(Common.currentUser.getUserName() +"/"+ "profilePic").getValue().toString();
Picasso.with(getContext()).load(url).into(viewHolder.profileImageView);

Это работало при извлечении изображения, но показывало только изображения профиля на currentUserr, поэтому все держатели изображений имеют одно и то же изображение, также я попробовал это сначала, который извлекает URL вручную.

String url="https://firebasestorage.googleapis.com/v0/b/learnbravanese.appspot.com/o/images%2Fmoh2%2Fmoh2back?alt=media&token=d97130a4-c6ac-409f-a0ad-71fdcdea1e97";//Retrieved url as mentioned above
Picasso.with(getContext()).load(url).into(viewHolder.profileImageView);

, а также с этим кодом

String url = dataSnapshot.child(users.child("/")+ "/profilePic").getValue().toString();

                   Picasso.with(getContext()).load(url).into(viewHolder.profileImageView);

Я правильно понимаю, что путь верен, но я все еще получаю ошибку, подобную этой

Invalid Firebase Database path: https://learnbravanese.firebaseio.com/Users/mo/profilePic. Firebase Database paths must not contain '.', '#', '$', '[', or ']'

Может кто-то помочь мне, пожалуйста, как получить каждое изображение для своего пользователя и показать его на этом фрагменте?

вот мой полный фрагмент.

public class RankingFragment extends Fragment {
    StorageReference storageReference;
    DatabaseReference users,defaultimages,scoretbl,imageTable;
    private Uri filepath;
    private final int PICK_IMAGE_REQUEST = 71;
    private int id;
    DataSnapshot dataSnapshot;
    private Context context;
    String Storage_Path = "All_Image_Uploads/";
    View myFragment;
    FirebaseDatabase database;
    RecyclerView rankingList;
    LinearLayoutManager layoutManager;
    FirebaseRecyclerAdapter<Ranking,RankingViewHolder> adapter;
    DatabaseReference questionScore,rankingTable;
    int sum = 0; //score is default by zero
    private FirebaseAuth mAuth;

    // Root Database Name for Firebase Database.
    public static final String Database_Path = "All_Image_Uploads_Database";

    public static RankingFragment newInstance(){
        RankingFragment rankingFragment = new RankingFragment();
        return rankingFragment ;
    }



    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        database = FirebaseDatabase.getInstance();
        questionScore = database.getReference("Question_Score");
        rankingTable = database.getReference("Ranking");
        imageTable = database.getReference("DefaultImages");



        storageReference = FirebaseStorage.getInstance().getReference("All_Image_Uploads/");
        users = FirebaseDatabase.getInstance().getReference("Users");

    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        myFragment = inflater.inflate(R.layout.fragment_ranking,container,false);


        rankingList = (RecyclerView) myFragment.findViewById(R.id.ranking_list);
        layoutManager = new LinearLayoutManager(getActivity());
        rankingList.setHasFixedSize(true);

        layoutManager.setReverseLayout(true);
        layoutManager.setStackFromEnd(true);
        rankingList.setLayoutManager(layoutManager);
       // storageReference = FirebaseStorage.getInstance().getReference();
        users = FirebaseDatabase.getInstance().getReference("Users");
        defaultimages = FirebaseDatabase.getInstance().getReference().child("Users");
          final String pathtobackimage;

        updateScore(Common.currentUser.getUserName(), new RankingCallBack<Ranking>() {
            @Override
            public void callBack(Ranking ranking) {
                //Ranking Score update
                rankingTable.child(ranking.getUserName())
                        .setValue(ranking);
                // showRanking();
            }
        });

        adapter = new FirebaseRecyclerAdapter<Ranking, RankingViewHolder>(
                Ranking.class,
                R.layout.ranking_layout,
                RankingViewHolder.class,
                rankingTable.orderByChild("score")

        ) {
            @Override
            protected void populateViewHolder(final RankingViewHolder viewHolder, final Ranking model, int position) {
              //  StorageReference backref = storageReference.child("All_Image_Uploads/1584768076891.jpg");
               // FirebaseUser firebaseUser = mAuth.getCurrentUser();
                ImageView imageView;
               viewHolder.name_text.setText(model.getUserName());
                viewHolder.score_text.setText(String.valueOf(model.getScore()));
             //   String url = "https://firebasestorage.googleapis.com/v0/b/learnbravanese.appspot.com/o/images%2Fmoh2%2Fmoh2back?alt=media&token=d97130a4-c6ac-409f-a0ad-71fdcdea1e97";

                ;
                //users = FirebaseDatabase.getInstance().getReference().child("Users").child(model.getUserName());
                users.addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        //String imageUrl = dataSnapshot.child("profilePic").getValue().toString();
                       String url = dataSnapshot.child(Common.currentUser.getUserName() +"/"+ "profilePic").getValue().toString();
                        //  String url="https://firebasestorage.googleapis.com/v0/b/learnbravanese.appspot.com/o/images%2Fmoh2%2Fmoh2back?alt=media&token=d97130a4-c6ac-409f-a0ad-71fdcdea1e97";//Retrieved url as mentioned above
                        Picasso.with(getContext()).load(url).into(viewHolder.profileImageView);

                        //  String link =dataSnapshot.child("profilePic").getValue().toString();
                        Picasso.with(getContext()).load(url).into(viewHolder.profileImageView);
                        // Picasso.with(getContext()).load(dataSnapshot.child("profilePic").getValue(User_Info.class).toString())
                               // .into(viewHolder.profileImageView);
                       // Glide.with(getContext()).load(users.child(model.getUserName() +"/"+ "profilePic"))
                          //   .into(viewHolder.profileImageView);

                     //   Glide.with(getContext()).load(model.getImage()).into(viewHolder.profileImageView);
                       // Glide.with(getContext()).load(model.getUrlProfilePic())
                             //   .into(viewHolder.profileImageView);
                     //   Glide.with(viewHolder.profileImageView.getContext()).load(model.getProfilepic()).into(viewHolder.profileImageView);

                    }



                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError) {

                    }
                });






                viewHolder.setItemClickListener(new ItemClickListener() {
                    @Override
                    public void onClick(View view, int position, boolean isLongClick) {
                        Intent scoreDetail = new Intent(getActivity(),Score_Detail.class);
                        scoreDetail.putExtra("viewUser",model.getUserName());
                        startActivity(scoreDetail);
                    }
                });
            }
        };

        adapter.notifyDataSetChanged();
        rankingList.setAdapter(adapter);
        return myFragment;



    }



    private void updateScore(final String userName, final RankingCallBack<Ranking> callBack) {
        questionScore.orderByChild("user").equalTo(userName)
                .addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        for(DataSnapshot data:dataSnapshot.getChildren())
                        {
                            Question_Score quest = data.getValue(Question_Score.class);
                            sum += Integer.parseInt(quest.getScore());

                        }

                        Ranking ranking = new Ranking(userName,sum,userName,userName);
                        callBack.callBack(ranking);
                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError) {

                    }
                });
    }
}

1 Ответ

0 голосов
/ 09 мая 2020

После нескольких попыток мне удалось исправить нулевую проблему, попробовав этот код, я вызвал неправильную таблицу Firebase, которую я предполагаю.

@Override
        protected void populateViewHolder(final RankingViewHolder viewHolder, final Ranking model, int position) {


            ImageView imageView;
           viewHolder.name_text.setText(model.getUserName());
            viewHolder.score_text.setText(String.valueOf(model.getScore()));

            users.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {


                    Picasso.with(getActivity()).load(dataSnapshot.child(model.getUserName()).child("profilePic").getValue().toString())
                            .into(viewHolder.profileImageView);



                }




                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }
            });






            viewHolder.setItemClickListener(new ItemClickListener() {
                @Override
                public void onClick(View view, int position, boolean isLongClick) {
                    Intent scoreDetail = new Intent(getActivity(),Score_Detail.class);
                    scoreDetail.putExtra("viewUser",model.getUserName());
                    startActivity(scoreDetail);
                }
            });
        }

Я только учусь, поэтому понятия не имею, что остальное было не так.

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