Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Kotlin error: Dagger does not support injection into static fields

i tried to use Dagger for dependency injection in my Retrofit project, but when I build the code it throws this error : Dagger does not support injection into static fields. Does anyone have any idea why I get this error? i cant figure out what I did wrong.

MianActivity.kt:

@Inject
lateinit var  mApiService : ApiService

class MainActivity : AppCompatActivity() {



    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        var retroComponent = DaggerRetroComponent.create()
        retroComponent.inject(this)
}

RetroComponet.kt

@Singleton
@Component(modules = [ServiceBuilderModule::class])
interface RetroComponent {
    //Field Injection
    fun inject(mainActivity: MainActivity)
}

ServiceBuilder.kt

@Module
object ServiceBuilderModule {
    val baseUrl = "https://dog-facts-api.herokuapp.com"


    @Singleton
    @Provides
    fun retrofitInstance(): Retrofit {
        return Retrofit.Builder().baseUrl(baseUrl)
            .addConverterFactory(GsonConverterFactory.create())
            .build()
    }

    @Singleton
    @Provides
    fun getRetroServiceInterface(retrofit: Retrofit): ApiService {
        return retrofit.create(ApiService::class.java)
    }

ApiService.kt

interface ApiService {
    @GET("/api/v1/resources/dogs")
    suspend fun getDogFact(@Query("index") index: String): Response<List<DogFactModel>>

}
like image 261
Sky Avatar asked Aug 10 '26 04:08

Sky


1 Answers

Replace:

@Inject
lateinit var  mApiService : ApiService

class MainActivity : AppCompatActivity() {

with:

class MainActivity : AppCompatActivity() {

@Inject
lateinit var  mApiService : ApiService

mApiService needs to a property within MainActivity, not a top-level property.

like image 101
CommonsWare Avatar answered Aug 12 '26 19:08

CommonsWare



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!