Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 解析聊天未收到的消息_Java_Android_Parse Platform - Fatal编程技术网

Java 解析聊天未收到的消息

Java 解析聊天未收到的消息,java,android,parse-platform,Java,Android,Parse Platform,我们正在android应用程序中实现聊天功能。我们有一个用户列表,如果你点击其中一个用户,你就可以开始与该用户聊天。我们可以通过发送者和接收者向数据库发送消息,我们可以在每次打开特定聊天时加载这些消息。但是,我们无法从数据库获取发送给用户的消息 这是我们加载对话列表的代码: private void loadConversationList() { final ParseQuery<ParseObject> q = ParseQuery.getQuery("Chat");

我们正在android应用程序中实现聊天功能。我们有一个用户列表,如果你点击其中一个用户,你就可以开始与该用户聊天。我们可以通过发送者和接收者向数据库发送消息,我们可以在每次打开特定聊天时加载这些消息。但是,我们无法从数据库获取发送给用户的消息

这是我们加载对话列表的代码:

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’的查询是不完整的。不知道为什么或者如何修复它。您已经在分析数据浏览器中验证了数据是否按预期插入?