Commit d3785b4a authored by 王雷's avatar 王雷

新增gson解析异常,与服务器返回异常回调

parent f6b3a560
...@@ -55,7 +55,7 @@ repositories { ...@@ -55,7 +55,7 @@ repositories {
mavenCentral() mavenCentral()
} }
group 'com.qmai.android.fetch' group 'com.qmai.android.fetch'
version '1.2.23-SNAPSHOT' version '1.2.24-SNAPSHOT'
gradlePublish { gradlePublish {
......
...@@ -3,6 +3,7 @@ package com.qimai.android.fetch.convert ...@@ -3,6 +3,7 @@ package com.qimai.android.fetch.convert
import com.google.gson.Gson import com.google.gson.Gson
import com.google.gson.TypeAdapter import com.google.gson.TypeAdapter
import com.google.gson.reflect.TypeToken import com.google.gson.reflect.TypeToken
import com.qimai.android.fetch.interceptors.GsonParseError
import com.qimai.android.fetch.interceptors.TokenExpire import com.qimai.android.fetch.interceptors.TokenExpire
import okhttp3.ResponseBody import okhttp3.ResponseBody
import retrofit2.Converter import retrofit2.Converter
...@@ -15,19 +16,26 @@ import java.lang.reflect.Type ...@@ -15,19 +16,26 @@ import java.lang.reflect.Type
* @Description * @Description
**/ **/
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
class StandardGsonConvertFactory constructor(private var gson: Gson,var expire:TokenExpire?) : /**
* @param gsonParseError gson解析异常
*/
class StandardGsonConvertFactory constructor(
private var gson: Gson,
var expire: TokenExpire?,
var gsonParseError: GsonParseError? = null
) :
Converter.Factory() { Converter.Factory() {
lateinit var adapter: TypeAdapter<out Any> lateinit var adapter: TypeAdapter<out Any>
companion object { companion object {
fun create(gson: Gson): StandardGsonConvertFactory { fun create(gson: Gson): StandardGsonConvertFactory {
if (gson == null) throw Throwable("gson == null") if (gson == null) throw Throwable("gson == null")
return StandardGsonConvertFactory(gson,null) return StandardGsonConvertFactory(gson, null)
} }
fun create(gson: Gson, expire: TokenExpire):StandardGsonConvertFactory { fun create(gson: Gson, expire: TokenExpire): StandardGsonConvertFactory {
if (gson == null) throw Throwable("gson == null") if (gson == null) throw Throwable("gson == null")
return StandardGsonConvertFactory(gson,expire) return StandardGsonConvertFactory(gson, expire)
} }
} }
...@@ -57,7 +65,7 @@ class StandardGsonConvertFactory constructor(private var gson: Gson,var expire:T ...@@ -57,7 +65,7 @@ class StandardGsonConvertFactory constructor(private var gson: Gson,var expire:T
// } // }
// } // }
adapter = gson.getAdapter(TypeToken.get(type)) adapter = gson.getAdapter(TypeToken.get(type))
return StandardGsonResponseBodyConverter(adapter, gson, type,expire) return StandardGsonResponseBodyConverter(adapter, gson, type, expire,gsonParseError)
} }
......
...@@ -3,6 +3,8 @@ package com.qimai.android.fetch.convert ...@@ -3,6 +3,8 @@ package com.qimai.android.fetch.convert
import android.text.TextUtils import android.text.TextUtils
import com.google.gson.Gson import com.google.gson.Gson
import com.google.gson.TypeAdapter import com.google.gson.TypeAdapter
import com.qimai.android.fetch.interceptors.GsonParseError
import com.qimai.android.fetch.interceptors.ServerError
import com.qimai.android.fetch.interceptors.TokenExpire import com.qimai.android.fetch.interceptors.TokenExpire
import com.qimai.android.fetch.model.BaseData import com.qimai.android.fetch.model.BaseData
import okhttp3.ResponseBody import okhttp3.ResponseBody
...@@ -14,22 +16,30 @@ import java.lang.reflect.Type ...@@ -14,22 +16,30 @@ import java.lang.reflect.Type
* created by wangwei ON 2019-09-04 email:wangwei_5521@163.com * created by wangwei ON 2019-09-04 email:wangwei_5521@163.com
* @version 1.1.1 * @version 1.1.1
* @Description * @Description
* @param gsonParseError gson解析异常
* @param serverError 服务器返回的false
*
**/ **/
class StandardGsonResponseBodyConverter<T> constructor( class StandardGsonResponseBodyConverter<T> constructor(
var adapter: TypeAdapter<T>, var adapter: TypeAdapter<T>,
var gson: Gson, var gson: Gson,
var type: Type, var type: Type,
var expire: TokenExpire? var expire: TokenExpire?,
var gsonParseError: GsonParseError? = null,
var ServerError: ServerError?=null
) : ) :
Converter<ResponseBody, T> { Converter<ResponseBody, T> {
override fun convert(value: ResponseBody): T? { override fun convert(value: ResponseBody): T? {
val reponseString = value.string() val reponseString = value.string()
// throw TOKENExpireException("token过期") // throw TOKENExpireException("token过期")
val baseData = gson.fromJson<BaseData<*>>(reponseString, BaseData::class.java) val baseData = gson.fromJson<BaseData<*>>(reponseString, BaseData::class.java)
if (TextUtils.equals("false", baseData.status)) { if (TextUtils.equals("false", baseData.status)) {
value.close() value.close()
ServerError?.apply {
this.serverError("${baseData.message}-${baseData.code}")
}
if (baseData.code == 9001L) { if (baseData.code == 9001L) {
throw TOKENExpireException("token过期") throw TOKENExpireException("token过期")
...@@ -37,7 +47,7 @@ class StandardGsonResponseBodyConverter<T> constructor( ...@@ -37,7 +47,7 @@ class StandardGsonResponseBodyConverter<T> constructor(
it.expre() it.expre()
} }
} else { } else {
throw BizException(baseData?.message ?: "操作失败",baseData.code) throw BizException(baseData?.message ?: "操作失败", baseData.code)
} }
} else { } else {
try { try {
...@@ -49,6 +59,12 @@ class StandardGsonResponseBodyConverter<T> constructor( ...@@ -49,6 +59,12 @@ class StandardGsonResponseBodyConverter<T> constructor(
gson.fromJson<BaseData<*>>(reponseString, type) as T gson.fromJson<BaseData<*>>(reponseString, type) as T
} }
} }
} catch (t: IllegalStateException) {
//json解析异常
gsonParseError?.apply {
this.parseError(t.message)
}
throw ServerResponseException(t.message)
} catch (t: Throwable) { } catch (t: Throwable) {
throw ServerResponseException(t.message) throw ServerResponseException(t.message)
} finally { } finally {
...@@ -59,7 +75,8 @@ class StandardGsonResponseBodyConverter<T> constructor( ...@@ -59,7 +75,8 @@ class StandardGsonResponseBodyConverter<T> constructor(
} }
class ServerResponseException(msg: String?) : IOException(msg) class ServerResponseException(msg: String?) : IOException(msg)
// 业务返回问题 // 业务返回问题
class BizException(msg: String,var code:Long) : IOException(msg) class BizException(msg: String, var code: Long) : IOException(msg)
class TOKENExpireException(msg: String) : IOException(msg) class TOKENExpireException(msg: String) : IOException(msg)
\ No newline at end of file
package com.qimai.android.fetch.interceptors
/***
* json解析异常
*/
interface GsonParseError {
fun parseError(msg: String? = null)
}
\ No newline at end of file
package com.qimai.android.fetch.interceptors
/***
* 服务器返回的false
*/
interface ServerError {
fun serverError(msg: String? = null)
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment