refactor: 修改原有网络层代码为Hilt注入

This commit is contained in:
Quyunshuo
2021-06-04 17:53:47 +08:00
parent 45125c87cd
commit 4315057371
8 changed files with 128 additions and 66 deletions

View File

@ -2,6 +2,7 @@ package com.quyunshuo.androidbaseframemvvm.common.ui
import androidx.viewbinding.ViewBinding
import com.quyunshuo.androidbaseframemvvm.base.mvvm.v.BaseFrameActivity
import com.quyunshuo.androidbaseframemvvm.base.utils.AndroidBugFixUtils
/**
* Activity基类
@ -9,4 +10,11 @@ import com.quyunshuo.androidbaseframemvvm.base.mvvm.v.BaseFrameActivity
* @author Qu Yunshuo
* @since 8/27/20
*/
abstract class BaseActivity<VB : ViewBinding> : BaseFrameActivity<VB>()
abstract class BaseActivity<VB : ViewBinding> : BaseFrameActivity<VB>() {
override fun onDestroy() {
super.onDestroy()
// 解决某些特定机型会触发的Android本身的Bug
AndroidBugFixUtils().fixSoftInputLeaks(this)
}
}

View File

@ -2,6 +2,7 @@ package com.quyunshuo.androidbaseframemvvm.common.ui
import androidx.viewbinding.ViewBinding
import com.quyunshuo.androidbaseframemvvm.base.mvvm.v.BaseFrameNotMVVMActivity
import com.quyunshuo.androidbaseframemvvm.base.utils.AndroidBugFixUtils
/**
* 不是 MVVM 模式的基类
@ -9,4 +10,11 @@ import com.quyunshuo.androidbaseframemvvm.base.mvvm.v.BaseFrameNotMVVMActivity
* @author Qu Yunshuo
* @since 9/10/20
*/
abstract class BaseNotMVVMActivity<VB : ViewBinding> : BaseFrameNotMVVMActivity<VB>()
abstract class BaseNotMVVMActivity<VB : ViewBinding> : BaseFrameNotMVVMActivity<VB>() {
override fun onDestroy() {
// 解决某些特定机型会触发的Android本身的Bug
AndroidBugFixUtils().fixSoftInputLeaks(this)
super.onDestroy()
}
}

View File

@ -6,7 +6,7 @@ package com.quyunshuo.androidbaseframemvvm.net
* @author Qu Yunshuo
* @since 4/17/21 3:27 PM
*/
internal object NetBaseUrl {
internal object NetBaseUrlConstant {
const val BASE_URLl = ""
const val MAIN_URL = ""
}

View File

@ -1,62 +0,0 @@
package com.quyunshuo.androidbaseframemvvm.net
import okhttp3.Interceptor
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import java.util.concurrent.TimeUnit
/**
* 网络客户端提供者
*
* @author Qu Yunshuo
* @since 4/17/21 2:35 PM
*/
object NetClientProvider {
/**
* 连接超时
*/
private const val CONNECT_TIME_OUT = 15L * 1000L
/**
* 读取超时
*/
private const val READ_TIME_OUT = 20L * 1000L
/**
* 日志拦截器
*/
private val mLogInterceptor: Interceptor by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
val level = if (BuildConfig.DEBUG) {
HttpLoggingInterceptor.Level.BODY
} else {
HttpLoggingInterceptor.Level.NONE
}
HttpLoggingInterceptor().setLevel(level)
}
/**
* OkHttpClient
*/
private val mOkHttpClient: OkHttpClient by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
OkHttpClient.Builder()
.connectTimeout(CONNECT_TIME_OUT, TimeUnit.MILLISECONDS) // 连接超时
.readTimeout(READ_TIME_OUT, TimeUnit.MILLISECONDS) // 读取超时
.addInterceptor(mLogInterceptor) // 日志拦截器
.retryOnConnectionFailure(true) // 失败重连
.build()
}
/**
* 项目服务器Retrofit
*/
val mRetrofit: Retrofit by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
Retrofit.Builder()
.baseUrl(NetBaseUrl.BASE_URLl)
.addConverterFactory(GsonConverterFactory.create()) // Gson转换器
.client(mOkHttpClient)
.build()
}
}

View File

@ -0,0 +1,63 @@
package com.quyunshuo.androidbaseframemvvm.net.di
import com.quyunshuo.androidbaseframemvvm.base.BuildConfig
import com.quyunshuo.androidbaseframemvvm.net.NetBaseUrlConstant
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Retrofit
import java.util.concurrent.TimeUnit
import okhttp3.logging.HttpLoggingInterceptor.Level.NONE
import okhttp3.logging.HttpLoggingInterceptor.Level.BODY
import retrofit2.converter.gson.GsonConverterFactory
import javax.inject.Singleton
/**
* 全局作用域的网络层的依赖注入模块
*
* @author Qu Yunshuo
* @since 6/4/21 8:58 AM
*/
@Module
@InstallIn(SingletonComponent::class)
class DINetworkModule {
/**
* [OkHttpClient]依赖提供方法
*
* @return OkHttpClient
*/
@Singleton
@Provides
fun provideOkHttpClient(): OkHttpClient {
// 日志拦截器部分
val level = if (BuildConfig.DEBUG) BODY else NONE
val logInterceptor = HttpLoggingInterceptor().setLevel(level)
return OkHttpClient.Builder()
.connectTimeout(15L * 1000L, TimeUnit.MILLISECONDS)
.readTimeout(20L * 1000L, TimeUnit.MILLISECONDS)
.addInterceptor(logInterceptor)
.retryOnConnectionFailure(true)
.build()
}
/**
* 项目主要服务器地址的[Retrofit]依赖提供方法
*
* @param okHttpClient OkHttpClient OkHttp客户端
* @return Retrofit
*/
@Singleton
@Provides
fun provideMainRetrofit(okHttpClient: OkHttpClient): Retrofit {
return Retrofit.Builder()
.baseUrl(NetBaseUrlConstant.MAIN_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build()
}
}

View File

@ -1,6 +1,7 @@
package com.quyunshuo.module.home
import com.quyunshuo.androidbaseframemvvm.base.mvvm.m.BaseRepository
import com.quyunshuo.module.home.net.HomeApiService
import kotlinx.coroutines.delay
import javax.inject.Inject
@ -12,6 +13,9 @@ import javax.inject.Inject
*/
class HomeRepository @Inject constructor() : BaseRepository() {
@Inject
lateinit var mApi: HomeApiService
/**
* 模拟获取数据
*/

View File

@ -0,0 +1,32 @@
package com.quyunshuo.module.home.di
import com.quyunshuo.module.home.net.HomeApiService
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import retrofit2.Retrofit
import javax.inject.Singleton
/**
* 全局作用域的Home组件网络接口代理依赖注入模块
*
* @author Qu Yunshuo
* @since 6/4/21 5:51 PM
*/
@Module
@InstallIn(SingletonComponent::class)
class DIHomeNetServiceModule {
/**
* Home模块的[HomeApiService]依赖提供方法
*
* @param retrofit Retrofit
* @return HomeApiService
*/
@Singleton
@Provides
fun provideHomeApiService(retrofit: Retrofit): HomeApiService {
return retrofit.create(HomeApiService::class.java)
}
}

View File

@ -0,0 +1,9 @@
package com.quyunshuo.module.home.net
/**
* Home模块的接口
*
* @author Qu Yunshuo
* @since 6/4/21 5:51 PM
*/
interface HomeApiService