在循环中使用Realm或在Android中插入列表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在循环中使用Realm或在Android中插入列表相关的知识,希望对你有一定的参考价值。

美好的一天。我有一个问题。

首先,在我看来,一个很好的数据库用于存储本地数据,我已经开发了一个社交网络,我在本地和每个应用程序保存消息开始我从服务器下载消息,以便在本地保存它们让我们说当前要使用的会话。 Realm似乎是开箱即用的最佳解决方案但是我遇到了由于Realm事务而阻止我的UI的情况。以下是案例。

•我必须使用UI线程中的Realm对象,否则它将抛出异常,说我需要从我调用的线程访问该对象,因此在这种情况下,来自领域的executeTransactionAsync将无法正常工作发生在UI线程上

•这是第一次这样的问题,但我想象自己为什么以前不是一个问题,因为我的mesasges不是那么多,现在我有40条消息和哇...领域阻止UI真的很可怕(仅约4秒)这是pathethic。

•我已经尝试运行领域实际事务和我在一个单独的线程中调用的方法,但是这不会有效,因为必须从UI线程访问Realm对象,所以根本没有运气背景线程。

所以,如果有人能取悦,我来这里寻求帮助?

这是领域方法的代码

 public void insertMessage(final String userId, final String opponentId, final String message,
                          final String messageId, final String date,
                          final String id, final String deliveryStatus,
                          final String userImage,
                          final String opponentImage, final String deleteOpponentId,
                          final String deleteUserId,
                          final boolean hasGif, final String gifUrl, final boolean animated) {

    if (!isMessageExist(messageId)) {
        handler.post(new Runnable() {
            @Override
            public void run() {

            }
        });
        mRealm.executeTransaction(new Realm.Transaction() {
            @Override
            public void execute(Realm realm) {
                MessageModel messageModel = realm.createObject(MessageModel.class);

                messageModel.setId(id);
                messageModel.setMessageId(messageId);
                messageModel.setMessage(message);
                messageModel.setUserId(userId);
                messageModel.setOpponentId(opponentId);
                messageModel.setAnimated(animated);
                messageModel.setDeliveryStatus(deliveryStatus);
                messageModel.setUserImage(userImage);
                messageModel.setOpponentImage(opponentImage);
                messageModel.setDate(date);
                messageModel.setHasGif(hasGif);
                messageModel.setGifUrl(gifUrl);
                messageModel.setDeleteUserId(deleteUserId);
                messageModel.setDeleteOpponentId(deleteOpponentId);
            }
        });
    }


}

手柄是MainLooper,此时基本上是UI线程

我在循环中调用这个方法,我得到了消息数组,就是这样,有什么帮助吗?

以上是关于在循环中使用Realm或在Android中插入列表的主要内容,如果未能解决你的问题,请参考以下文章

markdown 在Android中使用Realm

意外的大 Realm 文件大小

Realm Android 无法在没有主键的情况下复制或更新对象

Realm React-Native:从 JS(反应本机代码)和 android(java)访问相同的领域

正确的Realm Migration Android方式

在Android加入和使用Realm