Android - как получить список свойств из MutableList - PullRequest
0 голосов
/ 27 апреля 2019

Это мой 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 и активность для получения данных, и она отлично работает. Проблема в том, что я хочу получить значения cat (свойства json внутри cat) из моего MutableLiveData.

Это мой код активности:

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?

1 Ответ

1 голос
/ 27 апреля 2019

Я получаю то, что вам не нужно 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, учитывая формат.

...