因为之前的是写的主要代码,现在贴出全部代码,有些瑕疵,哈哈哈哈。那我现在开始贴代码吧
1.聊天实体类
(1)聊天实体类
ChatUser.java
package com.smxy.lj.chat;
import java.io.Serializable;
public class ChatUser implements Serializable {
private String cid;
private String msg;
public ChatUser() {
}
public ChatUser(String cid, String msg) {
this.cid = cid;
this.msg = msg;
}
public String getCid() {
return cid;
}
public void setCid(String cid) {
this.cid = cid;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
(2)聊天界面实体类
package com.smxy.lj.message;
public class Message {
public static final int TYPE_RECEIVED = 0;//消息类型-收到的消息
public static final int TYPE_SENT = 1;//消息类型-发出的消息
private String content; //消息内容
private int type;//消息类型
public Message(String content, int type) {
this.content = content;
this.type = type;
}
public String getContent() {
return content;
}
public int getType() {
return type;
}
}
(3)个推服务类
DemoIntentService.java
package com.smxy.lj.chat;
import android.content.Context;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.util.Log;
import com.igexin.sdk.GTIntentService;
import com.igexin.sdk.message.GTCmdMessage;
import com.igexin.sdk.message.GTNotificationMessage;
import com.igexin.sdk.message.GTTransmitMessage;
import com.smxy.lj.utils.MyLog;
import com.smxy.lj.utils.SharedPreferencesHelper;
/**
* 继承 GTIntentService 接收来自个推的消息, 所有消息在线程中回调, 如果注册了该服务, 则务必要在 AndroidManifest中声明, 否则无法接受消息<br>
* onReceiveMessageData 处理透传消息<br>
* onReceiveClientId 接收 cid <br>
* onReceiveOnlineState cid 离线上线通知 <br>
* onReceiveCommandResult 各种事件处理回执 <br>
*/
public class DemoIntentService extends GTIntentService {
SharedPreferencesHelper sharedPreferencesHelper ;
private OnProgressListener onProgressListener;
public void setOnProgressListener(OnProgressListener onProgressListener) {
this.onProgressListener = onProgressListener;
}
@Override
public void onReceiveServicePid(Context context, int i) {
}
@Override
public void onReceiveClientId(Context context, String clientid) {
Log.e(TAG, "onReceiveClientId -> " + "clientid = " + clientid);
sharedPreferencesHelper = new SharedPreferencesHelper(getApplicationContext(),"push_CID");
sharedPreferencesHelper.put("cid",clientid);
//MyLog.e("CID="+ sharedPreferencesHelper.getSharedPreference("cid",null));
}
//接收消息 ---透传
@Override
public void onReceiveMessageData(Context context, GTTransmitMessage gtTransmitMessage) {
Log.e(TAG, "onReceiveMessageData -> " + "message = " + new String(gtTransmitMessage.getPayload()));
if (onProgressListener!=null){
onProgressListener.onProgress(new String(gtTransmitMessage.getPayload()));
}
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return new MyGeTui();
}
public class MyGeTui extends Binder{
public DemoIntentService get(){
return DemoIntentService.this;
}
}
@Override
public void onReceiveOnlineState(Context context, boolean b) {
}
@Override
public void onReceiveCommandResult(Context context, GTCmdMessage gtCmdMessage) {
}
@Override
public void onNotificationMessageArrived(Context context, GTNotificationMessage gtNotificationMessage) {
}
@Override
public void onNotificationMessageClicked(Context context, GTNotificationMessage gtNotificationMessage) {
}
//回调,将接收的内容传到主界面
public interface OnProgressListener {
void onProgress(String progress);
}
}
2.首先是聊天界面
(1)写聊天界面的adapter
message_adapter.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="10dp">
<LinearLayout
android:id="@+id/left_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:background="@drawable/message_left">
<TextView
android:id="@+id/left_msg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="10dp" />
</LinearLayout>
<LinearLayout
android:id="@+id/right_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:background="@drawable/message_right">
<TextView
android:id="@+id/right_msg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="10dp" />
</LinearLayout>
</LinearLayout>
MsgAdapter.java
package com.smxy.lj.message;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.smxy.lj.officedemo.R;
import org.w3c.dom.Text;
import java.util.List;
public class MsgAdapter extends RecyclerView.Adapter<MsgAdapter.ViewHolder> {
private List<Message> mMsgList;
static class ViewHolder extends RecyclerView.ViewHolder {
LinearLayout leftLayout, rightLayout;
TextView leftMsg, rightMsg;
public ViewHolder(View view) {
super( view );
leftLayout = view.findViewById( R.id.left_layout );
rightLayout = view.findViewById( R.id.right_layout );
leftMsg = view.findViewById( R.id.left_msg );
rightMsg = view.findViewById( R.id.right_msg );
}
}
public MsgAdapter(List<Message> mMsgList) {//构造方法
this.mMsgList = mMsgList;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from( parent.getContext() ).inflate( R.layout.message_item, parent, false );
return new ViewHolder( view );
}
@Override
public void onBindViewHolder(MsgAdapter.ViewHolder holder, int position) {
Message msg = mMsgList.get( position );
switch (msg.getType()) {
//收到消息,显示左边布局,隐藏右边布局
case Message.TYPE_RECEIVED:
holder.leftLayout.setVisibility( View.VISIBLE );
holder.rightLayout.setVisibility( View.GONE );
holder.leftMsg.setText( msg.getContent() );
break;
//发送消息,显示右边布局,隐藏左边布局
case Message.TYPE_SENT:
holder.leftLayout.setVisibility( View.GONE );
holder.rightLayout.setVisibility( View.VISIBLE );
holder.rightMsg.setText( msg.getContent() );
break;
default:
break;
}
}
@Override
public int getItemCount() {
return mMsgList.size();
}
}
(2)聊天界面
memo_list.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.RecyclerView
android:id="@+id/msg_recycler_view"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
<LinearLayout
android:layout_width="match_parent"
android:orientation="horizontal"
android:layout_height="wrap_content">
<EditText
android:id="@+id/message_text"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:hint="Type Something Here"
/>
<Button
android:id="@+id/message_send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="发送" />
</LinearLayout>
</LinearLayout>
MessageFragment.java
package com.smxy.lj.myfragment;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.preference.PreferenceManager;
import android.support.annotation.Nullable;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import com.smxy.lj.adapter.MessageNoticeAdapter;
import com.smxy.lj.chat.ChatUser;
import com.smxy.lj.chat.DemoIntentService;
import com.smxy.lj.message.Message;
import com.smxy.lj.message.MsgAdapter;
import com.smxy.lj.officedemo.R;
import com.smxy.lj.okhttputil.HttpUtil;
import com.smxy.lj.pojo.MessageNotice;
import com.smxy.lj.utils.MyLog;
import com.smxy.lj.utils.ServletUrl;
import com.smxy.lj.utils.SharedPreferencesHelper;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;
public class MessageFragment extends BaseFragement {
ChatUser chatUser;
//public static String URL = "http://lj1757620885.6655.la:54746/office/pushMessage?cid=";
private SharedPreferencesHelper sharedPreferencesHelper;
private String CID,sendMesageContent;//好友的CID
private List<Message> msgList = new ArrayList<>();
@BindView(R.id.message_text) EditText inputText;
@BindView(R.id.msg_recycler_view) RecyclerView msgRecyclerView;
private MsgAdapter msgAdapter;
private DemoIntentService msgService;
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.memo_lists, null);
ButterKnife.bind(this,view);
Intent intent = new Intent(getActivity(), DemoIntentService.class);
getActivity().bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE);
initMsgs();
inputText = view.findViewById(R.id.message_text);
msgRecyclerView = view.findViewById(R.id.msg_recycler_view);
LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
msgRecyclerView.setLayoutManager(layoutManager);
msgAdapter = new MsgAdapter(msgList);
msgRecyclerView.setAdapter(msgAdapter);
return view;
}
private void initMsgs() {
//chatUser = new ChatUser();
sharedPreferencesHelper = new SharedPreferencesHelper(getContext(),"push_CID");
CID = (String) sharedPreferencesHelper.getSharedPreference("cid",null);
MyLog.e("CID==="+CID);
Message msg1 = new Message("物一群的邀请码是多少", Message.TYPE_RECEIVED);
msgList.add(msg1);
Message msg2 = new Message("0X897888V", Message.TYPE_SENT);
msgList.add(msg2);
Message msg3 = new Message("谢谢你", Message.TYPE_RECEIVED);
msgList.add(msg3);
}
@OnClick(R.id.message_send)
public void sedMessage(){
sendMesageContent = inputText.getText().toString();
chatUser = new ChatUser();
chatUser.setCid("fb61f569efd33cf3eb536eb945537acb");
chatUser.setMsg(sendMesageContent);
if (!"".equals(sendMesageContent)) {
Message msg = new Message(sendMesageContent, Message.TYPE_SENT);
msgList.add(msg);
//当有新消息时,调用适配器notifyItemInserted通知列表有新的数据插入,刷新RecyclerView
msgAdapter.notifyItemInserted(msgList.size() - 1);
//将RecyclerView定位到最后一行,保证可以看到最新消息
msgRecyclerView.scrollToPosition(msgList.size() - 1);
inputText.setText("");
Gson gson = new Gson();
String json = gson.toJson(chatUser);
HttpUtil.getCall("/pushMessage",json).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
}
});
}
}
ServiceConnection mServiceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
msgService = ((DemoIntentService.MyGeTui) iBinder).get();
msgService.setOnProgressListener(new DemoIntentService.OnProgressListener() {
@Override
public void onProgress(String progress) {
// mProgressBar.setProgress(progress);
android.os.Message message = android.os.Message.obtain();
message.obj = progress;
mHandler.sendMessage(message);
}
});
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
}
};
private Handler mHandler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(android.os.Message message) {
Message msg = new Message((String) message.obj, Message.TYPE_RECEIVED);
msgList.add(msg);
//当有新消息时,调用适配器notifyItemInserted通知列表有新的数据插入,刷新RecyclerView
msgAdapter.notifyItemInserted(msgList.size() - 1);
//将RecyclerView定位到最后一行,保证可以看到最新消息
msgRecyclerView.scrollToPosition(msgList.size() - 1);
return true;
}
});
}
【聊天界面的图片使用的是【.9.png】图片】