今天讲下如何使用Retrofit2+RxJava2实现一个网络请求框架的步骤:
前提准备条件自然要有清单文件别忘记添加网络请求权限:
<uses-permission android:name="android.permission.INTERNET" />
然后开始真正的代码集成实现步骤:
第一步:首先在build.gradle文件中添加以下依赖:
dependencies {
implementation 'com.squareup.okhttp3:okhttp:3.2.0'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
implementation 'io.reactivex.rxjava2:rxjava:2.1.3'
implementation 'com.squareup.retrofit2:retrofit:2.3.0'
implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
}
第二步:在application中初始化Retrofit
class MyApp : Application() {
override fun onCreate() {
super.onCreate()
app = this
//初始化OkHttp
okHttpInstance()
//初始化Retrofit
RetrofitInstance()
}
//初始化okhttp Retrofit
companion object {
lateinit var app: MyApp
var mOkHttpClient: OkHttpClient? = null
var mRetrofit: Retrofit? = null
fun okHttpInstance(): OkHttpClient {
var logInterceptor = HttpLoggingInterceptor((HttpLoggingInterceptor.Logger { message ->
Log.e("message", message)
}))
logInterceptor.level = HttpLoggingInterceptor.Level.BODY
mOkHttpClient = OkHttpClient().newBuilder()
.addNetworkInterceptor(logInterceptor)
.build()
return mOkHttpClient!!
}
fun RetrofitInstance(): Retrofit {
mRetrofit = Retrofit.Builder()
.baseUrl(UrlConfig.BASE_URL)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.client(mOkHttpClient)
.build()
return mRetrofit!!
}
}
}
第三步:建立你的配置全局网络请求Url工具类UrlConfig.kt
class UrlConfig {
companion object {
//正式服务器url
val BASE_URL = "http://mingshiapp.com"
}
}
第四步:创建你的请求主体类IPServer.kt:
/**
* @Description:配置网络请求主体业务接口
* @Author: junjiew
* @Time: 2018/7/03 14:47
*/
interface IPServer {
//网络请求测试
@GET("/test")
fun getTestData():Observable<QuestionTestData>
}
第五步:在activity中调用关键代码实现:
var bean : TestData? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main)
//调用网络请求方法
initData()
}
//调用网络框架请求
private fun initDatas() {
var server = MyApp.RetrofitInstance().create(IPServer::class.java)
server.getTestData()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ result ->
bean = result as TestData
LogUtils.d(TAG,"result:"+result.toString())
}, { error ->
//Request FAIL
LogUtils.d(TAG,"error:"+error.toString())
})
}
到这里Retrofit2+RxJava2实现一个网络请求框架就已经集成完毕了,是不是很简单看起来,哈哈,兄弟,不要大意,开发最可怕的就是你把一个东西看简单了,然后真正实现的时候遇到一个坑自己半天爬不出来,哈哈,这是个老搬砖的一路走过来的经验啊!哈哈