Вызывается: java .lang.ClassCastException: kotlin .Unit не может быть приведен к yodgorbek.komilov.musobaqayangiliklari.repository.NewsRepository? - PullRequest
0 голосов
/ 02 апреля 2020

Я занимаюсь разработкой новостного приложения. Я реализовал несколько модулей koin в своем проекте, но получаю следующие исключения

java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
 at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:557)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:922)
Caused by: java.lang.reflect.InvocationTargetException
 at java.lang.reflect.Method.invoke(Native Method)
 at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
 ... 1 more
Caused by: org.koin.core.error.InstanceCreationException: Could not create instance for [type:Factory,primary_type:'yodgorbek.komilov.musobaqayangiliklari.viewmodel.MainViewModel']
 at org.koin.core.instance.DefinitionInstance.create(DefinitionInstance.kt:61)
 at org.koin.core.instance.FactoryDefinitionInstance.get(FactoryDefinitionInstance.kt:37)
 at org.koin.core.definition.BeanDefinition.resolveInstance(BeanDefinition.kt:70)
 at org.koin.core.scope.Scope.resolveInstance(Scope.kt:165)
 at org.koin.core.scope.Scope.get(Scope.kt:128)
 at org.koin.androidx.viewmodel.ViewModelResolutionKt$createViewModelProvider$1.create(ViewModelResolution.kt:66)
 at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:187)
 at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150)
 at org.koin.androidx.viewmodel.ViewModelResolutionKt.getInstance(ViewModelResolution.kt:43)
 at org.koin.androidx.viewmodel.ViewModelResolutionKt.getViewModel(ViewModelResolution.kt:23)
 at org.koin.androidx.viewmodel.ext.android.LifecycleOwnerExtKt.getViewModel(LifecycleOwnerExt.kt:85)
 at yodgorbek.komilov.musobaqayangiliklari.ui.TopHeadlinesFragment$$special$$inlined$viewModel$1.invoke(LifecycleOwnerExt.kt:95)
 at yodgorbek.komilov.musobaqayangiliklari.ui.TopHeadlinesFragment$$special$$inlined$viewModel$1.invoke(Unknown Source:0)
 at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
 at yodgorbek.komilov.musobaqayangiliklari.ui.TopHeadlinesFragment.getViewModel(Unknown Source:7)
 at yodgorbek.komilov.musobaqayangiliklari.ui.TopHeadlinesFragment.initViewModel(TopHeadlinesFragment.kt:49)
 at yodgorbek.komilov.musobaqayangiliklari.ui.TopHeadlinesFragment.onViewCreated(TopHeadlinesFragment.kt:45)
 at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:892)
 at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1238)
 at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1303)
 at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:439)
 at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManagerImpl.java:2079)
 at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1869)
 at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1824)
 at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManagerImpl.java:1727)
 at androidx.fragment.app.FragmentManagerImpl.dispatchStateChange(FragmentManagerImpl.java:2663)
 at androidx.fragment.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManagerImpl.java:2613)
 at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:246)
 at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:542)
 at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:201)
 at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1392)
 at android.app.Activity.performStart(Activity.java:7252)
 at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3000)
 at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:185)
 at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:170)
 at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:147)
 at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:73)
 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1858)
 at android.os.Handler.dispatchMessage(Handler.java:106)
 a

panpam, [02.04.20 13:40]
t android.os.Looper.loop(Looper.java:201)
 at android.app.ActivityThread.main(ActivityThread.java:6820)
 ... 3 more
Caused by: java.lang.ClassCastException: kotlin.Unit cannot be cast to yodgorbek.komilov.musobaqayangiliklari.repository.NewsRepository
 at yodgorbek.komilov.musobaqayangiliklari.di.application.module.AppModulesKt$appModules$1$2.invoke(appModules.kt:28)
 at yodgorbek.komilov.musobaqayangiliklari.di.application.module.AppModulesKt$appModules$1$2.invoke(Unknown Source:4)
 at org.koin.core.instance.DefinitionInstance.create(DefinitionInstance.kt:54)
 ... 43 mo

ниже моего модуля зависимостей koin appModules.kt

val appModules = module() {
    factory(named("appModules")) {
        //NewsRepository.NewsRepositoryImpl(sportsNewsApi = get())
    }
    // factory<NewsRepository> { (NewsRepositoryImpl(sportsNewsApi = get())) }
    // Specific viewModel pattern to tell Koin how to build MainViewModel
    viewModel { MainViewModel(newsRepository = get(named("appModules"))) }



}

ниже NewsRepository.kt

 class NewsRepository(private val sportNewsApi: SportNewsInterface, private val sportNewsDao: SportNewsDao) {

            val data = sportNewsDao.getAllData()

            suspend fun refresh() {
                withContext(Dispatchers.IO) {
                    val articles = sportNewsApi.getNewsAsync().body()?.articles
                    if (articles != null) {
                        sportNewsDao.addAll(articles)
                    }
                }
            }
        }

    //    @Suppress("UNCHECKED_CAST")
    //    class NewsRepositoryImpl(
    //        private val sportsNewsApi: SportNewsInterface
    //    ) : NewsRepository {
    //        override suspend fun getNewsList(): UseCaseResult<List<Article>> {
    //
    //            return try {
    //                val result = sportsNewsApi.getNewsAsync().body()!!.articles
    //
    //
    //                UseCaseResult.Success(result)
    //            } catch (ex: Exception) {
    //                UseCaseResult.Error(ex)
    //            }
    //        }
    //    }

ниже моего MainViewModel.kt

@Suppress("UNCHECKED_CAST")
class MainViewModel(val newsRepository: NewsRepository) : ViewModel(), CoroutineScope {
    // Coroutine's background job
    val job = Job()
    // Define default thread for Coroutine as Main and add job
    override val coroutineContext: CoroutineContext = Dispatchers.Main + job

    val showLoading = MutableLiveData<Boolean>()
    val sportList = MutableLiveData<List<Article>>()
    val showError = SingleLiveEvent<String>()

    fun loadNews() {
        // Show progressBar during the operation on the MAIN (default) thread
        showLoading.value = true
        // launch the Coroutine
        launch {
            // Switching from MAIN to IO thread for API operation
            // Update our data list with the new one from API
            val result = withContext(Dispatchers.IO) {
                newsRepository?.data
                newsRepository.refresh()
            }
        }
    }
}
            // Hide progressBar once the operation is done on the MAIN (default) thread
//            showLoading.value = false
//            when (result) {
//
//                is LoadingState.Status {
//                    sportList.value = result.as List < Article >
//                }
//                is Error -> showError.value = result.message
//            }
//        }
//    }

//    override fun onCleared() {
//        super.onCleared()
//        // Clear our job when the linked activity is destroyed to avoid memory leaks
//        job.cancel()
//    }
//}

Я хочу знать, где я делаю ошибку, почему происходит сбой приложения.

что я пробовал

1.Не допустить перезапуск кэша 2. Построить проект перестроения и выполнить все ответы StackOverflow

...