返回,微信聊天信息恢复。

环信支持 APP 把聊天记录通过 REST 接口导出。
聊天记录数据结构
&type&: &chatmessage&,
&from&: &zw123&, //发送人username
&msg_id&: &5I02W-16-8278a&, //消息ID
&chat_type&: &chat&, //用来判断单聊还是群聊。chat: 单聊;groupchat: 群聊
&payload&: {
&bodies&: [ //消息bodies
&msg&: &hhhhhh&, //消息内容
&type&: &txt& //消息类型。txt: 文本消息;img: 图片;loc: 位置;audio: 语音
&length&: 3, //语音时长,单位为秒,这个属性只有语音消息有
&url&: &&, //图片语音等文件的网络URL,图片和语音消息有这个属性
&filename&: &22.png&, //文件名字,图片和语音消息有这个属性
&secret&: &pCY80PdfEeO4Jh9URCOfMQWU9QYsJytynu4n-yhtvAhmt1g9&, //获取文件的secret,图片和语音消息有这个属性
&lat&: 39.983805, //发送的位置的纬度,只有位置消息有这个属性
&lng&: 116.307417, //位置经度,只有位置消息有这个属性
&addr&: &北京市海淀区北四环西路66号& //位置消息详细地址,只有位置消息有这个属性
&ext&: { //自定义扩展属性
&key1&: &value1&,
//你设置的key和value的值
&timestamp&: 1, //消息发送时间
&to&: &7& //接收人的username或者接收group的ID
文本类型消息
&from&:&test2&,
&to&:&test1&,
&bodies&:[{
&type&:&txt&//文本消息类型
,&msg&:&hello from test2&//消息内容
图片类型消息
&from&:&test1&,
&to&:&test2&,
&bodies&:[{
&type&:&img&,//图片消息类型
&url&:&/easemob-demo/chatdemoui/chatfiles/65e54a4a-fd0b-11e3-b821-ebde7b50cc4b&,//上传图片消息地址,在上传图片成功后会返回UUID
&filename&:&test1.jpg&,//图片名称
&thumb&:&/easemob-demo/chatdemoui/chatfiles/496334fa-f53f-11e3-9eb7-4fbb06ff7876&,//上传缩略图地址
&secret&:&DRGM8OZrEeO1vafuJSo2IjHBeKlIhDp0GCnFu54xOF3M6KLr&,//secret在上传图片后会返回,只有含有secret才能够下载此图片
&thumb_secret&:&DRGM8OZrEeO1vafuJSo2IjHBeKlIhDp0GCnFu54xOF3M6KLr&//thumb_secret在上传缩略图后会返回
语音类型消息
&from&:&test2&,
&to&:&test1&,
&bodies&:[{
&type&:&audio&,//语音消息类型
&url&:&/easemob-demo/chatdemoui/chatfiles/0637e55a-f606-11e3-ba23-51f25fd1215b&,//上传语音远程地址,在上传语音后会返回UUID
&filename&:&test1.amr&,//语音名称
&length&:10, //语音时间(单位:秒)
&secret&:&DRGM8OZrEeO1vafuJSo2IjHBeKlIhDp0GCnFu54xOF3M6KLr&//secret在上传文件后会返回
地址位置类型消息
&from&:&test1&,
&to&:&test2&,
&bodies&:[{
&type&:&loc&,//位置消息类型
&addr&:&西城区西便门桥 &,//要发送的地址
&lat&:39.9053,//纬度
&lng&:116.36302//经度
视频类型消息
&from&:&test1&,
&to&:&test2&,
&bodies&:[{
&type&: &video&,//视频消息类型
&filename&: &3.mp4&,//视频文件名称
&thumb&: &/easemob-demo/chatdemoui/chatfiles/f69-11e4-8eee-21d&,//上传视频缩略图远程地址,在上传视频缩略图后会返回UUID
&length&: 10,//视频播放长度
&secret&: &VfEpSmSvEeS7yU8dwa9rAQc-DIL2HhmpujTNfSTsrDt6eNb_&,//secret在上传文件后会返回
&file_length&: 58103,
&thumb_secret&: &ZyebKn9pEeSSfY03ROk7ND24zUf74s7HpPN1oMV-1JxN2O2I&,//secret在上传缩略图后会返回
&url&: &/easemob-demo/chatdemoui/chatfiles/671dfe30-7f69-11e4-ba67-8fef0d502f46&//上传视频远程地址,在上传视频后会返回UUID
导出聊天记录
以下所有 API 均需要企业管理员或 APP 管理员权限才能访问。
获取聊天记录
接口限流说明:同一个 IP 每分钟最多可调用10次,超过的部分会返回429或503错误。所以在调用程序中,如果碰到了这样的错误,需要稍微暂停一下并且重试。如果该限流控制不满足需求,请联系商务经理开放更高的权限。(一次最多返回1000条)
Path: /{org_name}/{app_name}/chatmessages
HTTP Method: GET
URL Params: 无
Request Headers: {“Content-Type”:”application/json”,”Authorization”:”Bearer ${token}”}
Response Body: 聊天记录(JSON),默认返回10条记录
可能的错误码:401(未授权[无token、token错误、token过期])、5xx。详见:
count : 10, //返回的数量
cursor : &asdsdfaee& //游标,用于分页查询
entities : [
聊天记录entity
在URL后面加上参数 ql=select * where timestamp&6 或者 ql=select * where timestamp&6,同上”=”后的参数需要转义。
如只取最近的消息可以只用 timestamp&0,然后记录获取到的最后一条消息的 timestamp,作为下次获取时使用的 timestamp,按此方法往下查询。
需要导出聊天记录的,可以结合 cursor 分页来查询出所需要的聊天记录。聊天记录查询接口返回数据已经按照 timestamp 字段做了升序排序。
不能使用 and、or 等操作符来组成这种查询 ql=select * where timestamp&6 and timestamp&0。
curl 示例:
curl -X GET -i -H &Authorization: Bearer YWMtxc6K0L1aEeKf9LWFzT9xEAAAAT7MNR_9OcNq-GwPsKwj_TruuxZfFSC2eIQ& &/easemob-demo/chatdemoui/chatmessages?ql=select+*+where+timestamp&6&
示例2:分页获取数据
使用 limit 参数获取数据完毕后,如果后边还有数据,会返回一个不为空的 cursor 回来,使用这个 cursor 就能进行分页获取了。
分页示例:根据之前获取数据返回的 cursor 继续获取后面的20条数据。在 URL 后面加上参数 cursor,ql语句保持不变。
(一分钟最多调用10次,每次 limit 最大值为1000)
curl -X GET -i -H &Authorization: Bearer YWMtxc6K0L1aEeKf9LWFzT9xEAAAAT7MNR_9OcNq-GwPsKwj_TruuxZfFSC2eIQ& &/easemob-demo/chatdemoui/chatmessages?ql=select+*+where+timestamp&6&limit=20&cursor=MTYxOTcyOTYyNDpnR2tBQVFNQWdHa0FCZ0ZHczBKN0F3Q0FkUUFRYUdpdkt2ZU1FZU9vNU4zVllyT2pqUUNBZFFBUWFHaXZJUGVNRWVPMjdMRWo5b0w4dEFB&聊天界面的打造(二)——发送消息后ListView左右布局显示 - 移动开发当前位置:& &&&聊天界面的打造(二)——发送消息后ListView左右布聊天界面的打造(二)——发送消息后ListView左右布局显示&&网友分享于:&&浏览:0次聊天界面的制作(二)——发送消息后ListView左右布局显示基本功能
1. 自定义标题栏。(标题栏不做任何功能)
2. 有左右发送按钮。(这个只能自己和自己聊天哦,所以有左右发送按钮)
  (1)点击左边按钮发送按钮,在ListView的左侧显示。
  (2)点击右边按钮发送按钮,在ListView的右侧显示。
3.有表情发送按钮。
  (1)当点击表情发送按钮时, 弹出表情框,点击想要发送的表情将其添加输入框中。
  (2)当在此点击表情按钮时,表情框收回。
  (3)当表情框处在显示状态时, 点击输入框时,表情框收回。
聊天界面的制作(一)——基本布局的实现
聊天界面的制作(三)——表情列表发送功能
源码下载链接
左右发送显示功能
1. 定义一个点击左边发送按钮时,显示在左边的消息布局。
2. 定义一个点击右边发送按钮时,显示在左边的消息布局。
3. 数据M:定义消息的类ChatMessage。
public class ChatMessage {
private int imageViewP
private long textViewT
private String textViewH
private String textviewN
private String textViewI
private int
public ChatMessage() {
public ChatMessage(int imageViewPerson, long textViewTime, String textViewHonour, String textviewName, String textViewInput) {
this.imageViewPerson = imageViewP
this.textViewTime = textViewT
this.textViewHonour = textViewH
this.textviewName = textviewN
this.textViewInput = textViewI
public int getType() {
public void setType(int type) {
this.type =
public int getImageViewPerson() {
return imageViewP
public void setImageViewPerson(int imageViewPerson) {
this.imageViewPerson = imageViewP
public long getTextViewTime() {
return textViewT
public void setTextViewTime(long textViewTime) {
this.textViewTime = textViewT
public String getTextViewHonour() {
return textViewH
public void setTextViewHonour(String textViewHonour) {
this.textViewHonour = textViewH
public String getTextviewName() {
return textviewN
public void setTextviewName(String textviewName) {
this.textviewName = textviewN
public String getTextViewInput() {
return textViewI
public void setTextViewInput(String textViewInput) {
this.textViewInput = textViewI
4. 视图V: 定义一个MessageAdapter.
首先定义左右显示的两个布局,左边信息布局:
xmlns:android="/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"&
android:id="@+id/textview_time"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_margin="5dp"/&
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"&
android:id="@+id/imageview_person"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@mipmap/person"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp"/&
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"&
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"&
android:id="@+id/textview_honor"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="管理员"
android:textSize="15sp"
android:textColor="@color/white"
android:background="@drawable/textview_honour_background"/&
android:id="@+id/textview_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="名称" /&
android:id="@+id/textview_input"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:layout_marginRight="50dp"
android:text="这是显示的信息"
android:background="@mipmap/textview_input_left"/&
右边信息布局:
xmlns:android="/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"&
android:id="@+id/textview_time"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:gravity="center" /&
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="right"
android:orientation="horizontal"&
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="right"
android:orientation="vertical"&
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"&
android:id="@+id/textview_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:text="名称" /&
android:id="@+id/textview_honor"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/textview_honour_background"
android:text="管理员"
android:textColor="@color/white"
android:textSize="15sp" /&
android:id="@+id/textview_input"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="50dp"
android:layout_marginTop="5dp"
android:background="@mipmap/textview_input_right"
android:text="这是显示的信息这是显示的信息这是显示的信息这是显示的信息这是显示的信息这是显示的信息这是显示的信息"
android:textColor="@color/white" /&
android:id="@+id/imageview_person"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:src="@mipmap/person" /&
定义Adapter适配器,将数据适配到布局中:
public class MessageAdapter extends BaseAdapter {
public final static int SEND_LEFT = 0;
public final static int SEND_RIGHT = 1;
private LayoutInflater mI
private List&ChatMessage& mD
private Html.ImageGetter mImageG
private SimpleDateF
public int getViewTypeCount() {
public int getItemViewType(int position) {
if (0 == mData.get(position).getType()) {
return SEND_LEFT;
} else if (1 == mData.get(position).getType()) {
return SEND_RIGHT;
public MessageAdapter(LayoutInflater mInflater, List&ChatMessage& mData, Html.ImageGetter mImageGetter) {
this.mInflater = mI
this.mData = mD
this.mImageGetter = mImageG
public int getCount() {
return mData.size();
public Object getItem(int position) {
public long getItemId(int position) {
public View getView(int position, View convertView, ViewGroup viewGroup) {
ViewHolder viewHolder = null;
if (convertView == null) {
viewHolder = new ViewHolder();
switch (getItemViewType(position)) {
case SEND_LEFT:
convertView = mInflater.inflate(R.layout.listview_lyaout_left, null);
case SEND_RIGHT:
convertView = mInflater.inflate(R.layout.listview_layout_right, null);
viewHolder.imageViewPerson = (ImageView) convertView.findViewById(R.id.imageview_person);
viewHolder.textViewTime = (TextView) convertView.findViewById(R.id.textview_time);
viewHolder.textViewHonour = (TextView) convertView.findViewById(R.id.textview_honor);
viewHolder.textViewName = (TextView) convertView.findViewById(R.id.textview_name);
viewHolder.textViewInput = (TextView) convertView.findViewById(R.id.textview_input);
convertView.setTag(viewHolder);
viewHolder = (ViewHolder) convertView.getTag();
ChatMessage data = mData.get(position);
if (position != 0) {
ChatMessage dataBefore = mData.get(position - 1);
long dateDifference = data.getTextViewTime() - dataBefore.getTextViewTime();
if (dateDifference & 60000) {
viewHolder.textViewTime.setVisibility(View.GONE);
format = new SimpleDateFormat("EEE HH:mm:ss");
String time = format.format(new Date(data.getTextViewTime()));
viewHolder.textViewTime.setText(time);
format = new SimpleDateFormat("EEE HH:mm:ss");
String time = format.format(new Date(data.getTextViewTime()));
viewHolder.textViewTime.setText(time);
viewHolder.imageViewPerson.setImageResource(data.getImageViewPerson());
viewHolder.textViewHonour.setText(data.getTextViewHonour());
viewHolder.textViewName.setText(data.getTextviewName());
Spanned spanned = Html.fromHtml(data.getTextViewInput(), mImageGetter, null);
viewHolder.textViewInput.setText(spanned);
return convertV
class ViewHolder {
ImageView imageViewP
TextView textViewH
TextView textViewN
TextView textViewT
TextView textViewI
这里用到了一个知识点,重写BaseAdapter中的两个方法:
  有时候ListView中每个Item的布局不同,这时需要用到Adapter中的两个方法:
public int getViewTypeCount():返回不同布局类型的数量。
public int getItemViewType(int position) :返回当前布局类型。
  因为消息类型的不同,以至于显示的Item布局不同,因此需要在ChatMessage中定义一个int 类型的type,通过type来判断显示的消息类型,从而加载不同的布局。
在MAinActivity中创建两个方法,初始化ChatMessage数据, 创建自定义Adapter的对象,然后setAdapter()。监听两个不同的发送按钮,分别调用下面两个方法。
(有些数据定义的是全局变量,在此说明下。)
private void showListViewRight() {
ChatMessage dataRight = new ChatMessage();
dataRight.setTextViewTime(System.currentTimeMillis());
dataRight.setTextViewHonour("营长");
dataRight.setTextviewName("虫虫");
if (mEditTextInput.getText().equals("")) {
Toast.makeText(getApplicationContext(), "发送的消息不能为空!", Toast.LENGTH_SHORT).show();
dataRight.setTextViewInput(mEditTextInput.getText());
dataRight.setType(MessageAdapter.SEND_RIGHT);
mMessageAdapter.notifyDataSetChanged();
mData.add(dataRight);
mListView.setAdapter(mMessageAdapter);
mListView.setSelection(mData.size() - 1);
mEditTextInput.setText("");
private void showListViewLeft() {
ChatMessage dataLeft = new ChatMessage();
dataLeft.setTextViewTime(System.currentTimeMillis());
dataLeft.setTextViewHonour("营长");
dataLeft.setTextviewName("虫虫");
if (mEditTextInput.getText().equals("")) {
Toast.makeText(getApplicationContext(), "发送的消息不能为空!", Toast.LENGTH_SHORT).show();
dataLeft.setTextViewInput(HmEditTextInput.getText());
dataLeft.setType(MessageAdapter.SEND_LEFT);
mMessageAdapter.notifyDataSetChanged();
mData.add(dataLeft);
mListView.setAdapter(mMessageAdapter);
mListView.setSelection(mData.size() - 1);
mEditTextInput.setText("");
版权声明:本文为博主原创文章,欢迎转载,转载请在文章显眼处说明文章出处并给出连接。
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 1234567891011 Copyright & &&版权所有欢迎光临珍爱婚恋!
24岁/164CM
26岁/162CM
25岁/163CM
当前位置: >
和女生聊天秒回信息好吗
发布时间: & 作者:本站编辑 & 来源: 本站整理 & 浏览次数:
摘要: 追求女孩子时,秒回信息到底好不好?各位朋友和异性聊天的时候,经常会发现自己刚刚发过去的信息,对方嗖的一下就回复回来了,...
追求女孩子时,秒回信息到底好不好?各位朋友和异性聊天的时候,经常会发现自己刚刚发过去的信息,对方嗖的一下就回复回来了,这就是我们所说的&秒读秒回&。
秒读秒回是一种表面现象,它可能出现在双方很聊得来的情况下,也可能出现在单方面很热情的情况下。
要避免的应该是单方面的热情,如果双方明明就聊得来,其中一方却因为相信某些所谓的秘籍的条条框框而克制自己的热情,其实真的没有必要。
这当然是很明显的道理,不过问题是,怎么知道对方跟你聊不聊得来呢?
当双方都对彼此很不熟悉的时候,确实是很难知道能不能聊得来,至多就是有感觉是不是能聊。
在这个阶段我个人觉得多释放一点善意没有什么关系,我自己对于聊得来的朋友都是很好聊的(还不一定有兴趣)。
我身边有一个女性朋友,她有一次碰到一个对象,条件满不错的,长的又高又帅就不提,重点是她感觉男生关心的东西跟自己有点像,女生就很想跟他好好聊聊。
对方也很奇怪,至少让女生是想不透,男生看起来对女孩还满有兴趣的(见面的时候),但是回家用网络就是很难聊,每次发过去的信息常常都要半小时才会有回复,对于急性子的女孩来说真的很受不了,后来有一次,女孩真心有点生气,觉得还是算了,聊不起来感觉真的很痛苦。
聊不起来当然可能有很多原因,不过重点是我的这个女孩朋友没办法接受这种相处方式,不管男生是对她兴趣不够,或者想对女孩玩弄手段,还是本性如此,女生都是觉得彼此就是频率不对,节奏不搭,最后想想还是就算了。
很多所谓的高手建议不要秒读秒回的原因是:秒读秒回很容易让人感觉你廉价,坦白说这个那是因为你的个人形象没有建立好。而如果是女生认定的优质男人对女生秒读秒回,这就绝对会让女孩子春心大动。
但还是要注意,通常女生认为是优质男人的,通常在事业上也有一定成就,所以你的秒读秒回如果是不论任何时候,二十四小时全年无休的那种,就真的不要比较好。
另外还有一个原因,人对于抓不住的东西会特别想要去追,就像跟猫玩一样,东西一直在身边很不稀奇,一直在远方提不起劲去追,所以逗猫棒要拿的忽远忽近比较好玩,这是一种人性,玩弄的好确实有它的效果。
但也是要看人使用,对一些经验比较够的女生来说,会觉得你装神弄鬼,对于要求交流深度比较深的女生来说,会觉得跟你始终就不够熟悉,转而考虑其他跟她连结度更高的男生。
所以说,其实王道还是从根本建立自己的自信心,有空你就秒读秒回,没空你就不读不回也无妨。
人必自重而后人重之,以自己为重,做自己觉得开心的选择,必然能得到对方的尊重,然后你就不需要每个小细节都在焦虑跟纠结,因为那些其实都不重要。
24岁/164CM
26岁/162CM
25岁/163CM
29岁/174CM
28岁/178CM
27岁/176CM
客服热线:(周一至周日:9:00-21:00)
Powered by
All Rights Reserved

我要回帖

更多关于 陌陌聊天界面如何返回 的文章

 

随机推荐