【问题标题】:RealmResults size is returning ZeroRealmResults 大小返回零
【发布时间】:2017-12-06 13:11:12
【问题描述】:

我有一个小问题,我找不到任何结果。是的,我也做了一些研究。

我有一个变量 mResults = RealmResults ;

这有如下图所示的数据

但是当我输入 >>mResults.size

问题在于 Recyclerview 的 getItemCöunt

ActivityMain::::

Realm.init(this)
        val configuration = RealmConfiguration.Builder().build()
        Realm.setDefaultConfiguration(configuration)
    mRealm = Realm.getDefaultInstance()
            val results:RealmResults<Drop> = mRealm.where(Drop::class.java).findAll()

            mToolbar = findViewById<Toolbar>(R.id.toolbar)
            mRecycler = findViewById<RecyclerView>(R.id.rv_drops)
            val manager = LinearLayoutManager(this)

            mRecycler.layoutManager = manager
            mRecycler.adapter = AdapterDrops(this, results)

open class Drop : RealmObject {
private var what: String? = null
@PrimaryKey
private var added: Long? = null
private var whenT: Long? = null
private var completed: Boolean? = null

constructor(){}

constructor(what: String, added: Long, whenT: Long, completed: Boolean) : super() {
    this.what = what
    this.added = added
    this.whenT = whenT
    this.completed = completed
}


fun getWhat(): String? {
    return what
}

fun setWhat(what: String) {
    this.what = what
}


fun getAdded(): Long? {
    return added
}

fun setAdded(added: Long) {
    this.added = added
}

fun getWhenT(): Long? {
    return whenT
}

fun setWhenT(whenT: Long) {
    this.whenT = whenT
}


fun getCompleted(): Boolean? {
    return completed
}

fun setCompleted(completed: Boolean) {
    this.completed = completed
}

}

class AdapterDrops: RecyclerView.Adapter<AdapterDrops.DropHolder> {
    private var mInflater:LayoutInflater
    private var mResults:RealmResults<Drop>
    constructor(context:Context, results: RealmResults<Drop>){
        mInflater = LayoutInflater.from(context)
        mResults = results

    }

    override fun onBindViewHolder(holder: DropHolder?, position: Int) {
        val drop:Drop = mResults[position]!!
        holder!!.mTextWhat.setText(drop.getWhat())

    }

    override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): DropHolder {
        val view = mInflater.inflate(R.layout.row_drop, parent, false)
        val holder = DropHolder(view)
        return holder
    }

    override fun getItemCount(): Int {
        return mResults.size   <<<<< pröblem
    }

    class DropHolder: RecyclerView.ViewHolder {


        var mTextWhat:TextView
        constructor(itemView: View):super(itemView){
            mTextWhat = itemView.findViewById<TextView>(R.id.tv_what)

        }

    }

}

谢谢各位。

【问题讨论】:

  • 请分享一些代码
  • 嗯,我做到了.. 希望有人能帮上忙

标签: android kotlin realm


【解决方案1】:

在从 db 中获取所有记录时试试这个

var mResults:OrderedRealmCollection<Drop> = Realm.getDefaultInstance().where(Drop::class.java).findAll()

请用空的构造函数定义 Drop 类。

请从活动中删除以下代码并将它们粘贴到您的应用程序类中

  //region initialise Realm for application
    Realm.init(this)
    //endregion

    //region creating realm config
    val realmConfig:RealmConfiguration = RealmConfiguration.Builder()
            .name("kotlin_demo.realm")
            .deleteRealmIfMigrationNeeded()
            .build()
    //endregion

    //region for development purpose getting new realm db each time
    Realm.deleteRealm(realmConfig)

    Realm.setDefaultConfiguration(realmConfig)
    //endregion

在 kotlin 中不需要为 Drop 类定义 getter setter 方法,所以删除它

【讨论】:

  • 伙计,它与 OrderedRealmCOllectiön 一起工作.. 非常感谢.. 但你能告诉我为什么吗?为什么 REalmresults 中的大小为 0?
  • 您查询的结果始终显示为 OrderedRealm 对象的集合,因为结果有很多参数,我们从中得到的结果 mo OrderedRealmCollection 不是正常的对象列表。
  • Realm.getDefaultInstance().where( 不好,现在你永远无法关闭 Realm 实例
  • 您可以在交易后关闭您的实例。我已经将它创建为简单的演示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-30
相关资源
最近更新 更多