the*_*osh 3 android android-sqlite greendao
你可能记得我之前关于Green DAO双向关系的问题,我的聊天内容包括对话和消息.
每条消息都有一个父对话,对话中有一条消息列表.
当我尝试添加新消息时,只要我不关闭应用程序,它就能完美运行.
这是我用于向现有对话添加消息的代码:
我现在有我的代码执行此操作:
Conversation conv = getConversation();
List<Message> list = conv.getMessageList();
Message msg = new Message();
msg.setConversationId(conv,getId());
MessageDao.insert(msg);
list.add(msg);
conv.update();
// ConversationDao.update(conv);
Run Code Online (Sandbox Code Playgroud)
当我下次打开应用程序并调用时conv.getMessageList(),结果为空ArrayList.
我究竟做错了什么?
编辑:
我改变了我的代码,现在它看起来像这样:
Conversation conv= getCOnversation();
Message msg = new Message();
msg.setConversation(conv);
MessageDao.insert(msg);
conv.resetMessageList();
Run Code Online (Sandbox Code Playgroud)
不幸的是,现在比以往任何时候都更多(即使在同一次运行中),仍然调用conv.getMessageList()返回空java.list.
编辑2:
这里是生成器的代码(这不是真正的代码,而只是对问题很重要的代码.
Entity message = schema.addEntity("Message");
message.addIdProperty().autoincrement();
Entity conversation =schema.addEntity("Conversation");
conversation.addIdProperty().autoincrement();
Property parentConversation = message.addLongProperty("parentConversation")
.getProperty();
Property messages = conversation.addLongProperty("messages").getProperty();
message.addToOne(conversation, parentConversation);
conversation.addToMany(message, messages);
Run Code Online (Sandbox Code Playgroud)
编辑3
现在,而不是调用conv.getMessageList();我运行此行,它工作正常.
List<Message> messageList = MessageDao.queryBuilder()
.where(Properties.parentConversation.eq(conv.getId())
.list()
Run Code Online (Sandbox Code Playgroud)
我怀疑在实施这一切时对我或greenrobot来说是一个重大问题.
这是运行上面代码的问题Session.runInTx吗?
这是有问题的部分:
Property parentConversation = message.addLongProperty("parent")
.getProperty();
Property messages = conversation.addLongProperty("messages")
.getProperty();
message.addToOne(conversation, parentConversation);
conversation.addToMany(message, messages);
Run Code Online (Sandbox Code Playgroud)
对于1:N关系,您必须对ToOne和ToMany关系使用相同的属性.试试这个并重新生成代码:
Property parentConversation = message.addLongProperty("parent")
.getProperty();
message.addToOne(conversation, parentConversation);
conversation.addToMany(message, parentConversation);
Run Code Online (Sandbox Code Playgroud)