-1

我已经启动了一个计时器,它调用 getMessage webservice,它返回该用户数组列表大小的通信消息总是显示正确的消息数量,但是当在该消息的列表视图中显示时,只显示最后一条由 web 服务发送的消息,我使用了这个代码。

public void handleMessage(Message msg) 
    {
        super.handleMessage(msg);

        if(msg.arg1!=RECIEVEFAILURE)
           {
            objrReceiveMessageSiteList =(ArrayList<ReceiveMessageSiteList>)msg.obj;
            System.out.println("objrReceiveMessageSiteList.get(0)"+objrReceiveMessageSiteList.get(0).getMessageStatus());
            System.out.println("objrReceiveMessageSiteList.get(0)"+objrReceiveMessageSiteList.size());
            if(objrReceiveMessageSiteList.size()!=0 && !objrReceiveMessageSiteList.get(0).getMessageStatus().equalsIgnoreCase("No New Message"))
            {
                for(int i=0;i<objrReceiveMessageSiteList.size();i++)
                {
                    objkeyvaluepair.setMessage(objrReceiveMessageSiteList.get(i).getMessage());
                    objkeyvaluepair.setMessageType(objrReceiveMessageSiteList.get(i).getMessageType());
                    objkeyvaluepair.setTimeStamp(objrReceiveMessageSiteList.get(i).getTimeStamp());
                    objkeyvaluepair.setSenderFirstName(objrReceiveMessageSiteList.get(i).getSenderFirstName());
                    objkeyvaluepair.setSenderId(objrReceiveMessageSiteList.get(i).getSenderId());
                    objkeyvaluepair.setRecieverFirstName(objrReceiveMessageSiteList.get(i).getReceiverFirstName());
                    messagerecord.add(objkeyvaluepair);
                    System.out.println("MESSAGE SIZE"+messagerecord.size());
                    System.out.println("MESSAGE---------- findeee"+messagerecord.get(i).getMessage());

                }
                System.out.println("objrReceiveMessageSiteList.get(0)--------------"+objrReceiveMessageSiteList.get(0).getMessageStatus());
                message.setText(""+messagerecord.size());
            }
    }

    }
};

在这个 for 循环 arraylist 中,在 syste.out.println 中显示正确的消息。但是当在适配器中发送时,适配器设置正确的大小,但在所有列表视图中只显示最后一条消息。请帮助我

4

2 回答 2

1

您正在通过嵌套循环将相同的对象 ( objkeyvaluepair) 添加到每次迭代中。ArrayListfor

在最里面的for循环中,您应该创建一个新objkeyvaluepair对象,然后将这个新对象添加到ArrayList.

于 2012-05-21T04:37:30.993 回答
0

将此方法更改为以下内容:

public void handleMessage(Message msg) 
    {
        super.handleMessage(msg);

        if(msg.arg1!=RECIEVEFAILURE)
           {
            objrReceiveMessageSiteList =(ArrayList<ReceiveMessageSiteList>)msg.obj;
            System.out.println("objrReceiveMessageSiteList.get(0)"+objrReceiveMessageSiteList.get(0).getMessageStatus());
            System.out.println("objrReceiveMessageSiteList.get(0)"+objrReceiveMessageSiteList.size());
            if(objrReceiveMessageSiteList.size()!=0 && !objrReceiveMessageSiteList.get(0).getMessageStatus().equalsIgnoreCase("No New Message"))
            {
                for(int i=0;i<objrReceiveMessageSiteList.size();i++)
                {
                    //Create Local object of the Objkeyvaluepair here, for example
                    //ObjectKeyValuePair objkeyvaluePair=new OjectKeyvaluePair();
                    objkeyvaluepair.setMessage(objrReceiveMessageSiteList.get(i).getMessage());
                    objkeyvaluepair.setMessageType(objrReceiveMessageSiteList.get(i).getMessageType());
                    objkeyvaluepair.setTimeStamp(objrReceiveMessageSiteList.get(i).getTimeStamp());
                    objkeyvaluepair.setSenderFirstName(objrReceiveMessageSiteList.get(i).getSenderFirstName());
                    objkeyvaluepair.setSenderId(objrReceiveMessageSiteList.get(i).getSenderId());
                    objkeyvaluepair.setRecieverFirstName(objrReceiveMessageSiteList.get(i).getReceiverFirstName());
                    messagerecord.add(objkeyvaluepair);
                    System.out.println("MESSAGE SIZE"+messagerecord.size());
                    System.out.println("MESSAGE---------- findeee"+messagerecord.get(i).getMessage());

                }
                System.out.println("objrReceiveMessageSiteList.get(0)--------------"+objrReceiveMessageSiteList.get(0).getMessageStatus());
                message.setText(""+messagerecord.size());
            }
    }

    }
};
于 2012-05-21T04:24:53.670 回答