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 64b4c9f..12a4c8c 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 = "10.30.17.104"; + public static String SERVER_IP = "172.30.87.197"; // static { // try { 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 c85f4de..0ccd86c 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 @@ -75,9 +75,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)); } } return false; @@ -125,11 +131,11 @@ public class ChatActivity extends BaseActivity { //消息添加方法 public void addMsg(Message message, int isRead) { + Log.d("刷新","添加一条新消息"); msgItemView.messages.add(message); chatAdapter.notifyItemInserted(messageList.size() - 1); 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/MainActivity.java b/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Activity/MainActivity.java index ab289d6..c7d6513 100644 --- a/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Activity/MainActivity.java +++ b/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Activity/MainActivity.java @@ -175,4 +175,8 @@ public class MainActivity extends BaseActivity { fragmentList.add(new MessageFragment()); fragmentList.add(new MyFragment()); } + + public Fragment getFragment(int i){ + return fragmentList.get(i); + } } \ No newline at end of file diff --git a/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Adapter/MessagePageFragmentAdapter.java b/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Adapter/MessagePageFragmentAdapter.java index 0941826..d25068f 100644 --- a/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Adapter/MessagePageFragmentAdapter.java +++ b/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Adapter/MessagePageFragmentAdapter.java @@ -7,9 +7,13 @@ import androidx.fragment.app.FragmentPagerAdapter; import com.example.leudaemialikeme.Fragment.MessageChannelFragment; +import java.util.ArrayList; +import java.util.List; + public class MessagePageFragmentAdapter extends FragmentPagerAdapter { private String[] channelList; private FragmentManager fm; + private List mcfList = new ArrayList<>(); public MessagePageFragmentAdapter(@NonNull FragmentManager fm, String[] channelList) { super(fm); this.channelList = channelList; @@ -20,12 +24,17 @@ public class MessagePageFragmentAdapter extends FragmentPagerAdapter { @Override public Fragment getItem(int position) { String MessageCategoryTitle = channelList[position]; - - return MessageChannelFragment.newInstance(MessageCategoryTitle); + MessageChannelFragment mcf = MessageChannelFragment.newInstance(MessageCategoryTitle); + mcfList.add(mcf); + return mcf; } @Override public int getCount() { return channelList.length; } + + public MessageChannelFragment getMcf(int i){ + return mcfList.get(i); + } } 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 ca475f0..c4954e4 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 @@ -80,6 +80,7 @@ public class MsgAdapter extends RecyclerView.Adapter { Intent intent = new Intent(v.getContext(), ChatActivity.class); intent.putExtra("friendNetId",chat.getFriendId()); v.getContext().startActivity(intent); + holder.point.setVisibility(View.GONE); // checkFriendRequest(params); } }); 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 3ddb092..c69fc42 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 @@ -66,10 +66,10 @@ public class MessageChannelFragment extends Fragment { } else if (messageCategoryTitle.equals(" 评论 ")) { view = inflater.inflate(R.layout.fragment_comment, container, false); - } else if (messageCategoryTitle.equals(" 粉丝 ")) { - view = inflater.inflate(R.layout.fragment_fans, container, false); } else if (messageCategoryTitle.equals(" 赞 ")) { view = inflater.inflate(R.layout.fragment_nice, container, false); + } else if (messageCategoryTitle.equals(" 粉丝 ")) { + view = inflater.inflate(R.layout.fragment_fans, container, false); } else { view = inflater.inflate(R.layout.fragment_message_channel, container, false); mTitleField = (TextView) view.findViewById(R.id.messageCategoryTitle); @@ -96,8 +96,15 @@ public class MessageChannelFragment extends Fragment { // } public void updateUi(){ getMsgList(); - MsgAdapter adapter = new MsgAdapter(chatList); - recyclerView.setAdapter(adapter); - recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + MsgAdapter adapter = new MsgAdapter(chatList); + recyclerView.setAdapter(adapter); + } + }); + } + public String getMessageCategoryTitle(){ + return messageCategoryTitle; } } diff --git a/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Fragment/MessageFragment.java b/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Fragment/MessageFragment.java index bc4cb03..a13e1dc 100644 --- a/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Fragment/MessageFragment.java +++ b/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Fragment/MessageFragment.java @@ -72,8 +72,7 @@ public class MessageFragment extends Fragment implements ViewPager.OnPageChangeL private void initViewPager() { //初始化ViewPager FragmentManager fragmentManager = super.getActivity().getSupportFragmentManager(); - // adapter=new MessagePageFragmentAdapter(fragmentManager, channelList); - adapter=new MessagePageFragmentAdapter(fragmentManager, channelList); + adapter = new MessagePageFragmentAdapter(fragmentManager, channelList); //参数 channelList 将被适配器用来在动态切换碎片的时候实时创建碎片 //设置 ViewPager 的适配器 viewPager.setAdapter(adapter); viewPager.setOffscreenPageLimit(2); @@ -109,4 +108,7 @@ public class MessageFragment extends Fragment implements ViewPager.OnPageChangeL int len=left+width/2-screenWidth/2; hvChannel.smoothScrollTo(len,0); } + public MessagePageFragmentAdapter getAdapter(){ + return adapter; + } } \ No newline at end of file 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 255071c..3dc77cf 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 @@ -26,24 +26,8 @@ public class ChatService { public ArrayList findChatList(int ownerNetId){ 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); diff --git a/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/service/WebSocketClient.java b/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/service/WebSocketClient.java index 8ea8c9f..53c6584 100644 --- a/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/service/WebSocketClient.java +++ b/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/service/WebSocketClient.java @@ -12,14 +12,19 @@ import com.example.leudaemialikeme.Activity.ChatActivity; import com.example.leudaemialikeme.Activity.MainActivity; import com.example.leudaemialikeme.Controller.ActivityController; import com.example.leudaemialikeme.Fragment.MessageChannelFragment; +import com.example.leudaemialikeme.Fragment.MessageFragment; import com.example.leudaemialikeme.Model.Message; import com.example.leudaemialikeme.R; import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; import org.java_websocket.drafts.Draft_6455; import org.java_websocket.handshake.ServerHandshake; import java.net.URI; +import java.sql.Timestamp; +import java.util.Map; +import java.util.Objects; public class WebSocketClient extends org.java_websocket.client.WebSocketClient { @@ -49,35 +54,29 @@ public class WebSocketClient extends org.java_websocket.client.WebSocketClient { public void onMessage(String message){ try { // friendDao=new FriendDao(); - Log.d("WS",message); + Log.d("WS",message+" onMessage()回调"); //提取消息 - Message unReadMsg= gson.fromJson(message, Message.class); - String content=(String) unReadMsg.getContent(); - int messageType=(int)unReadMsg.getMessageType(); - int receiverId=(int)unReadMsg.getReceiverNetId(); - int senderId=(int)unReadMsg.getSenderNetId(); - long createTime=(long) unReadMsg.getCreateTime(); + Map jsonMap = gson.fromJson(message, new TypeToken>() {}.getType()); + String content = jsonMap.get("content"); + int messageType = Integer.parseInt(Objects.requireNonNull(jsonMap.get("messageType"))); + int receiverId = Integer.parseInt(Objects.requireNonNull(jsonMap.get("receiverNetId"))); + int senderId = Integer.parseInt(Objects.requireNonNull(jsonMap.get("senderNetId"))); + long createTime = Timestamp.valueOf(jsonMap.get("createTime")).getTime(); Message newMessage=new Message(senderId,receiverId,messageType, content, createTime); + Log.d("刷新","获取到对面发送的消息"); //获取当前活动对象 currentActivity= ActivityController.getCurrentActivity(); -// //判断消息发送者是否为本地好友,如果不是本地好友,需要进行好友同步,0表示是系统发送的消息 -// if (senderId!=0){ -// Friend friend=friendDao.findByNetId(senderId,receiverId); -// if (friend==null){ -// getNewFriends(senderId,receiverId); -// } -// } - //根据消息类型进行判断 - /****/ String currentActivityName=currentActivity.getLocalClassName(); + Log.d("刷新","当前活动名:"+currentActivityName); if (messageType==MSG_SYSTEM){ if (content.equals("offline")){ offline(); } }else { //如果当前活动为聊天活动则进行数据展示 - if (currentActivityName.equals("activity.ChatActivity")){ + if (currentActivityName.equals("Activity.ChatActivity")){ + Log.d("刷新","当前在聊天界面活动页"); updateChatUi(newMessage); // 如果当前活动为聊天列表界面,需要对指定的元素进行局部更新,如果没有该用户在聊天列表中,需要添加该好友项 }else if (currentActivity.findViewById(R.id.chat_list_layout)!=null){ @@ -86,9 +85,9 @@ public class WebSocketClient extends org.java_websocket.client.WebSocketClient { }else{ newMessage.save(); notification(); + updateChatListUi(); } } - /****/ }catch (Exception e){ e.printStackTrace(); } @@ -109,10 +108,10 @@ public class WebSocketClient extends org.java_websocket.client.WebSocketClient { currentActivity.runOnUiThread(new Runnable() { @Override public void run() { - //TODO - chatActivity=(ChatActivity) currentActivity; + chatActivity = (ChatActivity) currentActivity; //如果当前正在聊天的人为消息的发送者,则进行展示,并存为已读消息 - if (chatActivity.friendNetId==newMessage.getSenderNetId()){ + if (chatActivity.friendNetId == newMessage.getSenderNetId()){ + Log.d("刷新","当前聊天的人与消息发送者为同一人"); chatActivity.addMsg(newMessage,1); } //如果当前正在聊天的人不是消息发送者,则更新一个未读标记 @@ -130,8 +129,17 @@ public class WebSocketClient extends org.java_websocket.client.WebSocketClient { @Override public void run() { mainActivity = (MainActivity) currentActivity; - MessageChannelFragment msgcf = (MessageChannelFragment) mainActivity.getSupportFragmentManager().findFragmentById(R.id.fragment_message_channel); - msgcf.updateUi(); +// FragmentManager fm = mainActivity.getSupportFragmentManager(); +// Log.d("刷新","当前碎片管理:"+fm.toString()); +// MessageChannelFragment mcf = (MessageChannelFragment) fm.findFragmentById(R.id.fragment_message_channel); +// Log.d("刷新","当前所在碎片:"+mcf); +// MessageChannelFragment msgcf = (MessageChannelFragment) mainActivity.getSupportFragmentManager().findFragmentById(R.id.fragment_message_channel); +// MessageChannelFragment mcf = new MessageChannelFragment(); + MessageFragment mf = (MessageFragment) mainActivity.getFragment(2); + MessageChannelFragment mcf = mf.getAdapter().getMcf(0); + Log.d("当前碎片的名字滑动页:", mcf.getMessageCategoryTitle()); + mcf.updateUi(); + Log.d("刷新","聊天列表刷新完成"); } }); } diff --git a/Code/LeudaemiaLikeMe/app/src/main/res/layout/fragment_message_channel.xml b/Code/LeudaemiaLikeMe/app/src/main/res/layout/fragment_message_channel.xml index d1ab394..4684214 100644 --- a/Code/LeudaemiaLikeMe/app/src/main/res/layout/fragment_message_channel.xml +++ b/Code/LeudaemiaLikeMe/app/src/main/res/layout/fragment_message_channel.xml @@ -2,7 +2,6 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - android:id="@+id/fragment_message_channel" tools:context="com.example.leudaemialikeme.Fragment.MessageChannelFragment">