【问题标题】:How to get the correct table to fetch profile image for each user in firbase tables如何获取正确的表以获取 firebase 表中每个用户的个人资料图像
【发布时间】:2020-08-15 13:54:20
【问题描述】:

任何人都可以在这里帮助我我很困惑,因为我尝试了很多例子,但我总是弄错我猜 firebase 对初学者不友好,我想要实现的是从我的表中获取一个名为 Users 的个人资料图片和使用 Glide 或 Picasso 获取个人资料图片,在此用户表中,我有用户名、密码、电子邮件、profilePic、userIds,我的个人资料图片网址保存在用户注册的 profilePic 子表中,我尝试了一些代码,但它给出了 null .这是我尝试过的。

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

                    }
                });
    }
}

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    经过几次尝试后,我通过尝试此代码设法解决了 null 问题,但我猜测我调用的是错误的 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);
                    }
                });
            }
    

    我只是在学习,所以我不知道还有什么问题。

    【讨论】:

      猜你喜欢
      • 2021-04-04
      • 2018-08-25
      • 2016-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多