gpt4 book ai didi

java - 为什么收到新消息时,所有先前消息的时间戳都设置为与新消息相同?

转载 作者:行者123 更新时间:2023-11-30 01:55:09 25 4
gpt4 key购买 nike

我的聊天输出如下所示,

enter image description here

在上图中,右侧聊天是我发送给其他人的聊天消息,左侧聊天是我收到其他人的回复。现在我的问题是当我在聊天时收到任何回复消息聊天与正确显示的消息一起显示,但是当我收到其他人的第二条响应消息时,第一次聊天(接收消息)的时间更改为第二次聊天(接收消息)时间,与我在上面的图像中解释的类似。如何修复这个问题有人帮助我。

我的聊天编程代码如下,

public View getView(int position, View convertView, ViewGroup parent) {


ChatMessageObjects m = messagesItems.get(position);

LayoutInflater mInflater = (LayoutInflater) context
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (messagesItems.get(position).isSelf() == 1) {
// message belongs to you, so load the right aligned layout
convertView = mInflater.inflate(R.layout.chat_message_right,
null);
//TextView lblFrom = (TextView) convertView.findViewById(R.id.lblMsgFrom);
TextView txtMsg = (TextView) convertView.findViewById(R.id.txtMsg);
//date and time declared on date here
TextView date = (TextView) convertView.findViewById(R.id.txtInfo);
try {
//actualDate contains date "(i.e)27-Aug-2015 6:20:25 am/pm" in this format
String actualDate = m.getDate();
Date FormatDate = new SimpleDateFormat("dd-MMM-yyyy h:mm:ss a").parse(actualDate);
//actualDate converted from "(i.e)27-Aug-2015 6:20:25 am/pm" to "6:20 pm" in this
//format for display the chat time for every chat message .
dateResult = new SimpleDateFormat("h:mm a").format(FormatDate);

// lblFrom.setText(m.getFromName());
} catch (ParseException e) {

e.printStackTrace();
}

date.setText(dateResult);
txtMsg.setText(m.getMessage());

} else {
//if (m.getMessage() != null) {
// message belongs to other person, load the left aligned layout
convertView = mInflater.inflate(R.layout.chat_message_left,
null);
//TextView lblFrom = (TextView) convertView.findViewById(R.id.lblMsgFrom);
TextView txtMsg = (TextView) convertView.findViewById(R.id.txtMsg);
//date and time added here
final TextView date = (TextView) convertView.findViewById(R.id.txtInfo);
//Time coding start from here
String actualDate = m.getDate();
if (actualDate == null) {
Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("h:mm a");
String strDate = sdf.format(c.getTime());
//Time set here
date.setText(strDate);

}
m.setDate(strDate);

txtMsg.setText(m.getMessage());

}

//}

}

return convertView;
}

}
}

最佳答案

String actualDate = m.getDate();
if (actualDate == null) {
Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("h:mm a");
String strDate = sdf.format(c.getTime());
//Time set here
date.setText(strDate);
}

您在这里所做的是获取 m.getDate() 的值,该值是 null,因为它尚未设置。然后您使用当前 时间放入 TextView。这适用于新消息,但不适用于旧消息。

您在这里忘记做的是设置 m 的日期。在 if 的末尾需要类似 m.setDate(strDate) 的内容。

因为您目前没有更改m 的日期值,所以每次您尝试使用String actualDate = m.getDate(); 获取它时,它将是null,导致日期“重置”为当前日期。


Now when i am receive the message the time for that message viewed.But when i am receive the second message the time of first message doesn't viewed(time of first message is empty).

这是因为现在只有当 actualDate 为 null 时才会设置日期。你可以很容易地解决这个问题。它可能看起来像这样

String actualDate = m.getDate();
if (actualDate == null) {
Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("h:mm a");
String strDate = sdf.format(c.getTime());
m.setDate(strDate);
}

//Time set here
date.setText(m.getDate());

关于java - 为什么收到新消息时,所有先前消息的时间戳都设置为与新消息相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32367903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com