如何将Glide显示的图像下载到设备存储中。科特林
我有一个Recyclerview,它使用Glide显示Firebase实时数据库中的图像。我在此RecyClerview中有一个下载按钮,希望用户在单击下载按钮后能够下载这些图像。我听说您可以使用Glide下载图像来进行内部存储,但是我对此不熟悉,因此我希望您的帮助。
适配器类
class AbstractAdapter(private val mContext: Context, private val abstractList: ArrayList<Abstract>) :
RecyclerView.Adapter<AbstractAdapter.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.abstract_image_view, parent, false)
return ViewHolder(view)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.imageView.setOnClickListener {
val intent = Intent(mContext, AbstractPreview::class.java)
intent.putExtra("abstract", abstractList[position].abstract.toString())
Toast.makeText(mContext, "Fullscreen view", Toast.LENGTH_SHORT).show()
mContext.startActivity(intent)
}
holder.downloadBtn.setOnClickListener {
}
Glide.with(mContext)
.load(abstractList[position].abstract)
.into(holder.imageView)
}
override fun getItemCount(): Int {
return abstractList.size
}
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val imageView: ImageView = itemView.findViewById(R.id.abstractImageView)
val downloadBtn: Button = itemView.findViewById(R.id.abstractDownloadBtn)
}
companion object {
private const val Tag = "RecyclerView"
}
这是下载按钮的onclicklister。
holder.downloadBtn.setOnClickListener {
}
如您所见,我知道如何使用滑行显示图像。我需要知道的是如何将这些图像下载到设备内部存储中。
I have a recyclerview that uses Glide to show images from Firebase Realtime database. I have a download button in this recyclerview and I want users to be able to download these images once the click the download button. I heard you can use Glide to download images to device internal storage, but I'm unfamiliar with this, so I would like your assistance.
Adapter class
class AbstractAdapter(private val mContext: Context, private val abstractList: ArrayList<Abstract>) :
RecyclerView.Adapter<AbstractAdapter.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.abstract_image_view, parent, false)
return ViewHolder(view)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.imageView.setOnClickListener {
val intent = Intent(mContext, AbstractPreview::class.java)
intent.putExtra("abstract", abstractList[position].abstract.toString())
Toast.makeText(mContext, "Fullscreen view", Toast.LENGTH_SHORT).show()
mContext.startActivity(intent)
}
holder.downloadBtn.setOnClickListener {
}
Glide.with(mContext)
.load(abstractList[position].abstract)
.into(holder.imageView)
}
override fun getItemCount(): Int {
return abstractList.size
}
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val imageView: ImageView = itemView.findViewById(R.id.abstractImageView)
val downloadBtn: Button = itemView.findViewById(R.id.abstractDownloadBtn)
}
companion object {
private const val Tag = "RecyclerView"
}
This is the onClickLister for the download button.
holder.downloadBtn.setOnClickListener {
}
As you can see, I know how to show images using Glide. All I need to know is how to download those images into the device internal storage.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
首先
,您需要将OKHTTP依赖性依赖于您的应用程序gradle: 注意:如果您正在进行改造,则不需要添加Okhttp依赖关系依赖性
OK现在我们将添加下载逻辑在您的视图模型中,将OKHTTP实例声明和下载函数添加到您的视图模型:
注意:您可以将下载逻辑移至存储库或任何您想要的任何地方,这取决于您。
现在您需要将
您的适配器,您需要将下载函数传递给lambda函数中的适配器,片段中的适配器创建应该看起来像:您的适配器构造函数看起来像这样:
现在,我们将在单击“侦听器”中添加下载图像
将此许可添加到您的androidmanifest.xml文件中,以便能够将文件添加到电话存储
注意:此权限此权限仅限SQK版本&lt; = 28这就是为什么我们添加了
android:maxSdkversion =“ 28”
我希望一切都清楚。
此代码应该给您想要的结果,请尝试一下,并告诉我是否有任何错误。
First of all you need to have okhttp dependency on your app gradle:
Note: if you are having retrofit no need to add okhttp dependency
Ok now we are going to add the download logic in your view model, add okhttp instance declaration and download function to your view model:
Note: you can move download logic to a repository or anywhere you want, it's up to you.
Now you need to pass your download function to your adapter inside a lambda function, adapter creation in your fragment should look like this:
Your adapter constructor will look like this:
now we will add downloadImage call inside the click listener
add this permission to your AndroidManifest.xml file to be able to add files to phone storage
Note: This permission is only required for sqk version <= 28 that's why we added
android:maxSdkVersion="28"
I hope that everything is clear.
This code should give you the result that you want, try it and tell me if there is anything wrong.