Загрузка изображений в режиме переработчика с Glide - PullRequest
0 голосов
/ 30 декабря 2018

Я пытаюсь загрузить изображения из firebase в адаптер утилизатора и отобразить их

Я попытался решить эту проблему двумя способами: первый блок кода привел к ошибке «Невозможно начать загрузкув еще не присоединенном представлении или фрагменте, где getActivity () возвращает значение NULL (что обычно происходит при вызове getActivity () перед присоединением фрагмента или после уничтожения фрагмента) "

Второй метод, запущенный приложениемно никакие изображения не были загружены при чтении других подобных проблем. Я видел проверку isAdded (), но я не мог заставить ее работать, изображения загружаются в папку в firebase с именем post_images, а остальные данные связаны ссообщение (приложение, похожее на Instagram, с публикацией) находится в firestore

public BlogRecyclerAdapter(List<BlogPost> blog_list) {

    this.blog_list = blog_list;

}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.blog_list_item, parent, false);
    return new ViewHolder(view);
}


@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {

    String desc_data = blog_list.get(position).getDesc();
    holder.setDescText(desc_data);

    String image_url = blog_list.get(position).getImage_url();
    holder.setBlogImage(image_url);

}

@Override
public int getItemCount() {
    return blog_list.size();
}

public class ViewHolder extends RecyclerView.ViewHolder {

    private View mView;

    private TextView descView;
    private ImageView blogImageView;
    public Context mContext;

    public ViewHolder(View itemView) {
        super(itemView);
        mView = itemView;

    }

    public void setDescText(String descText) {

        descView = mView.findViewById(R.id.blog_desc);
        descView.setText(descText);

    }

    public void setBlogImage(final String downloadUri) {

        blogImageView = mView.findViewById(R.id.Post_image_view);
        Glide.with(mContext).load(downloadUri).into(blogImageView);


    }}}

Попытка другого метода

        mCurrentUser = FirebaseAuth.getInstance().getCurrentUser();
        mImageStorage = FirebaseStorage.getInstance().getReference();

        final String current_uid = mCurrentUser.getUid();

        mUserDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child(current_uid);
        mUserDatabase.keepSynced(true);

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

                StorageReference filepath = mImageStorage.child("profile_images").child(current_uid + (".jpeg"));
                Log.d("heere", "S");

                // This gets the download url async
                filepath.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                    @Override
                    public void onSuccess(Uri uri) {

                        //The download url
                        final String downloadUrl = uri.toString();
                        Log.d("tag", downloadUrl);
                        if (!downloadUrl.equals("default")) {

                            Glide.with(mContext).load(downloadUrl).into(blogImageView);

                        //    Glide.with(getApplicationContext()).load(downloadUrl).into(mDisplayImage);


                        }
                    }});}

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

            }
        });}}}

Я бы хотел, чтобы изображение отображалось в окне утилизатора

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018
  1. Ваш mContext не инициализирован
  2. mContext должен быть глобальной переменной RecyclerView.Adapter, а не переменной ViewHolder
  3. mContext должен инициализироваться в функции onCreateViewHolder таким образом

    this.mContext = parent.getContext();
0 голосов
/ 31 декабря 2018

Измените эту строку

Glide.with(mContext).load(downloadUri).into(blogImageView);

на это вместо:

Glide.with(itemView.getContext()).load(downloadUri).into(blogImageView);

Все ViewHolder экземпляры имеют поле itemView, которое гарантированно будетненулевой, и вы можете получить контекст из этого.

...