如何将通用类传递给GsonRequest <t>构造函数

时间:2018-10-08 15:34:08

标签: java android kotlin gson

如何将通用类传递给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时出现错误。

0 个答案:

没有答案