diff --git a/Code/LeudaemiaLikeMe/app/src/main/AndroidManifest.xml b/Code/LeudaemiaLikeMe/app/src/main/AndroidManifest.xml
index c0277ac..0150d1d 100644
--- a/Code/LeudaemiaLikeMe/app/src/main/AndroidManifest.xml
+++ b/Code/LeudaemiaLikeMe/app/src/main/AndroidManifest.xml
@@ -7,9 +7,10 @@
tools:targetApi="n">
+
-
+
+
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 7958f22..8d66ad5 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 = "172.30.87.197";
+ public static String SERVER_IP = "192.168.43.206";
// static {
// try {
@@ -122,6 +122,7 @@ public class BaseActivity extends AppCompatActivity {
mHandler.postDelayed(heartBeatRunnable, HEART_BEAT_RATE);
try {
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 d388afe..0212b3d 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
@@ -1,17 +1,121 @@
package com.example.leudaemialikeme.Activity;
+import android.content.Intent;
import android.os.Bundle;
+import android.view.KeyEvent;
+import android.view.View;
+import android.view.inputmethod.EditorInfo;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ImageButton;
+import android.widget.TextView;
-import com.example.leudaemialikeme.R;
-
-public class ChatActivity extends BaseActivity {
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+import com.example.leudaemialikeme.Adapter.ChatAdapter;
+import com.example.leudaemialikeme.Dao.FriendDao;
+import com.example.leudaemialikeme.Dao.MessageDao;
+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.google.gson.Gson;
+import java.util.ArrayList;
+public class ChatActivity extends BaseActivity {
+ private MessageDao messageDao = new MessageDao();
+ private FriendDao friendDao = new FriendDao();
+ private ImageButton bt_chat_to_chat_list;
+ private RecyclerView msg_recycler_view;
+ private TextView text_chat_name;
+ private EditText edit_content;
+ private Button bt_send_msg;
+ public int friendNetId;
+ private Friend currentFriend;
+ private ArrayList messageList = new ArrayList();
+ private MessageItemView msgItemView;
+ private ChatAdapter chatAdapter;
+ private Gson gson = new Gson();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chat);
+ bt_chat_to_chat_list = findViewById(R.id.bt_chat_to_chat_list);
+ msg_recycler_view = findViewById(R.id.msg_recycler_view);
+ text_chat_name = findViewById(R.id.text_chat_name);
+ edit_content = findViewById(R.id.edit_content);
+ bt_send_msg = findViewById(R.id.bt_send_msg);
+
+ initData();
+ text_chat_name.setText(currentFriend.getUsername());
+
+ LinearLayoutManager layoutManager = new LinearLayoutManager(this);
+ msg_recycler_view.setLayoutManager(layoutManager);
+ chatAdapter = new ChatAdapter(msgItemView);
+ msg_recycler_view.setAdapter(chatAdapter);
+ msg_recycler_view.scrollToPosition(messageList.size() - 1);
+ edit_content.setImeOptions(EditorInfo.IME_ACTION_SEND);
+ edit_content.setInputType(EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE);
+ edit_content.setMaxLines(2);
+ edit_content.setSingleLine(false);
+ edit_content.setOnEditorActionListener(new TextView.OnEditorActionListener() {
+ @Override
+ public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
+ if (actionId == EditorInfo.IME_ACTION_SEND
+ || actionId == EditorInfo.IME_ACTION_DONE
+ || (event != null && KeyEvent.KEYCODE_ENTER == event.getKeyCode() && KeyEvent.ACTION_DOWN == event.getAction())) {
+ String content=edit_content.getText().toString();
+ if (!content.equals("")){
+ Message message =new Message(owner.getNetId(),currentFriend.getNetId(),content);
+ addMsg(message,1);
+ edit_content.setText("");
+ wsClient.send(gson.toJson(message));
+ }
+ }
+ return false;
+ }
+ });
+ bt_send_msg.setOnClickListener(new View.OnClickListener(){
+
+ @Override
+ public void onClick(View v) {
+ String content=edit_content.getText().toString();
+ if (!content.equals("")){
+ Message message =new Message(owner.getNetId(),currentFriend.getNetId(),content);
+ addMsg(message,1);
+ edit_content.setText("");
+ wsClient.send(gson.toJson(message));
+ }
+ }
+ });
+ bt_chat_to_chat_list.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ finish();
+ }
+ });
+ }
+
+ private void initData() {
+ //从intent中取出currentNetId并查出对象
+ Intent intent = getIntent();
+ friendNetId = intent.getIntExtra("friendNetId", -1);
+ currentFriend = friendDao.findByNetId(friendNetId, owner.getNetId());
+ //从数据库中查找聊天记录-默认最近20条记录
+ messageList = messageDao.findNearlyMessage(friendNetId, owner.getNetId());
+ //组装成MessageItemViw
+ msgItemView = new MessageItemView(currentFriend, owner, messageList);
+ }
+
+ //消息添加方法
+ public void addMsg(Message message, int isRead) {
+ 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/LoginActivity.java b/Code/LeudaemiaLikeMe/app/src/main/java/com/example/leudaemialikeme/Activity/LoginActivity.java
index 5fe6279..0f4e08b 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
@@ -1,6 +1,7 @@
package com.example.leudaemialikeme.Activity;
import android.content.Intent;
+import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
@@ -15,6 +16,9 @@ import com.example.leudaemialikeme.Model.User;
import com.example.leudaemialikeme.R;
import com.example.leudaemialikeme.Utils.OkHttpUtil;
import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
+
+import org.litepal.LitePal;
import java.util.HashMap;
import java.util.List;
@@ -31,6 +35,9 @@ public class LoginActivity extends BaseActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
+ //获取数据库
+ SQLiteDatabase db = LitePal.getDatabase();
+
edit_username = findViewById(R.id.edit_username);
edit_pwd = findViewById(R.id.edit_pwd);
bt_login = findViewById(R.id.bt_login);
@@ -112,14 +119,14 @@ public class LoginActivity extends BaseActivity {
@Override
public void run() {
Gson gson = new Gson();
- Map jsonMap= gson.fromJson(jsonStr, Map.class);
+ Map jsonMap= gson.fromJson(jsonStr, new TypeToken