0

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>

....................

Mahmoud Nabil
  • 243
  • 2
  • 12
  • You're assuming that the result is always a `SuccessResult`. Apparently here it was an `ErrorResult` instead. – Ryan M Feb 25 '23 at 06:16

0 Answers0