Java 解析聊天未收到的消息
我们正在android应用程序中实现聊天功能。我们有一个用户列表,如果你点击其中一个用户,你就可以开始与该用户聊天。我们可以通过发送者和接收者向数据库发送消息,我们可以在每次打开特定聊天时加载这些消息。但是,我们无法从数据库获取发送给用户的消息 这是我们加载对话列表的代码:Java 解析聊天未收到的消息,java,android,parse-platform,Java,Android,Parse Platform,我们正在android应用程序中实现聊天功能。我们有一个用户列表,如果你点击其中一个用户,你就可以开始与该用户聊天。我们可以通过发送者和接收者向数据库发送消息,我们可以在每次打开特定聊天时加载这些消息。但是,我们无法从数据库获取发送给用户的消息 这是我们加载对话列表的代码: private void loadConversationList() { final ParseQuery<ParseObject> q = ParseQuery.getQuery("Chat");
private void loadConversationList()
{
final ParseQuery<ParseObject> q = ParseQuery.getQuery("Chat");
if (convList.size() == 0)
{
// load all messages...
ArrayList<String> al = new ArrayList<String>();
al.add(buddy);
al.add(UserList.user.getUsername());
q.whereContainedIn("sender", al);
q.whereContainedIn("receiver", al);
}
else
{
// load only newly received message..
if (li != null && li.size() > 0)
q.whereGreaterThan("createdAt", lastMsgDate);
q.whereEqualTo("sender", buddy);
q.whereEqualTo("receiver", UserList.user.getUsername());
}
q.orderByDescending("createdAt");
q.setLimit(30);
q.findInBackground(new FindCallback<ParseObject>()
{
@Override
public void done(List<ParseObject> li, ParseException e)
{
if (li != null && li.size() > 0)
{
for (int i = li.size() - 1; i >= 0; i--)
{
ParseObject po = li.get(i);
Conversation c = new Conversation(po
.getString("message"), po.getCreatedAt(), po.getString("sender"));
convList.add(c);
f = li.size();
if (lastMsgDate == null
|| lastMsgDate.before(c.getDate()))
lastMsgDate = c.getDate();
adp.notifyDataSetChanged();
}
}
handler.postDelayed(new Runnable() {
@Override
public void run()
{
if (isRunning)
loadConversationList();
}
}, 1000);
}
});
}
private void loadConversationList()
{
final ParseQuery q=ParseQuery.getQuery(“聊天”);
if(convList.size()==0)
{
//加载所有邮件。。。
ArrayList al=新的ArrayList();
al.add(buddy);
al.add(UserList.user.getUsername());
q、 其中包含以下内容(“发送方”,al);
q、 其中包含以下内容(“接收方”,al);
}
其他的
{
//仅加载新收到的消息。。
如果(li!=null&&li.size()>0)
q、 其中大于(“createdAt”,lastMsgDate);
q、 whereEqualTo(“发件人”,巴迪);
q、 其中equalto(“接收者”,UserList.user.getUsername());
}
q、 orderByDescending(“创建数据”);
q、 设定上限(30);
q、 findInBackground(新的FindCallback()
{
@凌驾
公共作废完成(列表li,异常e)
{
如果(li!=null&&li.size()>0)
{
对于(int i=li.size()-1;i>=0;i--)
{
ParseObject po=li.get(i);
对话c=新对话(po)
.getString(“消息”)、po.getCreatedAt()、po.getString(“发送方”);
增加(c);
f=li.size();
如果(lastMsgDate==null
||lastMsgDate.before(c.getDate()))
lastMsgDate=c.getDate();
adp.notifyDataSetChanged();
}
}
handler.postDelayed(新的Runnable(){
@凌驾
公开募捐
{
如果(正在运行)
loadConversationList();
}
}, 1000);
}
});
}
对话列表用于用te消息填充屏幕。在SendMessage中,我们也会更新对话列表,当然只会使用send messages。问题是对话列表不会更新收到的消息您是否已查明问题所在?我看到有几个地方可能会失败,这是第一步。@nasch我们认为问题在于进行解析查询的第一位代码,因为方法中的ParseObject列表只是发送消息的长度。因此,我们认为给出给‘done’的查询是不完整的。不知道为什么或者如何修复它。您已经在分析数据浏览器中验证了数据是否按预期插入?