私聊95%......

master
Toyga 4 years ago
parent 82dac4a9e9
commit 3cac430951

@ -31,7 +31,7 @@ public class BaseActivity extends AppCompatActivity {
public static Owner owner;
//服务器链接
public static String SERVER_IP = "192.168.43.206";
public static String SERVER_IP = "10.30.17.104";
// static {
// try {
@ -42,7 +42,7 @@ public class BaseActivity extends AppCompatActivity {
// }
public static final String SERVER_PORT="8080";
public static final String SERVER_URL="http://"+SERVER_IP+":"+SERVER_PORT+"/LeudaemiaLikeMe/main-servlet";
public static final String SERVER_URL="http://"+SERVER_IP+":"+SERVER_PORT+"/LeudaemiaLikeMe";
public static String WS_URL="";
//WS心跳检测10秒一次
public static final long HEART_BEAT_RATE = 10 * 1000;
@ -115,14 +115,15 @@ public class BaseActivity extends AppCompatActivity {
//初始化WS
public void initWebSocket(int ownerNetId){
WS_URL="ws://"+SERVER_IP+":"+SERVER_PORT+"/chatWS/"+ownerNetId;
WS_URL="ws://"+SERVER_IP+":"+SERVER_PORT+"/LeudaemiaLikeMe/chatWS/"+ownerNetId;
// System.out.println(WS_URL);
URI uri=URI.create(WS_URL);
wsClient= new WebSocketClient(uri);
isNeedReconnect=true;
mHandler.postDelayed(heartBeatRunnable, HEART_BEAT_RATE);
try {
Log.d("ws测试","准备连接");
wsClient.connectBlocking();
Log.d("ws:","连接成功");
} catch (InterruptedException e) {
e.printStackTrace();
}

@ -2,6 +2,7 @@ package com.example.leudaemialikeme.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.inputmethod.EditorInfo;
@ -20,9 +21,13 @@ import com.example.leudaemialikeme.Model.Friend;
import com.example.leudaemialikeme.Model.Message;
import com.example.leudaemialikeme.Model.MessageItemView;
import com.example.leudaemialikeme.R;
import com.example.leudaemialikeme.Utils.TimeUtil;
import com.google.gson.Gson;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class ChatActivity extends BaseActivity {
private MessageDao messageDao = new MessageDao();
@ -85,9 +90,15 @@ public class ChatActivity extends BaseActivity {
String content=edit_content.getText().toString();
if (!content.equals("")){
Message message =new Message(owner.getNetId(),currentFriend.getNetId(),content);
Map<String, String> jsonMap = new HashMap<String, String>();
jsonMap.put("senderNetId", String.valueOf(owner.getNetId()));
jsonMap.put("receiverNetId", String.valueOf(currentFriend.getNetId()));
jsonMap.put("messageType","1");
jsonMap.put("content", content);
jsonMap.put("createTime", TimeUtil.timeToString(new Timestamp(message.getCreateTime())));
addMsg(message,1);
edit_content.setText("");
wsClient.send(gson.toJson(message));
wsClient.send(gson.toJson(jsonMap));
}
}
});
@ -103,7 +114,9 @@ public class ChatActivity extends BaseActivity {
//从intent中取出currentNetId并查出对象
Intent intent = getIntent();
friendNetId = intent.getIntExtra("friendNetId", -1);
Log.d("ChatActivity","当前聊天对象ID"+friendNetId);
currentFriend = friendDao.findByNetId(friendNetId, owner.getNetId());
Log.d("ChatActivity","当前聊天对象:"+currentFriend);
//从数据库中查找聊天记录-默认最近20条记录
messageList = messageDao.findNearlyMessage(friendNetId, owner.getNetId());
//组装成MessageItemViw
@ -117,5 +130,6 @@ public class ChatActivity extends BaseActivity {
msg_recycler_view.scrollToPosition(messageList.size() - 1);
message.setFlag(isRead);
message.save();
}
}

@ -3,13 +3,16 @@ package com.example.leudaemialikeme.Activity;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.example.leudaemialikeme.Dao.FriendDao;
import com.example.leudaemialikeme.Dao.MessageDao;
import com.example.leudaemialikeme.Dao.OwnerDao;
import com.example.leudaemialikeme.Model.Friend;
import com.example.leudaemialikeme.Model.Message;
import com.example.leudaemialikeme.Model.Owner;
import com.example.leudaemialikeme.Model.User;
@ -64,7 +67,7 @@ public class LoginActivity extends BaseActivity {
@Override
public void run() {
try{
String url = LoginActivity.SERVER_URL+"?action=login";
String url = LoginActivity.SERVER_URL+"/main-servlet?action=login";
String jsonStr= OkHttpUtil.synPost(url, paramMap);
loginResponse(jsonStr,(String) paramMap.get("username"));
}catch (Exception e){
@ -84,7 +87,9 @@ public class LoginActivity extends BaseActivity {
owner = dbOwner;
// ownerInfoSaveToPref(); //记住密码方法
// 初始化WS链接
// System.out.println(owner);
initWebSocket(owner.getNetId());
Log.d("记录","开始获取未读信息");
getUnReadMsg();
}else{
//如果本地为空则说明是首次登录,则需要发送请求获取用户的个人信息及朋友列表数据存入本地数据库中,再进行存储
@ -103,7 +108,8 @@ public class LoginActivity extends BaseActivity {
@Override
public void run() {
try {
String url = LoginActivity.SERVER_URL + "?action=firstLogin&username="+username;
Log.d("用户名",username);
String url = LoginActivity.SERVER_URL + "/main-servlet?action=firstLogin&username="+username;
String jsonStr= OkHttpUtil.synGet(url);
firstLoginResponse(jsonStr);
}catch (Exception e){
@ -134,6 +140,7 @@ public class LoginActivity extends BaseActivity {
newOwner.setNetId(user.getIduser());
// newOwner.setName(netUser.getString("name"));
// newOwner.setImageURL(SERVER_URL+netUser.getString("imagePath"));
ownerDao.insert(newOwner); //插入本地数据库
//
// if (netFriends!=null && netFriends.size()>0){
@ -165,8 +172,9 @@ public class LoginActivity extends BaseActivity {
@Override
public void run() {
try {
String url = LoginActivity.SERVER_URL + "?action=getUnReadMsg&username="+username;
String url = LoginActivity.SERVER_URL + "/main-servlet?action=getUnReadMsg&username="+username;
String jsonStr= OkHttpUtil.synGet(url);
Log.d("记录","未读信息获取响应");
getUnReadMsgResponse(jsonStr);
}catch (Exception e){
e.printStackTrace();
@ -187,21 +195,56 @@ public class LoginActivity extends BaseActivity {
//进行本地消息存储
List<Message> msgList = gson.fromJson(jsonMap.get("msgList"), new TypeToken <List<Message>>() {}.getType());
for (int i=0;i<msgList.size();i++){
Message unReadMsg = (Message) msgList.get(i);
String content=unReadMsg.getContent();
int messageType=unReadMsg.getMessageType();
int receiverId= unReadMsg.getReceiverNetId();
int senderId= unReadMsg.getSenderNetId();
Message unReadMsg = msgList.get(i);
// System.out.println(unReadMsg.getSenderNetId());//////////////////////////////
String content = unReadMsg.getContent();
int messageType = unReadMsg.getMessageType();
int receiverId = unReadMsg.getReceiverNetId();
int senderId = unReadMsg.getSenderNetId();
Long createTime = unReadMsg.getCreateTime();
Message newMessage=new Message(senderId,receiverId,messageType,content,createTime);
messageDao.insert(newMessage);
getNewFriendRequest(senderId);
Log.d("记录","sender:"+senderId+" receiver:"+receiverId);
}
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
// getNewFriends(owner.getUsername());
}
});
}
private void getNewFriendRequest(int senderId) {
new Thread(new Runnable() {
@Override
public void run() {
try {
String url = LoginActivity.SERVER_URL + "/main-servlet?action=getNewFriend&senderId="+senderId;
String jsonStr= OkHttpUtil.synGet(url);
getNewFriendResponse(jsonStr, senderId);
}catch (Exception e){
e.printStackTrace();
}
}
}).start();
}
private void getNewFriendResponse(String jsonStr, int senderId) {
runOnUiThread(new Runnable() {
private MessageDao messageDao=new MessageDao();
@Override
public void run() {
Gson gson = new Gson();
Map<String, String> jsonMap= gson.fromJson(jsonStr, new TypeToken <Map<String, String>>() {}.getType());
final String message = jsonMap.get("message");
if (message.equals("success")){
//进行本地消息存储
String username = jsonMap.get("username");
FriendDao friendDao = new FriendDao();
if(friendDao.findByNetId(senderId, owner.getNetId())==null){
Friend friend = new Friend(senderId, username, owner.getNetId());
friendDao.insert(friend);
}
}
}
});
}

@ -35,6 +35,8 @@ public class ChatAdapter extends RecyclerView.Adapter<ChatAdapter.ViewHolder> {
msg_content_right = (LinearLayout) view.findViewById(R.id.msg_content_right);
left_msg = (TextView) view.findViewById(R.id.left_msg);
right_msg = (TextView) view.findViewById(R.id.right_msg);
layouts.add(msg_content_left);
layouts.add(msg_content_right);
}
public void setVisibility(LinearLayout layout){

@ -1,6 +1,7 @@
package com.example.leudaemialikeme.Adapter;
import android.content.Intent;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -68,6 +69,7 @@ public class MsgAdapter extends RecyclerView.Adapter<MsgAdapter.ViewHolder> {
holder.introduction.setText(String.valueOf(chat.getLastMessage()));
holder.nickname.setText(chat.getFriendName());
holder.chat_friend_id.setText(String.valueOf(chat.getFriendId()));
Log.d("MsgAdapter","chat_friend_id:"+chat.getFriendId());
if(chat.getFlag()==1){
holder.point.setVisibility(View.GONE);
}
@ -76,7 +78,7 @@ public class MsgAdapter extends RecyclerView.Adapter<MsgAdapter.ViewHolder> {
public void onClick(View v) {
messageDao.changeMsgStatus(Integer.parseInt(holder.chat_friend_id.getText().toString()), BaseActivity.owner.getNetId());
Intent intent = new Intent(v.getContext(), ChatActivity.class);
intent.putExtra("friendNetId",holder.chat_friend_id.getText().toString());
intent.putExtra("friendNetId",chat.getFriendId());
v.getContext().startActivity(intent);
// checkFriendRequest(params);
}

@ -2,6 +2,7 @@ package com.example.leudaemialikeme.Dao;
import android.database.Cursor;
import android.util.Log;
import com.example.leudaemialikeme.Model.Message;
import com.example.leudaemialikeme.Utils.DBUtil;
@ -39,6 +40,7 @@ public class MessageDao extends BaseDao {
ArrayList<Message> messages=DBUtil.cursorToList(cursor,Message.class);
if (messages.size()==0){
Log.d("MessageDao","findUnReadMessage无未读消息");
return null;
}else {
return messages;

@ -1,6 +1,7 @@
package com.example.leudaemialikeme.Fragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -58,6 +59,7 @@ public class MessageChannelFragment extends Fragment {
System.out.println("oncreateview:"+recyclerView);
LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
Log.d("记录","调用方法获取消息列表");
getMsgList();
MsgAdapter msgAdapter = new MsgAdapter(chatList);
recyclerView.setAdapter(msgAdapter);
@ -79,6 +81,7 @@ public class MessageChannelFragment extends Fragment {
private void getMsgList(){
ChatService chatService = new ChatService();
chatList = chatService.findChatList(BaseActivity.owner.getNetId());
Log.d("chatlist:", String.valueOf(chatList.size()));
}
// @Override
// public void onResume() {

@ -15,13 +15,13 @@ public class Friend extends LitePalSupport {
public Friend(int netId, String username){
this.netId = netId;
this.username = username;
this.isChat=false;
this.isChat=true;
}
public Friend(int netId, String username, int ownerNetId){
this.netId = netId; //聊天人的ID
this.username = username; //聊天人的用户名
this.ownerNetId = ownerNetId; //本机用户的ID
this.isChat=false;
this.isChat=true;
}
public int getId() {

@ -6,7 +6,7 @@ import java.text.SimpleDateFormat;
import java.util.Date;
public class TimeUtil {
public static String pattern="yyyy-MM-dd HH:mm";
public static String pattern="yyyy-MM-dd HH:mm:ss";
public static String timeToString(Timestamp timestamp){
SimpleDateFormat format = new SimpleDateFormat(pattern);

@ -1,5 +1,7 @@
package com.example.leudaemialikeme.service;
import android.util.Log;
import com.example.leudaemialikeme.Dao.FriendDao;
import com.example.leudaemialikeme.Dao.MessageDao;
import com.example.leudaemialikeme.Model.Chat;
@ -7,8 +9,8 @@ import com.example.leudaemialikeme.Model.Friend;
import com.example.leudaemialikeme.Model.Message;
import com.example.leudaemialikeme.Utils.TimeUtil;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
public class ChatService {
private FriendDao friendDao;
@ -22,32 +24,34 @@ public class ChatService {
//接收消息后进行发送者的判断,如果该消息不是本地同步的好友发送的,则先将消息保存,然后发送好友同步请求,然后再进行聊天列表的展示
//这里需要先进行未读消息的朋友判断改变isChat状态然后再进行展示
public ArrayList<Chat> findChatList(int ownerNetId){
ArrayList<Friend> isChatFriends=friendDao.findChatFriendList(ownerNetId);
ArrayList<Message> unReadMsgs=messageDao.findUnReadMessage(ownerNetId);
if (unReadMsgs!=null){
for (Message message:unReadMsgs){
Friend friend=friendDao.findByNetId(message.getSenderNetId(),ownerNetId);
if (friend!=null && friend.getChat()==false){
friend.setChat(true);
friend.update(friend.getId());
isChatFriends.add(friend);
}
}
}
Log.d("记录","开始获取消息列表");
ArrayList<Friend> isChatFriends = friendDao.findChatFriendList(ownerNetId);
// ArrayList<Message> unReadMsgs = messageDao.findUnReadMessage(ownerNetId);
// if (unReadMsgs!=null){
// for (Message message:unReadMsgs){
// Friend friend=friendDao.findByNetId(message.getSenderNetId(),ownerNetId);
// Log.d("chatService","findchatlist friend:"+friend);
// if (friend!=null && friend.getChat()==false){
// friend.setChat(true);
// friend.update(friend.getId());
// isChatFriends.add(friend);
// Log.d("记录","插入新的聊天对象");
// }
// }
// }
Log.d("chatservice","ischatfriends:"+isChatFriends.size());
ArrayList<Chat> chats = new ArrayList<>();
// if (isChatFriends.size()==0){
// return null;
// }
for (Friend friend : isChatFriends){
Message message = messageDao.findLastMessage(friend.getNetId(),ownerNetId);
Log.d("chatservice","lastmessage:"+message);
Chat chat;
if (message == null){
chat = new Chat(friend.getNetId(),friend.getUsername(),"",1,"" );
}else{
String time= TimeUtil.dateToString(new Date(message.getCreateTime()));
String time= TimeUtil.timeToString(new Timestamp(message.getCreateTime()));
/****/
String lastMessage="";
if (message.getMessageType()==1){

@ -49,8 +49,8 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:hint="type here"
android:maxLength="3"/>
android:maxLines="2"
android:hint="type here" />
<Button
android:id="@+id/bt_send_msg"

Loading…
Cancel
Save