Firebase Storage получает изображение пользователя из хранилища базы данных и показывает его в imageView - PullRequest
0 голосов
/ 09 марта 2020

Может ли кто-нибудь помочь мне получить изображение из хранилища Firebase и показать его в моей деятельности (RankingViewHolder)

Я получаю эту ошибку с этим кодом (database.DataSnapshot com.google.firebase.database. DataSnapshot.child (java .lang.String) 'на нулевую ссылку на объект) после того, как я следовал многим примерам, у меня есть страница профиля, которая получает изображение пользователя с помощью Glide или Picasso, но я также хочу получить изображение Пользователь в RankingView, который я создал, чтобы пользователи могли видеть, кто находится в топ-листе рейтинга, и фотографию пользователя, которую они уже загрузили на странице профиля. Я не уверен, что здесь не хватает, ранг работает нормально. Я получаю имя пользователя и оценку, но я не могу показать их фотографию в профиле. «Glide.with» - это источник ошибки, я уверен, что чего-то там не хватает, пожалуйста, помогите.

My ViewHolderActivity

public class RankingViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
StorageReference storageReference;
DatabaseReference users,defaultimages,scoretbl;

CircleImageView imageView;
public TextView name_text,score_text,stars;
public RatingBar ratingBar;
public ImageView img;
private ItemClickListener itemClickListener;
DataSnapshot dataSnapshot;
public RankingViewHolder(View itemView) {
    super(itemView);
    name_text = (TextView) itemView.findViewById(R.id.name_text);
    score_text = (TextView) itemView.findViewById(R.id.score_text);
    ratingBar = (RatingBar) itemView.findViewById(R.id.ratingBar1);

    storageReference = FirebaseStorage.getInstance().getReference();
    users = FirebaseDatabase.getInstance().getReference("Users");
    defaultimages = FirebaseDatabase.getInstance().getReference("DefaultImages");

    LayerDrawable stars = (LayerDrawable) ratingBar.getProgressDrawable();
    stars.getDrawable(2).setColorFilter(Color.YELLOW, PorterDuff.Mode.SRC_ATOP);
   img = (ImageView) itemView.findViewById(R.id.img1);

   Glide.with(itemView.getContext()).load(dataSnapshot.child(Common.currentUser.getUserName()).child("pathtoprofileimage").getValue().toString())
   .into(img);

    itemView.setOnClickListener(this);
}

public void setItemClickListener(ItemClickListener itemClickListener) {
    this.itemClickListener = itemClickListener;
}

@Override
public void onClick(View view) {
    itemClickListener.onClick(view,getAdapterPosition(),false);

}

}

и мой Рейтинг Фрагмент

public class RankingFragment extends Fragment {
StorageReference storageReference;
DatabaseReference users,defaultimages,scoretbl;
private Uri filepath;
private final int PICK_IMAGE_REQUEST = 71;
private int id;


View myFragment;
FirebaseDatabase database;
RecyclerView rankingList;
LinearLayoutManager layoutManager;
FirebaseRecyclerAdapter<Ranking,RankingViewHolder> adapter;
DatabaseReference questionScore,rankingTable;
int sum = 0; //score is default by zero

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");

    storageReference = FirebaseStorage.getInstance().getReference();
    users = FirebaseDatabase.getInstance().getReference("Users");
    defaultimages = FirebaseDatabase.getInstance().getReference("DefaultImages");
    scoretbl = FirebaseDatabase.getInstance().getReference("Scores/"+Common.currentuser.getUsername());



}

@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);
    //Using orderByChild method , this will sort the ranking in ascending order
    //reverse the data by using layout manager
    layoutManager.setReverseLayout(true);
    layoutManager.setStackFromEnd(true);
    rankingList.setLayoutManager(layoutManager);



    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(RankingViewHolder viewHolder, final Ranking model, int position) {

            ImageView imageView;
            viewHolder.name_text.setText(model.getUserName());
            viewHolder.score_text.setText(String.valueOf(model.getScore()));
            //viewHolder.img.setImageIcon(users);
             viewHolder.img.findViewById(R.id.img1);





            //  viewHolder.img(getBaseContext()).load(dataSnapshot.child(Common.currentUser.getUserName()).child("pathtoprofileimage").getValue().toString())



            //prevent crash when user click
            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);
                    callBack.callBack(ranking);
                }

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

                }
            });
}

}

и макет xml

<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="60dp"

app:cardBackgroundColor="@color/colorDark">

<LinearLayout
    android:orientation="horizontal"
    android:weightSum="12"
    android:gravity="center"
    android:background="@color/colorDark"
    android:layout_gravity="center"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">


    <ImageView
        android:id="@+id/img1"
        android:layout_width="42dp"
        android:layout_height="44dp"
        android:layout_marginLeft="7dp"
        android:background="@color/colorDark"

        android:src="@drawable/ic_android_icon" />

    <TextView
        android:id="@+id/name_text"
        android:layout_width="173dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dp"
        android:layout_weight="10"

        android:text="Name"
        android:textColor="#FFFFFF"
        android:textSize="16sp" />

    <RatingBar
        android:id="@+id/ratingBar1"
        android:layout_width="138dp"
        android:layout_height="40dp"


        android:layout_weight="0"
        android:indeterminate="false"
        android:isIndicator="false"

        android:numStars="5"
        android:rating="0"
        android:scaleX=".4"
        android:scaleY=".4"

        android:stepSize="0"
        android:theme="@style/CustomRatingBar" />


    <TextView
        android:id="@+id/score_text"
        android:layout_width="71dp"
        android:layout_height="20dp"
        android:layout_weight="2"

        android:text="score"
        android:textColor="#FFFFFF"
        android:textSize="16sp" />

</LinearLayout>

...