Может ли кто-нибудь помочь мне получить изображение из хранилища 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>