سلام به استاد عزیز و دوستان گرامی..
موقع اجرای اپ روی Api۱۹ بودم که به Force Close برخورد میکردم..
یکم که تحقیق در موردش کردم متوجه شدم که لایبراری OkHttp که داخل لایبراری Retrofit قرار داره، Api زیر ۲۰ رو ساپورت نمیکنه.. تیمشون توی گیت هاب ۲۹ دسامبر ۲۰۱۸ این تغییر رو اعمال کردن ولی داخل برنچ هاشون برنچی رو تحت عنوان Okhttp۳.۱۲.x نگه داشتن برای کسایی که میخوان زیر api۲۰ رو هم ساپورت کنن.. ولی مشکلی که وجود داره این هستش که این برنچ به گفته ی یه مقاله ای داخل سایت Medium تا اخر همین ماه، یعنی ۴ روز دیگه معتبر هستش و احتمال ریمو شدن این برنچ بعد از این تاریخ هستش..
اگه که از خود لایبراری Okhttp استفاده کنید میتونین با خط کد زیر این مشکل رو برطرف کنید: (منبع: https://stackoverflow.com/a/۵۶۸۱۸۷۶۹)
//OkHttp
implementation ("com.squareup.okhttp3:okhttp:3.12.12"){
force = true //API 19 support
}
implementation 'com.squareup.okhttp3:logging-interceptor:3.12.12'
اگه که از لایبراری Retrofit استفاده میکنید طبق چیزی که داخل گیت هاب خوندم گفته شده که امکان ساپورتش وجود نخواهد داشت..
Exception Error in Api19
java.lang.ExceptionInInitializerError
at okhttp3.OkHttpClient.newSslSocketFactory(OkHttpClient.java:263)
at okhttp3.OkHttpClient.<init>(OkHttpClient.java:229)
at okhttp3.OkHttpClient.<init>(OkHttpClient.java:202)
at retrofit2.Retrofit$Builder.build(Retrofit.java:628)
at com.abp.nikystore.service.http.ApiServiceKt.createApiServiceInstance(ApiService.kt:20)
at com.abp.nikystore.App$onCreate$myModule$1$1.invoke(App.kt:25)
at com.abp.nikystore.App$onCreate$myModule$1$1.invoke(App.kt:17)
at org.koin.core.instance.InstanceFactory.create(InstanceFactory.kt:53)
at org.koin.core.instance.SingleInstanceFactory.create(SingleInstanceFactory.kt:39)
at org.koin.core.instance.SingleInstanceFactory.get(SingleInstanceFactory.kt:47)
at org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core(InstanceRegistry.kt:103)
at org.koin.core.scope.Scope.resolveInstance(Scope.kt:236)
at org.koin.core.scope.Scope.get(Scope.kt:204)
at com.abp.nikystore.App$onCreate$myModule$1$2.invoke(App.kt:44)
at com.abp.nikystore.App$onCreate$myModule$1$2.invoke(App.kt:17)
at org.koin.core.instance.InstanceFactory.create(InstanceFactory.kt:53)
at org.koin.core.instance.FactoryInstanceFactory.get(FactoryInstanceFactory.kt:36)
at org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core(InstanceRegistry.kt:103)
at org.koin.core.scope.Scope.resolveInstance(Scope.kt:236)
at org.koin.core.scope.Scope.get(Scope.kt:204)
at com.abp.nikystore.App$onCreate$myModule$1$3.invoke(App.kt:44)
at com.abp.nikystore.App$onCreate$myModule$1$3.invoke(App.kt:17)
at org.koin.core.instance.InstanceFactory.create(InstanceFactory.kt:53)
at org.koin.core.instance.FactoryInstanceFactory.get(FactoryInstanceFactory.kt:36)
at org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core(InstanceRegistry.kt:103)
at org.koin.core.scope.Scope.resolveInstance(Scope.kt:236)
at org.koin.core.scope.Scope.get(Scope.kt:204)
at org.koin.android.viewmodel.factory.DefaultViewModelFactory.create(DefaultViewModelFactory.kt:31)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:164)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:130)
at org.koin.android.viewmodel.ViewModelResolverKt.get(ViewModelResolver.kt:22)
at org.koin.android.viewmodel.ViewModelResolverKt.resolveInstance(ViewModelResolver.kt:11)
at org.koin.android.viewmodel.scope.ScopeExtKt.getViewModel(ScopeExt.kt:75)
at org.koin.android.viewmodel.scope.ScopeExtKt.getViewModel(ScopeExt.kt:63)
at org.koin.android.viewmodel.koin.KoinExtKt.getViewModel(KoinExt.kt:55)
at org.koin.android.viewmodel.ext.android.FragmentExtKt.getViewModel(FragmentExt.kt:66)
at com.abp.nikystore.feature.main.MainFragment$$special$$inlined$viewModel$2.invoke(FragmentExt.kt:68)
at com.abp.nikystore.feature.main.MainFragment$$special$$inlined$viewModel$2.invoke(FragmentExt.kt)
at kotlin.UnsafeLazyImpl.getValue(Lazy.kt:81)
at com.abp.nikystore.feature.main.MainFragment.getMainViewModel(MainFragment.kt)
at com.abp.nikystore.feature.main.MainFragment.onViewCreated(MainFragment.kt:25)
at androidx.fragment.app.FragmentManagerImpl.ensureInflatedFragmentView(FragmentManagerImpl.java:1144)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:851)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1133)
at androidx.fragment.app.FragmentManagerImpl.addFragment(FragmentManagerImpl.java:1393)
at androidx.fragment.app.FragmentManagerImpl.onCreateView(FragmentManagerImpl.java:3205)
at androidx.fragment.app.FragmentController.onCreateView(FragmentController.java:134)
at androidx.fragment.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:357)
at androidx.fragment.app.FragmentActivity.onCreateView(FragmentActivity.java:336)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:690)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:756)
at android.view.LayoutInflater.inflate(LayoutInflater
منبع مدیوم: https://medium.com/square-corner-blog/okhttp-3-13-requires-android-5-818bb78d07ce
امیدوارم این مطلب به کارتون بیاد..
موفق باشید..