diff --git a/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Activity/BaseActivity.java b/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Activity/BaseActivity.java index 8d66ad5..64b4c9f 100644 --- a/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Activity/BaseActivity.java +++ b/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Activity/BaseActivity.java @@ -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(); } diff --git a/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Activity/ChatActivity.java b/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Activity/ChatActivity.java index 0212b3d..c85f4de 100644 --- a/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Activity/ChatActivity.java +++ b/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Activity/ChatActivity.java @@ -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 jsonMap = new HashMap(); + 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(); + } } \ No newline at end of file diff --git a/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Activity/LoginActivity.java b/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Activity/LoginActivity.java index 0f4e08b..d684175 100644 --- a/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Activity/LoginActivity.java +++ b/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Activity/LoginActivity.java @@ -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 msgList = gson.fromJson(jsonMap.get("msgList"), new TypeToken >() {}.getType()); for (int i=0;i jsonMap= gson.fromJson(jsonStr, new TypeToken >() {}.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); + } + } } }); } diff --git a/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Adapter/ChatAdapter.java b/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Adapter/ChatAdapter.java index 87dcbe8..54e16d1 100644 --- a/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Adapter/ChatAdapter.java +++ b/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Adapter/ChatAdapter.java @@ -35,6 +35,8 @@ public class ChatAdapter extends RecyclerView.Adapter { 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){ diff --git a/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Adapter/MsgAdapter.java b/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Adapter/MsgAdapter.java index ac2544c..ca475f0 100644 --- a/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Adapter/MsgAdapter.java +++ b/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Adapter/MsgAdapter.java @@ -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 { 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 { 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); } diff --git a/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Dao/MessageDao.java b/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Dao/MessageDao.java index c6803ea..a148359 100644 --- a/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Dao/MessageDao.java +++ b/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Dao/MessageDao.java @@ -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 messages=DBUtil.cursorToList(cursor,Message.class); if (messages.size()==0){ + Log.d("MessageDao","findUnReadMessage无未读消息"); return null; }else { return messages; diff --git a/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Fragment/MessageChannelFragment.java b/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Fragment/MessageChannelFragment.java index a0f0a63..3ddb092 100644 --- a/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Fragment/MessageChannelFragment.java +++ b/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Fragment/MessageChannelFragment.java @@ -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() { diff --git a/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Model/Friend.java b/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Model/Friend.java index 4adeca7..7e85dda 100644 --- a/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Model/Friend.java +++ b/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Model/Friend.java @@ -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() { diff --git a/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Utils/TimeUtil.java b/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Utils/TimeUtil.java index 889842b..5e9681d 100644 --- a/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Utils/TimeUtil.java +++ b/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Utils/TimeUtil.java @@ -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); diff --git a/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/service/ChatService.java b/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/service/ChatService.java index afcdcc0..255071c 100644 --- a/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/service/ChatService.java +++ b/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/service/ChatService.java @@ -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 findChatList(int ownerNetId){ - - ArrayList isChatFriends=friendDao.findChatFriendList(ownerNetId); - - ArrayList 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 isChatFriends = friendDao.findChatFriendList(ownerNetId); +// ArrayList 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 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){ diff --git a/Code/LeudaemiaLikeMe/app/src/main/res/layout/activity_chat.xml b/Code/LeudaemiaLikeMe/app/src/main/res/layout/activity_chat.xml index 0b41bcd..219e785 100644 --- a/Code/LeudaemiaLikeMe/app/src/main/res/layout/activity_chat.xml +++ b/Code/LeudaemiaLikeMe/app/src/main/res/layout/activity_chat.xml @@ -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" />