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