如何将通用类传递给GsonRequest
类?这是我的api的响应模型。
class APIResponse<T> {
var status:Boolean
var data:T?
var collection: ArrayList<T>?
var message:String?
constructor(status:Boolean, data:T?, collection: ArrayList<T>?, message:String?){
this.status = status
this.data = data
this.collection = collection
this.message = message
}
}
这些是我数据库中表的kotlin模型。用于将json转换为模型。
class ControlCategory {
var id:Int = 0
var name:String? = null
var control_points:ArrayList<ControlPoint> = ArrayList()
constructor(id:Int, name:String, control_points:ArrayList<ControlPoint>) {
this.id = id
this.name = name
this.control_points = control_points
}
}
class ControlPoint {
var id:Int
var name:String
var control_category: ControlCategory
constructor(id:Int, name:String, control_category:ControlCategory) {
this.id = id
this.name = name
this.control_category = control_category
}
}
这是我的 GsonRequest 类。
open class GsonRequest<T>(
url: String,
private val clazz: Class<T>,
private val headers: MutableMap<String, String>?,
private val listener: Response.Listener<T>,
errorListener: Response.ErrorListener
) : Request<T>(Method.GET, url, errorListener) {
protected val gson = Gson()
override fun getHeaders(): MutableMap<String, String> = headers ?: super.getHeaders()
override fun deliverResponse(response: T) = listener.onResponse(response)
override fun parseNetworkResponse(response: NetworkResponse?): Response<T> {
return try {
val json = String(
response?.data ?: ByteArray(0),
Charset.forName(HttpHeaderParser.parseCharset(response?.headers)))
Response.success(
gson.fromJson(json, clazz),
HttpHeaderParser.parseCacheHeaders(response))
} catch (e: UnsupportedEncodingException) {
Response.error(ParseError(e))
} catch (e: JsonSyntaxException) {
Response.error(ParseError(e))
}
}
}
如何将APIResponse<ControlCategory>
传递给GsonRequest
类':
val controlPointsRequest = GsonRequest<APIResponse<ControlCategory>>(
getString(R.string.apiUrl)+"control-categories",
object: TypeToken<APIResponse<ControlCategory>>(){}.type,
headers,
listener,
error
);
我通过object: TypeToken<APIResponse<ControlCategory>>(){}.type
时出现错误。