Запрос размера Sub-объекта Realm Class - Kotlin - PullRequest
1 голос
/ 12 марта 2019

Как запросить размер объекта области, который находится в другом объекте области

У меня есть два класса области Competition & User.User - это класс области, также содержащийся в Competition:

open class Competition (@PrimaryKey var competitionId: String?=null,
                      var user: User? =null): RealmObject()

open class User(@PrimaryKey var userId: String?=null,
                      var name: String? =null): RealmObject()

В какой-то момент я хотел бы получить размер Пользователя в рамках конкретного CompetitionId в соревновании, и у меня возникла проблема сто, что я думал, было бы тривиально

Вот что я попробовал

var userObj = realm.where<Competition>().equalTo(
                "competitionId", competitionId
            ).findFirst().user.realm.where<User>().findAll().size

Это дает мне

kotlin.KotlinNullPointerException

Stacktrace:

2019-03-12 16:03:25.112 22028-22028/co.keepnet.bass W/System.err: kotlin.KotlinNullPointerException
2019-03-12 16:03:25.113 22028-22028/co.keepnet.bass W/System.err:     at co.keepnet.bass.ui.MainActivity$onClick$1.execute(MainActivity.kt:41)
2019-03-12 16:03:25.113 22028-22028/co.keepnet.bass W/System.err:     at io.realm.Realm.executeTransaction(Realm.java:1431)
2019-03-12 16:03:25.113 22028-22028/co.keepnet.bass W/System.err:     at co.keepnet.bass.ui.MainActivity.onClick(MainActivity.kt:37)
2019-03-12 16:03:25.113 22028-22028/co.keepnet.bass W/System.err:     at co.keepnet.bass.data.adapter.CompetitionsAdapter$onBindViewHolder$1.onClick(CompetitionsAdapter.kt:75)
2019-03-12 16:03:25.113 22028-22028/co.keepnet.bass W/System.err:     at android.view.View.performClick(View.java:6897)
2019-03-12 16:03:25.113 22028-22028/co.keepnet.bass W/System.err:     at android.view.View$PerformClick.run(View.java:26101)
2019-03-12 16:03:25.113 22028-22028/co.keepnet.bass W/System.err:     at android.os.Handler.handleCallback(Handler.java:789)
2019-03-12 16:03:25.113 22028-22028/co.keepnet.bass W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:98)
2019-03-12 16:03:25.113 22028-22028/co.keepnet.bass W/System.err:     at android.os.Looper.loop(Looper.java:164)
2019-03-12 16:03:25.114 22028-22028/co.keepnet.bass W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:6944)
2019-03-12 16:03:25.114 22028-22028/co.keepnet.bass W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
2019-03-12 16:03:25.114 22028-22028/co.keepnet.bass W/System.err:     at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
2019-03-12 16:03:25.114 22028-22028/co.keepnet.bass W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

1 Ответ

1 голос
/ 12 марта 2019

Я имею в виду, что является довольно тривиальным, , если , вы используете функции Realm в своих интересах (я думаю, 3.5.0+).

open class User(): RealmObject() {
    @PrimaryKey var userId: String? = null

    var name: String? = null

    @LinkingObjects("user")
    val userOfCompetitions: RealmResults<Competition>? = null
}

Тогда

val userCount = realm.where<User>()
                     .equalTo("userOfCompetitions.competitionId", competitionId)
                     .count()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...