简体   繁体   中英

how to store images from server(api) to room database

I want to store images from and api into room db.I receive data and images from an api. When I'm in online mode, the images are loaded using the urls provided by the api but when offline, images should be stored and retrieved from the database in offline mode.

im loading the images like this (it loads images):----

 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?) {

                        }
                    })
                     }
                     }

my JSON is like this:--------

 "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
} ],
 }

my entity table:---

@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

tried solution 1:--this is not working

    .diskCacheStrategy(DiskCacheStrategy.DATA)

Any idea how do i store this images using Room db???????? need help... thanks in Advance

Try to store it as URI. or create a type converter like this

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)
    }
}

and add this type converter in you roomdb class

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

  ///


}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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