android-如何从MutableList获取属性列表

问题描述 投票:0回答:1

这是我的JSON:

{
  "cats": [
    {
      "id": "2",
      "uid": "2",
      "name": "English",
      "date_update": "2019-04-22 15:31:00",
      "numCards": 0
    }
  ]
}

我有这两个类:

  data class CatModelStr(
    val cats: List<Cat>
)
data class Cat(
    val date_update: String,
    val id: String,
    val name: String,
    val numCards: Int,
    val uid: String
)

我正在使用MVVM和android架构组件。这是我获取数据的模型类:

class CategoryModel(private val netManager: NetManager) {
var dateChanges: String = "null";

fun getCats(): MutableLiveData<MutableList<CatModelStr>> {
    var list = MutableLiveData<MutableList<CatModelStr>>();
    if (netManager.isConnected!!) {
        list = getCatsOnline();
    }
    return list
}

private fun getCatsOnline(): MutableLiveData<MutableList<CatModelStr>> {
    var list:MutableLiveData<MutableList<CatModelStr>> =MutableLiveData()
    val getCats = ApiConnection.client.create(Category::class.java)

    getCats.getCats(MyApp().uid, dateChanges)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(
            { success ->
                list += success
            },{
                    error->
                Log.v("this","ErrorGetCats "+ error.localizedMessage);
            }
        )

    return list;
}

operator fun <T> MutableLiveData<MutableList<T>>.plusAssign(values: List<T>) {
    val value = this.value ?: arrayListOf()
    value.addAll(values)
    this.value = value
}

我有一个viewModel和活动来获取数据,它工作正常。问题是这样,我想从我的MutableLiveData中获取cat值(cat内的json属性)。

这是我的活动代码:

vm.getCats().observe(this, Observer {
        if(it!=null) {
            rc_cats.visibility= View.VISIBLE
            pb.visibility=View.GONE
            catAdapter.reloadData(it)
        }
    })

价值是MutableList<CatModelStr>,我需要Cat。

我怎样才能让Cat离开MutableList?

android android-architecture-components android-livedata android-mvvm
1个回答
1
投票

我得到的是你不需要MutableList列表,而你需要CatModelStr

你需要从开始我做出以下更改。

class CategoryModel(private val netManager: NetManager) {
var dateChanges: String = "null";

fun getCats(): MutableLiveData<CatModelStr> {
    var list = MutableLiveData<CatModelStr>();
    if (netManager.isConnected!!) {
        list = getCatsOnline();
    }
    return list
}

private fun getCatsOnline(): MutableLiveData<CatModelStr> {
    var list:MutableLiveData<CatModelStr> = MutableLiveData()
    val getCats = ApiConnection.client.create(Category::class.java)

    getCats.getCats(MyApp().uid, dateChanges)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(
            { success ->
                list.setValue(success)
            },{
                    error->
                Log.v("this","ErrorGetCats "+ error.localizedMessage);
                list.setValue(null)
            }
        )

    return list;
}

现在,如果观察到这一点,你将获得CatModelStr而不是MutableList,原因是你的JSON以CatModelStr格式给你数据,你试图在MutableList中不必要地获取它,这也无法工作,你无法解析你的JSON给定格式。

© www.soinside.com 2019 - 2024. All rights reserved.