如何将图像从服务器(api)存储到房间数据库

2024-02-24

我想将来自 api 的图像存储到房间数据库中。我从 api 接收数据和图像。当我处于在线模式时,图像是使用 api 提供的 url 加载的,但当离线时,图像应该以离线模式从数据库中存储和检索。

我像这样加载图像(它加载图像):----

 if (!data.data.images.isNullOrEmpty()) {

            val base = BuildConfig.SERVER_URL.replace("api/", "")

            data.data.images.forEachIndexed { pos, it ->

                Glide.with(this)
                    .asBitmap()
                    .load(base + it?.imagePath)
                    .into(object : CustomTarget<Bitmap>() {
                        override fun onResourceReady(
                                resource: Bitmap,
                                transition: Transition<in Bitmap>?
                        ) {
                            imageClick = pos + 1
                            val file = File(
                                    getExternalFilesDir(Environment.DIRECTORY_PICTURES),
                                    "${System.currentTimeMillis()}${Constants.PROFILE_PIC_FILE_EXTENSION}"
                            )
                            imagePath = file.absolutePath
                            Utils.saveBitmapToFile(resource, imagePath)
                            Utils.compressImage(imagePath)
                            onCropImageResult(resource)
                        }

                        override fun onLoadCleared(placeholder: Drawable?) {

                        }
                    })
                     }
                     }

我的 JSON 是这样的:--------

 "data" : {
  .
  .
  .
"images" : [ {
  "assetImageId" : 4113,
  "transactionTypeId" : 2,
  "transactionId" : 88341,
  "imageURL" : "",
  "imagePath" : "UserData/AssetImages/INS-0000017673_1616058387618.jpg",
  "createdBy" : 0,
  "createdOn" : "0001-01-01T00:00:00",
  "updatedBy" : null,
  "updatedOn" : null,
  "isActive" : 0,
  "isNew" : false,
  "isDeleted" : false,
  "isChanged" : false,
  "timestamp" : null
}, {
  "assetImageId" : 4114,
  "transactionTypeId" : 2,
  "transactionId" : 88341,
  "imageURL" : "",
  "imagePath" : "UserData/AssetImages/INS-0000017673_1616058402212.jpg",
  "createdBy" : 0,
  "createdOn" : "0001-01-01T00:00:00",
  "updatedBy" : null,
  "updatedOn" : null,
  "isActive" : 0,
  "isNew" : false,
  "isDeleted" : false,
  "isChanged" : false,
  "timestamp" : null
} ],
 }

我的实体表:---

@Entity(tableName = DatabaseConstants.MYTABLE, indices = [Index(value = ["requestId"], unique = true)])
  data class AllocationDetailsByIdEntity(
    var requestId: String? = null,
    var subLocation: String? = null,
    var amsTagId: String? = null,
    var status: String? = null,
    var installedBy: String? = null,
    var installedDate: String? = null,
    val assetTree: String? = null,
    var images: List<ImagesssItem?>? =null,
    @PrimaryKey(autoGenerate = true) var id: Int? = null
   ): Serializable

   @Entity
 data class ImagesssItem (
var assetImageId :String?= null,
var transactionTypeId: Int? = null,
var transactionId: Int? = null,
var imageURL: String? = null,
var imagePath: String? = null
@PrimaryKey(autoGenerate = true) var id : Int? = null

 ):Serializable

尝试了解决方案 1:--这不起作用

    .diskCacheStrategy(DiskCacheStrategy.DATA)

知道如何使用 Room db 存储这些图像吗? 需要帮忙 ... 提前致谢


尝试将其存储为 URI。或者创建一个像这样的类型转换器

class Converter {

    @TypeConverter
    fun fromBitmap(bmp: Bitmap): ByteArray {
        val outputStream = ByteArrayOutputStream()
        bmp.compress(Bitmap.CompressFormat.PNG, 100, outputStream)
        return outputStream.toByteArray()
    }

    @TypeConverter
    fun toBitmap(byteArray: ByteArray): Bitmap {
        return BitmapFactory.decodeByteArray(byteArray, 0, byteArray.size)
    }
}

并在 roomdb 类中添加此类型转换器

@TypeConverters(Converter::class)
abstract class RunningDatabase : RoomDatabase() {

  ///


}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将图像从服务器(api)存储到房间数据库 的相关文章

  • 对话框上的 EditText 不返回任何文本

    我太累了 找不到错误 我没有发现任何错误 但我没有从 editText 收到任何文本 请看下面的代码 活动密码 xml
  • Android 应用被 Google Play 拒绝

    我最近向 Google Play 商店提交了一个 Android 应用程序 但收到一条消息说我的应用程序已被拒绝 我不确定问题是什么 也找不到确切的解决方案 拒绝原因 违反了禁止行为条款 内容政策 经过定期审核后 我们确定您的应用程序支持
  • Firestore - RecycleView - 图像持有者

    我不知道如何编写图像的支架 我已经设置了 2 个文本 但我不知道图像的支架应该是什么样子 你能帮我告诉我图像的文字应该是什么样子才能正确显示吗 holder artistImage setImageResource model getArt
  • 如何从 Retrofit2 获取字符串响应?

    我正在做 android 正在寻找一种方法来执行超级基本的 http GET POST 请求 我不断收到错误 java lang IllegalArgumentException Unable to create converter for
  • 如何以编程方式断开拨出呼叫

    我使用以下代码以编程方式断开呼叫 但它不起作用 private void callDisconnect try TelephonyManager manager TelephonyManager this getSystemService
  • Android:应用内计费V3超时返回哪个响应码?

    出现网络超时情况时 Google Play 应用内结算服务 ice er V3 将返回哪些响应状态代码 它的所有功能都是统一的吗 我将在这里描述我的发现 我通过拔掉主机插头 在安装了全功能 GP GP Store V3 10 10 GP S
  • 以编程方式更新 Android 中的联系人姓名和电话号码

    我创建一个应用程序来读取 更新 删除联系人详细信息 这是更新联系人姓名和电话号码的问题 有人可以帮助我吗 我该怎么做 我正在使用以下代码 但它不起作用 Override public View onCreateView LayoutInfl
  • 研究MySQL、SQLite源码了解RDBMS实现[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我知道实现数据库是一个很大的话题 但我想通过研究数据库系统的源代码来基本了解数据库系统的工作原理 例如
  • 如何强制从本机代码打开 Android 软键盘?

    我有一个游戏 当用户触摸屏幕时 它使用从 C 到 Java 的回调来强制打开软键盘 Java代码很简单是这样的 this inputMethodManager toggleSoftInput InputMethodManager SHOW
  • 如何持续更新MPAndroidChart中的Y轴值

    我希望 LineChart 中的轴能够实时调整其最大值和最小值 当新数据的 Y 值增加 正值和负值 时 像 ResetAxisMaxValue 和 ResetAxisMinValue 这样的函数可以很好地工作 但是 一旦信号再次变低 Y 值
  • 导航抽屉默认片段

    我是一名新手开发人员 我正在将导航抽屉与 android support v7 集成到我的应用程序中 我有一个问题 当我启动应用程序时 主要布局是这样的
  • 如何在进入新活动之前终止线程和处理程序

    大家好 在我尝试清理处理程序时 这段代码可能有点混乱 因为我一直在尝试追踪崩溃发生的位置 我有一个对话框活动 显示密码输入 进度条由线程和处理程序动画显示 似乎当我试图查看进度条是否完成并尝试终止线程时 当我尝试进入新活动时 我这样做的方式
  • 无法获取 Facebook 传入请求

    我正在尝试在我的 Facebook android 游戏应用程序中实现发送数据并接受该数据 我正在关注https developers facebook com docs android send requests notification
  • Android 从命令行停止模拟器

    这个问题与如何通过命令行关闭Android模拟器 https stackoverflow com questions 5912403 how to shut down android emulator via cmd 但是 在尝试第一个答案
  • Nexus 7 (2013) 和 Win 7 64 - 尽管检查了许多论坛和在线资源,仍无法安装 USB 驱动程序

    我正在尝试设置 Nexus 7 2013 进行调试 但我在安装 USB 驱动程序的步骤中陷入困境 到目前为止 这是我尝试过的 采取的步骤 在 Nexus 7 2013 上打开调试模式 连接设备至 PC 下载 Google USB 驱动程序于
  • android httprequest java.net.UnknownHostException

    我想用android发出http请求 是使用这个 void testHTTP HttpClient httpClient new DefaultHttpClient HttpUriRequest request new HttpPost h
  • 无法将类型“System.IO.Stream”隐式转换为“Java.IO.InputStream”

    我提到了一些类似的问题 但没有一个涉及IO 当我使用时 我在java中使用了相同的代码Eclipse 那次就成功了 但现在我尝试在中使用这段代码Mono for Android C 它不起作用 我正在尝试运行此代码来创建一个InputStr
  • Android - 9 补丁

    我正在尝试使用 9 块图片创建一个新的微调器背景 我尝试了很多方法来获得完美的图像 但都失败了 s Here is my 9 patch 当我用Draw 9 patch模拟时 内容看起来不错 但是带有箭头的部分没有显示 或者当它显示时 这部
  • 在android中跟踪FTP上传数据?

    我有一个运行 Android 的 FTP 系统 但我希望能够在上传时跟踪字节 这样我就可以在上传过程中更新进度条 安卓可以实现这个功能吗 现在 我正在使用org apache common net ftp我正在使用的代码如下 另外 我在 A
  • Android:如何检测手机设置中的语言已更改

    我如何检测我的手机语言是否已更改 例如 Facebook 应用程序将向我们宣布 please wait we preparing your language i used myString Locale getDefault getDisp

随机推荐