[에러] RequestOptions cannot be converted to GlideOptions
[ 에러1 ]
Firebase Users 정보로부터 사용자의 카카오 프로필사진을 불러오던 중에 에러가 발생했다.
그래서 그동안 미루고 미루던 Glide Module을 결국 하나 장만해야겠구나 싶어서 검색을 좀 해보았다.
bad bitmap error when setting Uri
[ 해결책 ]
1. gradle.properties
android.useAndroidX=true
android.enableJetifier=true
2. build.gradle(Module:app)
plugins {
id 'kotlin-kapt'
}
.
.
.
dependencies {
implementation 'com.github.bumptech.glide:glide:4.12.0'
kapt 'com.github.bumptech.glide:compiler:4.12.0'
//noinspection LifecycleAnnotationProcessorWithJava8
kapt "android.arch.lifecycle:compiler:1.1.1"
}
3. GlideModule.kt
package com.example.tripplanner
import android.annotation.SuppressLint
import android.content.Context
import com.bumptech.glide.GlideBuilder
import com.bumptech.glide.annotation.GlideModule
import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.bumptech.glide.module.AppGlideModule
import com.bumptech.glide.request.RequestOptions
@GlideModule
class TripPlannerGlideModule : AppGlideModule() {
@SuppressLint("CheckResult")
override fun applyOptions(context: Context, builder: GlideBuilder) {
super.applyOptions(context, builder)
builder.apply { RequestOptions().diskCacheStrategy(DiskCacheStrategy.ALL) }
}
}
4. MainActivity.kt
기존 : uPhoto.setImageURI(user.photoUrl)
현재 : GlideApp 사용
val user = Firebase.auth.currentUser
user?.let {
// 네비게이션 바의 헤더 아이템 id 필요
val header : View = binding.naviView.getHeaderView(0)
val uPhoto = header.findViewById<ImageView>(R.id.profilepic)
GlideApp.with(context)
.load(user.photoUrl)
.into(uPhoto)
}
5. Build > Clean Project
6. Build > Rebuild Project
[ 에러2 ]
근데 위에 GlideApp을 적용하고 빌드했더니 또 다른 문제가 생겼다.
내가 사용중인 requestoptions 타입이 glideoptions 타입으로 바뀌지 않았다.
incompatible types. found: 'com.bumptech.glide.request.requestoptions', required: 'com.example.tripplanner.glideoptions'
[ 해결책 ]
1. build.gradle(Module:app)
아래 두 줄의 버전이 일치하는지 확인 (4.12.0 으로 일치하므로 이상 없음)
implementation 'com.github.bumptech.glide:glide:4.12.0'
kapt 'com.github.bumptech.glide:compiler:4.12.0'
2. GlideOptions.java
이 파일에서만 에러가 뜨길래 빨간줄 부분에 마우스를 대보니까 내가 type casting을 해주어야하는 것 같았다.
그래서 일일이 손가락 노동을 하고나서 다시 빌드했더니 다행히 문제가 해결되었다.
// 기존
return new GlideOptions().sizeMultiplier(value);
// 바꾼 뒤
return (GlideOptions) new GlideOptions().sizeMultiplier(value);
근데 희안하게 지금 다시 해당 파일 확인해보니까 빌드 이후에 명시적 캐스팅한 (GlideOptions) 부분이 사라져서 기존 형태로 바뀌었다. 안드로이드 스튜디오가 숨겨준건지 뭔지 모르겠지만 다행히 아무 에러가 뜨지않고 앱이 잘 작동한다.
[ 참고자료 ]
- https://stackoverflow.com/questions/49901629/glide-showing-error-failed-to-find-generatedappglidemodule
- https://github.com/bumptech/glide/issues/3636