Как передать универсальный класс в конструктор GsonRequest <T> - PullRequest
0 голосов
/ 08 октября 2018

Как я могу передать универсальный класс в 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 class ':

val controlPointsRequest = GsonRequest<APIResponse<ControlCategory>>(
            getString(R.string.apiUrl)+"control-categories",
            object: TypeToken<APIResponse<ControlCategory>>(){}.type,
            headers,
            listener,
            error
    );

Когда я передаю object: TypeToken<APIResponse<ControlCategory>>(){}.type, это дает ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...