简体   繁体   English

Glide无法从Firebase加载图像

[英]Glide is not loading image from firebase

I am working on a firebase project but I am facing a problem like when I upload an image on firebase I am not getting it in my original apk. 我正在开发一个Firebase项目,但是遇到一个问题,例如在Firebase上上传图像时,我的原始apk中没有该图像。 I upload an image on firebase and save its URL in the firebase database and then when I load it with the Recycler view and Glide library it stuck on the placeholder image but did not load the original image. 我将图像上传到firebase上,并将其URL保存在firebase数据库中,然后在使用Recycler视图和Glide库加载它时,它停留在占位符图像上,但没有加载原始图像。 Can anyone help me to solve this problem I provided my source code below:- 谁能帮助我解决这个问题,我在下面提供了我的源代码:-

EventActivity:- EventActivity:-

public class EventActivity extends AppCompatActivity {

    private RecyclerView mRecyclerView;
    private ImageAdapter imageAdapter;

    private DatabaseReference mDatabaseRef;

    private List<Upload> mUploads;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_event);

        mDatabaseRef = FirebaseDatabase.getInstance().getReference("NotifyImages");


        mRecyclerView = findViewById(R.id.recycler_view);

        mRecyclerView.setHasFixedSize(true);

        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));

        mUploads = new ArrayList<>();

        mDatabaseRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                    Upload upload = postSnapshot.getValue(Upload.class);
                    mUploads.add(upload);
                }

                imageAdapter = new ImageAdapter(EventActivity.this, mUploads);
                mRecyclerView.setAdapter(imageAdapter);
            }

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

            }
        });

    }
}

Upload class:- 上传课程:-

public class Upload {
    private String mName;
    private String mImageUri;

    public Upload() {
    }

    public Upload(String name, String ImageUri) {
        if (name.trim().equals("")) {
            name = "No name";

        }


        mName = name
        ;
        mImageUri = ImageUri;

    }

    public String getName() {
        return mName;
    }

    public void setName(String name) {
        mName = name;
    }

    public String getImageUri() {
        return mImageUri;
    }

    public void setImageUri(String ImageUri) {
        mImageUri = ImageUri;
    }

}

Image Adapter:- 图像适配器:

public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.ImageViewHolder> {


    private Context mContext;
    private List<Upload> mUploads;

    public ImageAdapter(Context context, List<Upload> uploads) {
        mContext = context;
        mUploads = uploads;
    }

    @NonNull
    @Override
    public ImageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(mContext).inflate(R.layout.image_item, parent, false);
        return new ImageViewHolder(v);
    }

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

        Upload uploadCurrent = mUploads.get(position);
        holder.textViewName.setText(uploadCurrent.getName());
//        Glide.with(mContext)
//                .load(uploadCurrent.getImageUri())
//                .centerCrop()
//                .into(holder.imageView);

        Glide.with(mContext)
                .load(uploadCurrent.getImageUri())
                .placeholder(R.mipmap.ic_launcher_round)
                .centerCrop()
                .into(holder.imageView);

    }

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

    public class ImageViewHolder extends RecyclerView.ViewHolder {

        public TextView textViewName;
        public ImageView imageView;

        public ImageViewHolder(@NonNull View itemView) {
            super(itemView);

            textViewName = itemView.findViewById(R.id.text_view_name);
            imageView = itemView.findViewById(R.id.image_upload);

        }
    }
}

activity_event.xml:- activity_event.xml:-

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffff">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </androidx.recyclerview.widget.RecyclerView>


</RelativeLayout>

ImageItem.xml:- ImageItem.xml:-

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#ffffff">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:id="@+id/text_view_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="8dp"
            android:layout_marginBottom="80dp"
            android:text="Name"
            android:textColor="@color/ColorRed"
            android:textSize="20sp" />

        <ImageView
            android:id="@+id/image_upload"
            android:layout_width="match_parent"
            android:layout_height="300dp"


            />

    </LinearLayout>

</androidx.cardview.widget.CardView>

You can easily copy my code and test it. 您可以轻松地复制我的代码并对其进行测试。 Please answer me if you find a solution. 如果您找到解决方案,请回答我。

Please make changes in your UploadFile() Function : 请在您的UploadFile()函数中进行更改:

fireRef.putFile(ImageUri)
    .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
        @Override
        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
            Handler handler = new Handler();
            handler.postDelayed(new Runnable() {
                @Override
                public void run() {

                }
            } , 5000);

            Toast.makeText(MainActivity.this, "Upload Successfull", Toast.LENGTH_SHORT).show();
            Task<Uri> urlTask = taskSnapshot.getStorage().getDownloadUrl();
            while (!urlTask.isSuccessful());
            Uri downloadUrl = urlTask.getResult();
            Upload upload = new Upload(mainEditTextNotify.getText().toString().trim(),
                    downloadUrl.toString());
            String uploadId = mDataRef.push().getKey();
            mDataRef.child(uploadId).setValue(upload);

        }
    })

The above code will provide you proper uri of image which you can store inside Database. 上面的代码将为您提供适当的uri图片,您可以将其存储在数据库中。

It will provide you proper uri which will help to load images in Glide. 它将为您提供适当的uri,这将有助于在Glide中加载图像。

But i suggest to store filepath from Firebase Storage. 但我建议从Firebase Storage存储文件路径。 Cause if uri token expires then you need generate uri token and change with old one. 如果uri令牌到期,则需要生成uri令牌并更改为旧令牌。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM