Zaylour 2018-09-03 01:19 采纳率: 69.2%
浏览 2163
已结题

异步网络请求,用的是Retrofit+okhttp+rxjava网络不好的情况下,怎么给出提示。

一个点击按钮,里面是一个网络异步请求,我点击时会出来一个dialog:

 test.setOnClickListener{
    initDialog()
     RetrofitManager2.getApiBase().getRecognition("参数...")
                .timeout(10, TimeUnit.SECONDS)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread()).subscribe( Action1 {
                    if (mDialog != null) {
                        mDialog!!.dismiss()
                    }


        }, ApiErrorHandler(object : ApiErrorListener(){//这里是自定义的错误
            override fun onConnectException(t: Throwable) {
                super.onConnectException(t)
                ToastUtils.showShort(R.string.no_internet)


            }
            override fun onDatabaseException(t: DatabaseException) {
                super.onDatabaseException(t)

            }

            override fun onOtherException(t: Throwable) {
                super.onOtherException(t)

            }
        }))
}
    fun initDialog() {
        if (mDialog != null) {
            mDialog!!.dismiss()
        }
        mDialog = Dialog(this, R.style.Dialog)
        mDialog!!.setContentView(R.layout.firset_dialog_view)
        val window = mDialog!!.getWindow()
        val lp = window!!.attributes
        val screenW = getScreenWidth()
        lp.width = (0.6 * screenW).toInt()
        val titleTxtv = mDialog!!.findViewById<View>(R.id.tvLoad) as TextView
        titleTxtv.text = "请稍等..."
        mDialog!!.show()
        mDialog!!.setCanceledOnTouchOutside(false)
    }

如果在网络不好的情况下,这个dialog会一直在转圈,我想设置一个10秒的时间,如果这个请求还没有完成就给用户一个"当前网络信号不好",这样的提示,我用了rxjava的timeout,但是我找不到onError这个方法,都是onErrorReturn、onErrorResumeNext、onExceptionResumeNext这几个,对rxjava的运用还是不怎么熟悉,请问这个应该怎么实现。
object RetrofitManager {
private val unsafeHttpClient: OkHttpClient by lazy { createUnSafeOkHttpClient() }
private val httpClient: OkHttpClient by lazy { createOkhttpClient() }
private val retrofitClient: Retrofit by lazy { createRetrofit() }
private val api:ApiBase by lazy { retrofitClient.create(ApiBase::class.java) }
fun getOkHttpClient(): OkHttpClient = httpClient
fun getUnSafeOkHttpClient(): OkHttpClient = unsafeHttpClient
fun getRetrofit(): Retrofit = retrofitClient
fun getApiBase(): ApiBase = api
private fun createOkhttpClient(): OkHttpClient {
val loggingInterceptor = HttpLoggingInterceptor()
loggingInterceptor.level = HttpLoggingInterceptor.Level.BODY
return OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(15, TimeUnit.SECONDS)
.writeTimeout(15, TimeUnit.SECONDS)
.addInterceptor(loggingInterceptor)
.addInterceptor(ApiPostInterceptor())
.addInterceptor(ApiResponseInterceptor())
.addInterceptor(ApiAutoBaseUrlInterceptor())
.build()
}
private fun createRetrofit(): Retrofit {
return Retrofit.Builder()
.baseUrl(TT_PHP_SERVER)
.client(httpClient)
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build()
}

private fun createUnSafeOkHttpClient(): OkHttpClient {
    val loggingInterceptor = HttpLoggingInterceptor()
    loggingInterceptor.level = HttpLoggingInterceptor.Level.BODY
    return UnsafeOkHttpClient.getUnsafeOkHttpClientBuilder()
            .connectTimeout(10, TimeUnit.SECONDS)
            .readTimeout(15, TimeUnit.SECONDS)
            .writeTimeout(15, TimeUnit.SECONDS)
            .addInterceptor(loggingInterceptor)
            .build()
}

}

@POST("china_mobile_recognition.php")
@FormUrlEncoded
fun getRecognition(@Field("session") session:String?,@Field("user_id")user_id:String?,@Field("appid")appid:String?
,@Field("token")token:String?,@Field("timestamp")timestamp:String?,@Field("phonenum")phonenum:String?
,@Field("msgid")msgid:String?,@Field("Sign")Sign:String?): Observable

  • 写回答

1条回答 默认 最新

  • devmiao 2018-09-03 04:25
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题