私聊完成啦!!!

master
Toyga 3 years ago
parent 3cac430951
commit df24958830

@ -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 {

@ -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<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));
}
}
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();
}
}

@ -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);
}
}

@ -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<MessageChannelFragment> 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);
}
}

@ -80,6 +80,7 @@ public class MsgAdapter extends RecyclerView.Adapter<MsgAdapter.ViewHolder> {
Intent intent = new Intent(v.getContext(), ChatActivity.class);
intent.putExtra("friendNetId",chat.getFriendId());
v.getContext().startActivity(intent);
holder.point.setVisibility(View.GONE);
// checkFriendRequest(params);
}
});

@ -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;
}
}

@ -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;
}
}

@ -26,24 +26,8 @@ public class ChatService {
public ArrayList<Chat> findChatList(int ownerNetId){
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);

@ -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<String, String> jsonMap = gson.fromJson(message, new TypeToken<Map<String, String>>() {}.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("刷新","聊天列表刷新完成");
}
});
}

@ -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">
<!-- TODO: Update blank fragment layout -->

Loading…
Cancel
Save