android - 如何从JsonObject获取数据并在Kotlin的RecyclerView上设置为Array?

标签 android kotlin

我正在做一个以前由另一个开发人员完成的项目。我继续为该项目调用API。我一直遵循他的方式。但是,当我想检索JsonArray并将其显示为RecyclerView时,我陷入了困境。
我如何从JSONArray获取数据。

界面:

interface TripService {
    @FormUrlEncoded
    @POST("driver/getAvailableTripList")
    fun availableTripList(@Field("page") page : String): Call<JsonObject>
}

TripServiceHandler:
class TripServiceHandler {
    private var instance: TripService? = null
    // Singleton instance to access through the application

    init {
        if(instance == null) {
            instance = TripFactory().createJourney(TripService::class.java)
        }
    }


    // Method for Driver Balance Service
    fun availableTripList(page: String, listener: ServerCallbackListener) =
            this.instance?.let {this.instance!!.availableTripList(page).enqueue(RetrofitCallBackHandler.getHandler(listener)) 
}

片段:
private fun getAvailableTrip(){
    showLoading()
    TripServiceHandler().availableTripList("1", availableTripHandler)
}

private var availableTripHandler: ServerCallbackListener = object : ServerCallbackListener {
    override fun onSuccess(baseResponse: JsonObject?) {
        hideLoading()
        val data = baseResponse!!.getAsJsonObject(AppConstants.KEY_DATA)

    }

    override fun onFailure(message: String?) {
        showMessageBar(message, SnackBarUtility.MessageType.ERROR)
    }

}

数据模型:
class Trip : Serializable {

    @SerializedName("tid")
    var tripId: String? = null

    @SerializedName("max_passengers")
    var maxPass: String? = null

    @SerializedName("driver_revenue")
    var priceTrip: String? = null

    @SerializedName("origin_coordinate")
    var originCoordinate: List<Coordinate>? = null

    @SerializedName("destination_coordinate")
    var destCoordinate: List<Coordinate>? = null
}

jsonArray
"rows": [
            {
                "tid": "44551",
                "did": null,
                "status": 1,
                "leaving_time": "1547093186",
                "max_passengers": 12,
                "total_revenue": 0,
                "driver_revenue": 0,
                "origin_coordinate": {
                    "x": 1.43762623,
                    "y": 103.80153311
                },
                "destination_coordinate": {
                    "x": 1.29481854,
                    "y": 103.78735487
                },
                "total_requests": 12,
                "destination_geom": "0101000020E610000048F0284063F25940854F5F1901BFF43F",
                "origin_geom": "0101000020E61000002AB6CC40C7F25940032A19ECF7E4F63F",
                "stops": [
                    {
                        "sid": "46969",
                        "count": "4",
                        "order_seq": 1,
                        "mode": 0,
                        "name": "Woodlands Ave 4",
                        "description": "Blk 532",
                        "coordinate": {
                            "x": 1.43059181782,
                            "y": 103.792699721
                        },
                        "eta_time": "1547093186",
                        "leaving_time": "1547093366"
                    },

最佳答案

如我所见,您的数据应该已经是JSONobject类型的值,并且由于您使用的是序列化名称,所以我假设您正在使用Gson库。

首先,预先制作另一个模型来包含您的列表(因为它已在行中传递)

data class TripList:Serializeable{
    @("rows")
    myList:List<Trip> = ArrayList()
}

然后,您可以尝试
val tripList = gson.fromJson(data, TripList::class.java)

然后您的tripList将是TripList类型的类,请使用tripList.myList访问您的列表。希望它将为您的解决方案工作

关于android - 如何从JsonObject获取数据并在Kotlin的RecyclerView上设置为Array?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54002477/

相关文章:

java - 在没有互联网的情况下在本地wifi聊天中跳过消息

android - Delphi android 创建操作栏

enums - 如何在 Kotlin 中为枚举创建 "static"方法?

android - Retrofit 2 on Android 6 设置零路径参数

android - 潜在的空指针异常。某些布局版本中缺少资源

android 模拟器 2.3.3 - 无法通过 adb 启动联系人应用程序

android - 禁止导入 Crashlytics

java - 如何在不使用类 InetAddress 或避免 10 分钟缓存时间的情况下获取 DNS 解析时间?

java - 正确将 RxJava 代码转换为 Kotlin

java - 在哪里创建音乐播放器服务 w.r.t.媒体浏览器服务兼容