I want to set image uri to a room db, but i have the error message below, and i don't know where the mistake in my code. If anyone can help me.
java.lang.ClassCastException: coil.request.ErrorResult cannot be cast to coil.request.SuccessResult
This is the adding process inside a viewPager fragment
private suspend fun addToRoom(){
val newUser = User(0, fullName, getBitmap(stringImg), fullNum,
"offline", "", countryName, countryCode)
myViewModel.addUser(newUser)
}
//Converting image url to bitMap
private suspend fun getBitmap(img: String): Bitmap {
val loading = ImageLoader(requireContext())
val request = ImageRequest.Builder(requireContext())
.data(img).build()
val result: Drawable = (loading.execute(request) as SuccessResult).drawable
return (result as BitmapDrawable).bitmap
}
Below is user database sample which simulate my database schema
User.kt
@Entity(tableName = "authenticatedUser")
data class User (
@PrimaryKey (autoGenerate = true)
@ColumnInfo(name = "uId") var id: Int,
@ColumnInfo(name = "uName") var name: String,
@ColumnInfo(name = "uImage") var img: Bitmap?,
@ColumnInfo(name = "uNum") var num: String,
@ColumnInfo(name = "uPresence") var presence: String,
@ColumnInfo(name = "uLastMsg") var lastMsg: String,
@ColumnInfo(name = "uCountryN") var countryName: String,
@ColumnInfo(name = "uCountryC") var countryCode: String
)
UserDao.kt
@Dao
interface UserDao {
@Insert(onConflict = OnConflictStrategy.IGNORE)
suspend fun addUser(user: User)
@Query("SELECT * FROM authenticatedUser ORDER BY uId ASC")
fun readAllData(): LiveData<List<User>>
}
UserRepository.kt
class UserRepository(private val userDao: UserDao) {
val readAllData: LiveData<List<User>> = userDao.readAllData()
suspend fun addUser(user: User){
userDao.addUser(user)
}
}
UserViewModel.kt
class UserViewModel(application: Application): AndroidViewModel(application) {
private val readALlData: LiveData<List<User>>
private val repository: UserRepository
init {
val userDau = UserDatabase.getDatabase(application).userDao()
repository = UserRepository(userDau)
readALlData = repository.readAllData
}
fun addUser(user: User){
viewModelScope.launch(Dispatchers.IO){
repository.addUser(user)
}
}
}
UserDatabase.kt
@Database(entities = [User::class], version = 1, exportSchema = false)
@TypeConverters(Converters::class)
abstract class UserDatabase: RoomDatabase() {
abstract fun userDao(): UserDao
companion object {
@Volatile
private var INSTANCE: UserDatabase?= null
fun getDatabase(context: Context): UserDatabase{
val tempInstance = INSTANCE
if (tempInstance != null){
return tempInstance
}
synchronized(this){
val instance = Room.databaseBuilder(
context.applicationContext,
UserDatabase::class.java,
"user_database"
).build()
INSTANCE = instance
return instance
}
}
}
}
Converters.kt
class Converters {
@TypeConverter
fun fromBitmap(bitmap: Bitmap): ByteArray{
val outputStream = ByteArrayOutputStream()
bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream)
return outputStream.toByteArray()
}
@TypeConverter
fun toBitmap(byteArray: ByteArray): Bitmap{
return BitmapFactory.decodeByteArray(byteArray, 0, byteArray.size)
}
}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.eltoh.chatdate">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@drawable/chat_date_logo"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/Theme.ChatDate"
tools:targetApi="31">
<activity
android:name="com.eltoh.chatdate.activities.ChatActivity"
android:exported="false" />
<activity
android:name="com.eltoh.chatdate.activities.ProfileManageActivity"
android:exported="false" />
<activity
android:name="com.eltoh.chatdate.MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
....................