androidx.startup.StartupException: java.lang.IllegalStateException: ProcessLifecycleInitializer cannot be initialized lazily

Viewed 238

I am trying to get my first http request and I am receving this error

Process: com.example.retrofit, PID: 3359 java.lang.RuntimeException: Unable to get provider androidx.startup.InitializationProvider: androidx.startup.StartupException: androidx.startup.StartupException: java.lang.IllegalStateException: ProcessLifecycleInitializer cannot be initialized lazily. Please ensure that you have:

MainActivity

const val TAG = "MainActivity"

class MainActivity : AppCompatActivity() {

private lateinit var binding: ActivityMainBinding

private lateinit var todoAdapter: TodoAdapter

override fun onCreate(savedInstanceState: Bundle?) {

    super.onCreate(savedInstanceState)

    binding = ActivityMainBinding.inflate(layoutInflater)

    setContentView(binding.root)

    setupRV()

    lifecycleScope.launchWhenCreated {

        binding.progressBar.isVisible = true

        val response = try {

            RetrofitInstance.api.getTodos()

        } catch (e: IOException) {

            Log.e(TAG, "IOException")

            return@launchWhenCreated

        } catch (e: HttpException) {

            Log.e(TAG, "HttpException")

            binding.progressBar.isVisible = false

            return@launchWhenCreated
        }
        if (response.isSuccessful && response.body() != null) {

            todoAdapter.todos = response.body()!!

        } else {
            Log.e(TAG, "Response failed")
        }

        binding.progressBar.isVisible = false
    }
}

private fun setupRV() = binding.rvTodos.apply {
    todoAdapter = TodoAdapter()
    adapter = todoAdapter
    layoutManager = LinearLayoutManager(this@MainActivity)
}

}

RetrofitInstance

object RetrofitInstance {

val api: TodoApi by lazy {
    Retrofit.Builder()
        .baseUrl("https://jsonplaceholder.typicode.com/")
        .addConverterFactory(GsonConverterFactory.create())
        .build()
        .create(TodoApi::class.java)
}

}

TodoApi

interface TodoApi {

@GET("/todos")
suspend fun getTodos(): Response<List<TodoData>>

}

0 Answers
Related