Ошибка IllegalArgumentException
При запуске приложения выходит ошибка:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.easyjobs, PID: 5713
java.lang.IllegalArgumentException: Unable to create call adapter for kotlinx.coroutines.flow.Flow<java.util.List<com.example.easyjobs.network.model.admodel.AdWorkerModel>>
for method ApiService.getAds
at retrofit2.Utils.methodError(Utils.java:54)
at retrofit2.HttpServiceMethod.createCallAdapter(HttpServiceMethod.java:116)
at retrofit2.HttpServiceMethod.parseAnnotations(HttpServiceMethod.java:67)
at retrofit2.ServiceMethod.parseAnnotations(ServiceMethod.java:39)
at retrofit2.Retrofit.loadServiceMethod(Retrofit.java:202)
at retrofit2.Retrofit$1.invoke(Retrofit.java:160)
at java.lang.reflect.Proxy.invoke(Proxy.java:1006)
at $Proxy3.getAds(Unknown Source)
at com.example.easyjobs.viewModels.SignInViewModel.<init>(SignInViewModel.kt:17)
at com.example.easyjobs.DaggerMainApp_HiltComponents_SingletonC$ViewModelCImpl$SwitchingProvider.get(DaggerMainApp_HiltComponents_SingletonC.java:446)
at dagger.hilt.android.internal.lifecycle.HiltViewModelFactory$1.create(HiltViewModelFactory.java:101)
at androidx.lifecycle.AbstractSavedStateViewModelFactory.create(AbstractSavedStateViewModelFactory.kt:90)
at dagger.hilt.android.internal.lifecycle.HiltViewModelFactory.create(HiltViewModelFactory.java:111)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:187)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:153)
at androidx.lifecycle.ViewModelLazy.getValue(ViewModelLazy.kt:53)
at androidx.lifecycle.ViewModelLazy.getValue(ViewModelLazy.kt:35)
at com.example.easyjobs.fragments.AdsFragment.getViewModel(AdsFragment.kt:21)
at com.example.easyjobs.fragments.AdsFragment.observe(AdsFragment.kt:48)
at com.example.easyjobs.fragments.AdsFragment.onViewCreated(AdsFragment.kt:42)
at androidx.fragment.app.Fragment.performViewCreated(Fragment.java:3128)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:552)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:261)
at androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:113)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1433)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2977)
at androidx.fragment.app.FragmentManager.dispatchViewCreated(FragmentManager.java:2888)
at androidx.fragment.app.Fragment.performViewCreated(Fragment.java:3129)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:552)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:261)
at androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:113)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1433)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2977)
at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2895)
at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:263)
at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:351)
at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:251)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1543)
at android.app.Activity.performStart(Activity.java:8330)
at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3670)
at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221)
at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2307)
at android.os.Handler.dispatchMessage(Handler.java:106)
E/AndroidRuntime: at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7872)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
Caused by: java.lang.IllegalArgumentException: Could not locate call adapter for kotlinx.coroutines.flow.Flow<java.util.List<com.example.easyjobs.network.model.admodel.AdWorkerModel>>.
Tried:
* retrofit2.CompletableFutureCallAdapterFactory
* retrofit2.DefaultCallAdapterFactory
at retrofit2.Retrofit.nextCallAdapter(Retrofit.java:272)
at retrofit2.Retrofit.callAdapter(Retrofit.java:237)
at retrofit2.HttpServiceMethod.createCallAdapter(HttpServiceMethod.java:114)
... 50 more
.
import com.example.easyjobs.network.model.admodel.AdWorkerModel
import com.example.easyjobs.network.model.modeluser.Content
import retrofit2.http.*
interface ApiService {
@Headers("myappkey")
@GET("superjob/api/vacancy")
fun getAds(): Flow<List<AdWorkerModel>>
}
.
import androidx.lifecycle.LiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.asLiveData
import com.example.easyjobs.network.ApiService
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject
@HiltViewModel
class SignInViewModel @Inject constructor(private val apiService: ApiService) : ViewModel() {
val allNotes: LiveData<List<AdWorkerModel>> = apiService.getAds().asLiveData() }
.
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentTransaction
import androidx.fragment.app.activityViewModels
import androidx.recyclerview.widget.LinearLayoutManager
import com.example.easyjobs.R
import com.example.easyjobs.Splash.activities.MainContentActivity
import com.example.easyjobs.adapters.AdsAdapter
import com.example.easyjobs.databinding.FragmentAdsBinding
import com.example.easyjobs.viewModels.SignInViewModel
class AdsFragment : Fragment() {
private var binding: FragmentAdsBinding? = null
private lateinit var adapter:AdsAdapter
private val viewModel: SignInViewModel by activityViewModels ()
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = FragmentAdsBinding.inflate(inflater, container, false)
return binding?.root
}
override fun onStart() {
super.onStart()
binding?.btnAdd?.setOnClickListener {
(activity as MainContentActivity).navController.navigate(R.id.action_adsFragment_to_createAdsFragment)
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initRc()
observe()
}
private fun observe(){
viewModel.allNotes.observe(viewLifecycleOwner){
adapter.submitList(it)
}
}
private fun initRc()=with(binding){
this?.rcView?.layoutManager = LinearLayoutManager(activity)
adapter = AdsAdapter()
this?.rcView?.adapter = adapter
}
}
@Module
@InstallIn(SingletonComponent::class)
object AppModule {
///
@Provides
@Singleton
fun provideRetrofit():ApiService=
Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(provide())
.build()
.create(ApiService::class.java)
@Provides
@Singleton
fun provide():OkHttpClient{
val interceptor= HttpLoggingInterceptor()
interceptor.level=HttpLoggingInterceptor.Level.BODY
return OkHttpClient.Builder().addInterceptor(interceptor).build()
}
}
Источник: Stack Overflow на русском