【问题标题】:How to get Json Response in Arraylist from List<Item> using RxJava and Kotlin如何使用 RxJava 和 Kotlin 从 List<Item> 获取 Arraylist 中的 Json 响应
【发布时间】:2018-08-17 16:41:25
【问题描述】:

在 ArrayList 中获取响应时面临的问题。

我在字符串值上有以下响应

 var res_message: String = ""
 res_message = "${result.vehicletypes} "

获取低于此字符串的值

     [VehicleType(_id=1, vehicleType=Hatchback, __v=0), 
      VehicleType(_id=2, vehicleType=Maruti, __v=0), 
      VehicleType(_id=3, vehicleType=Honda, __v=0), 
      VehicleType(_id=4, vehicleType=Bike, __v=0)] 

改造结果是

 vehicletypes = {ArrayList@6055}  size = 4
 0 = {Model$VehicleType@6058} "VehicleType(_id=1, 
vehicleType=Hatchback, __v=0)"
 1 = {Model$VehicleType@6059} "VehicleType(_id=2, 
 vehicleType=Maruti, __v=0)"
  2 = {Model$VehicleType@6060} "VehicleType(_id=3, 
 vehicleType=Honda, __v=0)"
  3 = {Model$VehicleType@6061} "VehicleType(_id=4, 
  vehicleType=Bike, __v=0)"

以下代码片段向 API 发送请求。

            disposable = apiServices.getVehicle(token)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(
                    { result ->


                        res_message = "${result.vehicletypes} "
                        Log.d("Type==", res_message)
                    },
                    { error ->
                        res_message = "${error.message}"
                        // validateToken()
                    }
            )

模型类

  data class Vehicles(val success: Boolean, val vehicletypes: List<VehicleType>, val message: String)
  data class VehicleType(val _id: String, val vehicleType: String, val __v: String)

我想在下面的 Arralist VehicleType 列表中获取此值 vehicleListArray

   private var vehicleListArray: ArrayList<Model.VehicleType>? = null

我们如何做到这一点。 提前致谢。

【问题讨论】:

  • apiService定义中fun getPeople()方法的返回类型是什么?

标签: android kotlin retrofit2 rx-kotlin


【解决方案1】:

假设您尝试解析的是来自服务的响应,该服务能够向您发送列表(例如 Json)的正确格式而不是 Retrofit 可以轻松处理解析列表。

在您的 apiService 定义中:

fun getPeople(token: Whatever): Observable<List<VehicleType>>

如果你还没有:

Retrofit.Builder()
   .addConverterFactory(GsonConverterFactory.create(gson))

【讨论】:

  • 谢谢@muminers 我会努力的。
  • 我会使用 Flowable 而不是 Observable 但答案没问题! :thumbup:
  • @axierjhtjz 很好,你已经指出了。实际上,在我看来,这并不容易做出决定。这是涵盖此主题的文档:github.com/ReactiveX/RxJava/wiki/…
  • 是的,选择并不容易,这就是我说“我会使用”的原因。顺便说一句,读得很好。
  • @axierjhtjz 为什么不是 Single,你期待更多的价值吗?对于简单的 POST,可以使用 Completable
【解决方案2】:

我得到了解决方案,我必须按照以下代码 sn-p 处理 Respose。

private fun getVehicleType() { 
    disposable?.add(apiServices.getVehicle(token)
            .observeOn(AndroidSchedulers.mainThread())
            .subscribeOn(Schedulers.io())
            .subscribe(this::handleResponse, this::handleError))
}

private fun handleResponse(vehicles: Model.Vehicles) {
    VehiclesArrayList = ArrayList(vehicles.vehicletypes)
    Log.d("type==","n--"+VehiclesArrayList )
    mAdapter = DataAdapter(VehiclesArrayList !!, this)
    v_android_list.adapter = mAdapter
}

private fun handleError(error: Throwable) {
    Log.d("type", error.localizedMessage)
    Toast.makeText(context, "Error ${error.localizedMessage}", Toast.LENGTH_SHORT).show()
}

【讨论】:

    猜你喜欢
    • 2016-11-18
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 2019-03-27
    • 2019-09-28
    • 2015-05-16
    • 2016-03-11
    • 2020-01-18
    相关资源
    最近更新 更多