parent
e8e7f10a0f
commit
a319f90bad
@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<litepal>
|
||||||
|
|
||||||
|
<dbname value="leukemia" />
|
||||||
|
|
||||||
|
<version value="1" />
|
||||||
|
|
||||||
|
<list>
|
||||||
|
<mapping class="com.example.leudaemialikeme.Model.Owner"/>
|
||||||
|
<mapping class="com.example.leudaemialikeme.Model.Message"/>
|
||||||
|
</list>
|
||||||
|
|
||||||
|
</litepal>
|
@ -0,0 +1,84 @@
|
|||||||
|
package com.example.leudaemialikeme.Adapter;
|
||||||
|
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.LinearLayout;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
|
import com.example.leudaemialikeme.Model.Message;
|
||||||
|
import com.example.leudaemialikeme.Model.Owner;
|
||||||
|
import com.example.leudaemialikeme.R;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class ChatAdapter extends RecyclerView.Adapter<ChatAdapter.ViewHolder> {
|
||||||
|
private List<Message> messageList = new ArrayList<>();
|
||||||
|
private Owner owner;
|
||||||
|
|
||||||
|
static class ViewHolder extends RecyclerView.ViewHolder{
|
||||||
|
LinearLayout msg_content_left;
|
||||||
|
LinearLayout msg_content_right;
|
||||||
|
TextView left_msg;
|
||||||
|
TextView right_msg;
|
||||||
|
List<LinearLayout> layouts = new ArrayList<>();
|
||||||
|
public ViewHolder(View view){
|
||||||
|
super(view);
|
||||||
|
msg_content_left = (LinearLayout) view.findViewById(R.id.msg_content_left);
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setVisibility(LinearLayout layout){
|
||||||
|
for(LinearLayout layout1: layouts){
|
||||||
|
if(layout1==layout){
|
||||||
|
layout1.setVisibility(View.VISIBLE);
|
||||||
|
}else {
|
||||||
|
layout1.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
public ChatAdapter(List<Message> messageList, Owner owner){
|
||||||
|
this.messageList = messageList;
|
||||||
|
this.owner = owner;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public ChatAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
|
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.msg_content_item,parent,false);
|
||||||
|
ChatAdapter.ViewHolder holder = new ChatAdapter.ViewHolder(view);
|
||||||
|
return holder;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBindViewHolder(@NonNull ChatAdapter.ViewHolder holder, int position) {
|
||||||
|
Message message = messageList.get(position);
|
||||||
|
switch (message.getMessageType()){
|
||||||
|
case 1:
|
||||||
|
if(message.getSenderNetId()==owner.getNetId()){
|
||||||
|
holder.setVisibility(holder.msg_content_right);
|
||||||
|
holder.right_msg.setText(message.getContent());
|
||||||
|
}else {
|
||||||
|
holder.setVisibility(holder.msg_content_left);
|
||||||
|
holder.left_msg.setText(message.getContent());
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getItemCount() {
|
||||||
|
return messageList.size();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,31 @@
|
|||||||
|
package com.example.leudaemialikeme.Controller;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class ActivityController {
|
||||||
|
public static List<Activity> activities=new ArrayList<>();
|
||||||
|
|
||||||
|
public static void addActivity(Activity activity){
|
||||||
|
activities.add(activity);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void removeActivity(Activity activity){
|
||||||
|
activities.remove(activity);
|
||||||
|
activity.finish();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void finishAll(){
|
||||||
|
for (Activity activity : activities){
|
||||||
|
if (!activity.isFinishing() && !activity.getLocalClassName().equals("activity.LoginActivity")){
|
||||||
|
activity.finish();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Activity getCurrentActivity(){
|
||||||
|
return activities.get(activities.size()-1);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,32 @@
|
|||||||
|
package com.example.leudaemialikeme.Dao;
|
||||||
|
|
||||||
|
import org.litepal.LitePal;
|
||||||
|
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
|
public class BaseDao {
|
||||||
|
//添加数据
|
||||||
|
public void insert(Object obj){
|
||||||
|
Class objClass=obj.getClass();
|
||||||
|
try {
|
||||||
|
Method save=objClass.getMethod("save");
|
||||||
|
save.invoke(obj);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//删除数据
|
||||||
|
public void deleteById(Object obj,int id){
|
||||||
|
LitePal.delete(obj.getClass(),id);
|
||||||
|
}
|
||||||
|
//更新数据
|
||||||
|
public void update(Object obj,int id){
|
||||||
|
Class objClass=obj.getClass();
|
||||||
|
try {
|
||||||
|
Method save=objClass.getMethod("update");
|
||||||
|
save.invoke(obj,id);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,109 @@
|
|||||||
|
package com.example.leudaemialikeme.Dao;
|
||||||
|
|
||||||
|
|
||||||
|
import android.database.Cursor;
|
||||||
|
|
||||||
|
import com.example.leudaemialikeme.Model.Message;
|
||||||
|
import com.example.leudaemialikeme.Utils.DBUtil;
|
||||||
|
|
||||||
|
import org.litepal.LitePal;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
|
||||||
|
public class MessageDao extends BaseDao {
|
||||||
|
|
||||||
|
public Message findLastMessage(int friendNetId, int ownerNetId){
|
||||||
|
String fnId=String.valueOf(friendNetId);
|
||||||
|
String onId=String.valueOf(ownerNetId);
|
||||||
|
Cursor cursor=
|
||||||
|
LitePal.findBySQL(
|
||||||
|
"select * from message where (senderNetId = ? AND receiverNetId = ?) OR (senderNetId = ? AND receiverNetId = ?) order by createTime desc limit 1",
|
||||||
|
onId,fnId,
|
||||||
|
fnId,onId);
|
||||||
|
|
||||||
|
ArrayList<Message> messages= DBUtil.cursorToList(cursor,Message.class);
|
||||||
|
if (messages.size()==0){
|
||||||
|
return null;
|
||||||
|
}else {
|
||||||
|
return messages.get(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArrayList<Message> findUnReadMessage(int ownerNetId){
|
||||||
|
String onId=String.valueOf(ownerNetId);
|
||||||
|
Cursor cursor=
|
||||||
|
LitePal.findBySQL(
|
||||||
|
"select * from message where receiverNetId = ? and flag=0 order by createTime desc limit 1",
|
||||||
|
onId);
|
||||||
|
|
||||||
|
ArrayList<Message> messages=DBUtil.cursorToList(cursor,Message.class);
|
||||||
|
if (messages.size()==0){
|
||||||
|
return null;
|
||||||
|
}else {
|
||||||
|
return messages;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArrayList<Message> findNearlyMessage(int friendNetId,int ownerNetId){
|
||||||
|
String fnId=String.valueOf(friendNetId);
|
||||||
|
String onId=String.valueOf(ownerNetId);
|
||||||
|
Cursor cursor=
|
||||||
|
LitePal.findBySQL(
|
||||||
|
"select * from message where (senderNetId = ? AND receiverNetId = ?) OR (senderNetId = ? AND receiverNetId = ?) order by createTime desc limit 20",
|
||||||
|
onId,fnId,
|
||||||
|
fnId,onId);
|
||||||
|
|
||||||
|
ArrayList<Message> messages=DBUtil.cursorToList(cursor,Message.class);
|
||||||
|
Collections.reverse(messages);
|
||||||
|
|
||||||
|
if (messages.size()==0||messages==null){
|
||||||
|
return new ArrayList<Message>();
|
||||||
|
}
|
||||||
|
return messages;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void changeMsgStatus(int friendNetId,int ownerNetId){
|
||||||
|
String fnId=String.valueOf(friendNetId);
|
||||||
|
String onId=String.valueOf(ownerNetId);
|
||||||
|
Cursor cursor=
|
||||||
|
LitePal.findBySQL(
|
||||||
|
"select * from message where senderNetId = ? AND receiverNetId = ? AND flag= 0",
|
||||||
|
fnId,onId);
|
||||||
|
|
||||||
|
ArrayList<Message> messages=DBUtil.cursorToList(cursor,Message.class);
|
||||||
|
if (messages !=null || messages.size()>0){
|
||||||
|
for (Message message : messages){
|
||||||
|
message.setFlag(1);
|
||||||
|
message.update(message.getId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArrayList<Message> findAllMessage(int friendNetId,int ownerNetId){
|
||||||
|
String fnId=String.valueOf(friendNetId);
|
||||||
|
String onId=String.valueOf(ownerNetId);
|
||||||
|
Cursor cursor=
|
||||||
|
LitePal.findBySQL(
|
||||||
|
"select * from message where (senderNetId = ? AND receiverNetId = ?) OR (senderNetId = ? AND receiverNetId = ?) order by createtime desc",
|
||||||
|
onId,fnId,
|
||||||
|
fnId,onId);
|
||||||
|
|
||||||
|
ArrayList<Message> messages=DBUtil.cursorToList(cursor,Message.class);
|
||||||
|
Collections.reverse(messages);
|
||||||
|
|
||||||
|
if (messages.size()==0||messages==null){
|
||||||
|
return new ArrayList<Message>();
|
||||||
|
}
|
||||||
|
return messages;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void delete(int friendNetId,int ownerNetId){
|
||||||
|
String fnId=String.valueOf(friendNetId);
|
||||||
|
String onId=String.valueOf(ownerNetId);
|
||||||
|
LitePal.deleteAll(Message.class,
|
||||||
|
"(senderNetId = ? AND receiverNetId = ?) OR (senderNetId = ? AND receiverNetId = ?)",
|
||||||
|
fnId,onId,
|
||||||
|
onId,fnId);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,29 @@
|
|||||||
|
package com.example.leudaemialikeme.Dao;
|
||||||
|
|
||||||
|
|
||||||
|
import com.example.leudaemialikeme.Model.Owner;
|
||||||
|
|
||||||
|
import org.litepal.LitePal;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
public class OwnerDao extends BaseDao {
|
||||||
|
|
||||||
|
public Owner findOwnerByNetId(int netId){
|
||||||
|
ArrayList<Owner> owner= (ArrayList<Owner>) LitePal.where("netId = ?", String.valueOf(netId)).find(Owner.class);
|
||||||
|
if (owner.size()==0){
|
||||||
|
return null;
|
||||||
|
}else {
|
||||||
|
return owner.get(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Owner findOwnerByUsername(String username){
|
||||||
|
ArrayList<Owner> owner= (ArrayList<Owner>) LitePal.where("username = ?", username).find(Owner.class);
|
||||||
|
if (owner.size()==0){
|
||||||
|
return null;
|
||||||
|
}else {
|
||||||
|
return owner.get(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,57 @@
|
|||||||
|
package com.example.leudaemialikeme.Model;
|
||||||
|
|
||||||
|
public class Chat {
|
||||||
|
private int friendId;
|
||||||
|
private String friendName;
|
||||||
|
private String lastMessage;
|
||||||
|
private int flag;
|
||||||
|
private String time;
|
||||||
|
|
||||||
|
public Chat(int friendId, String friendName, String lastMessage, int flag, String time) {
|
||||||
|
this.friendId = friendId;
|
||||||
|
this.friendName = friendName;
|
||||||
|
this.lastMessage = lastMessage;
|
||||||
|
this.flag = flag;
|
||||||
|
this.time = time;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getFriendId() {
|
||||||
|
return friendId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFriendId(int friendId) {
|
||||||
|
this.friendId = friendId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getFriendName() {
|
||||||
|
return friendName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFriendName(String friendName) {
|
||||||
|
this.friendName = friendName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLastMessage() {
|
||||||
|
return lastMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLastMessage(String lastMessage) {
|
||||||
|
this.lastMessage = lastMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getFlag() {
|
||||||
|
return flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFlag(int flag) {
|
||||||
|
this.flag = flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTime() {
|
||||||
|
return time;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTime(String time) {
|
||||||
|
this.time = time;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,104 @@
|
|||||||
|
package com.example.leudaemialikeme.Model;
|
||||||
|
|
||||||
|
import com.example.leudaemialikeme.service.WebSocketClient;
|
||||||
|
|
||||||
|
import org.litepal.crud.LitePalSupport;
|
||||||
|
|
||||||
|
public class Message extends LitePalSupport {
|
||||||
|
private int id;
|
||||||
|
private int senderNetId;
|
||||||
|
private int receiverNetId;
|
||||||
|
private String content;
|
||||||
|
private int messageType;
|
||||||
|
private long createTime;
|
||||||
|
private int flag;
|
||||||
|
|
||||||
|
public Message() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Message(int senderNetId, int receiverNetId, String content) {
|
||||||
|
this.senderNetId = senderNetId;
|
||||||
|
this.receiverNetId = receiverNetId;
|
||||||
|
this.content = content;
|
||||||
|
this.flag = 0;
|
||||||
|
this.createTime = System.currentTimeMillis();
|
||||||
|
this.messageType = WebSocketClient.MSG_TEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Message(int senderNetId, int receiverNetId, String content, int messageType) {
|
||||||
|
this.senderNetId = senderNetId;
|
||||||
|
this.receiverNetId = receiverNetId;
|
||||||
|
this.content = content;
|
||||||
|
this.messageType = messageType;
|
||||||
|
this.flag = 0;
|
||||||
|
this.createTime = System.currentTimeMillis();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Message(int senderNetId, int receiverNetId, int messageType, String content, long createTime) {
|
||||||
|
this.senderNetId = senderNetId;
|
||||||
|
this.receiverNetId = receiverNetId;
|
||||||
|
this.messageType = messageType;
|
||||||
|
this.content = content;
|
||||||
|
this.createTime = createTime;
|
||||||
|
this.flag = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMessageType() {
|
||||||
|
return messageType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMessageType(int messageType) {
|
||||||
|
this.messageType = messageType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(int id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSenderNetId() {
|
||||||
|
return senderNetId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSenderNetId(int senderNetId) {
|
||||||
|
this.senderNetId = senderNetId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getReceiverNetId() {
|
||||||
|
return receiverNetId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setReceiverNetId(int receiverNetId) {
|
||||||
|
this.receiverNetId = receiverNetId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getContent() {
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setContent(String content) {
|
||||||
|
this.content = content;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getCreateTime() {
|
||||||
|
return createTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCreateTime(long createTime) {
|
||||||
|
this.createTime = createTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getFlag() {
|
||||||
|
return flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFlag(int flag) {
|
||||||
|
this.flag = flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,49 @@
|
|||||||
|
package com.example.leudaemialikeme.Model;
|
||||||
|
|
||||||
|
import org.litepal.annotation.Column;
|
||||||
|
import org.litepal.crud.LitePalSupport;
|
||||||
|
|
||||||
|
public class Owner extends LitePalSupport {
|
||||||
|
private int id; //本地数据库自增id
|
||||||
|
@Column(unique = true)
|
||||||
|
private int netId; //mysql自增id
|
||||||
|
@Column(unique = true)
|
||||||
|
private String username;
|
||||||
|
private String password;
|
||||||
|
|
||||||
|
public Owner(){
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(int id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getNetId() {
|
||||||
|
return netId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNetId(int netId) {
|
||||||
|
this.netId = netId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUsername() {
|
||||||
|
return username;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUsername(String username) {
|
||||||
|
this.username = username;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPassword() {
|
||||||
|
return password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPassword(String password) {
|
||||||
|
this.password = password;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,38 @@
|
|||||||
|
package com.example.leudaemialikeme.Receiver;
|
||||||
|
|
||||||
|
import android.content.BroadcastReceiver;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.DialogInterface;
|
||||||
|
import android.content.Intent;
|
||||||
|
|
||||||
|
import androidx.appcompat.app.AlertDialog;
|
||||||
|
|
||||||
|
import com.example.leudaemialikeme.Activity.BaseActivity;
|
||||||
|
import com.example.leudaemialikeme.Activity.LoginActivity;
|
||||||
|
import com.example.leudaemialikeme.Controller.ActivityController;
|
||||||
|
|
||||||
|
|
||||||
|
public class ForceOfflineReceiver extends BroadcastReceiver {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onReceive(final Context context, final Intent intent) {
|
||||||
|
//创建一个弹窗,不可取消类型
|
||||||
|
String warringMsg=intent.getStringExtra("warringMsg");
|
||||||
|
AlertDialog.Builder builder=new AlertDialog.Builder(context);
|
||||||
|
builder.setTitle("警告");
|
||||||
|
builder.setMessage(warringMsg);
|
||||||
|
builder.setCancelable(false);
|
||||||
|
builder.setPositiveButton("退出", new DialogInterface.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
ActivityController.finishAll();
|
||||||
|
//关闭WS
|
||||||
|
BaseActivity.wsClient.close();
|
||||||
|
BaseActivity.isNeedReconnect=false;
|
||||||
|
Intent intent1=new Intent(context, LoginActivity.class);
|
||||||
|
context.startActivity(intent1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
builder.show();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,52 @@
|
|||||||
|
package com.example.leudaemialikeme.Utils;
|
||||||
|
|
||||||
|
import android.database.Cursor;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
public class DBUtil {
|
||||||
|
public static ArrayList cursorToList(Cursor cursor,Class objClass) {
|
||||||
|
try {
|
||||||
|
ArrayList objList=new ArrayList();
|
||||||
|
//获取全部字段名
|
||||||
|
Field[] fields=objClass.getDeclaredFields();
|
||||||
|
//通过fieldName获取指定数据
|
||||||
|
while (cursor.moveToNext()){
|
||||||
|
Object newObj=objClass.newInstance();
|
||||||
|
for (Field field : fields){
|
||||||
|
field.setAccessible(true);
|
||||||
|
String colName=field.getName().toLowerCase();
|
||||||
|
Class fileType=field.getType();
|
||||||
|
int valueIndex=cursor.getColumnIndex(colName);
|
||||||
|
Object value=null;
|
||||||
|
//根据字段类型判断调用哪个方法/String/Int/Long/boolean
|
||||||
|
switch (fileType.getSimpleName()){
|
||||||
|
case "String":
|
||||||
|
value=cursor.getString(valueIndex);
|
||||||
|
break;
|
||||||
|
case "int":
|
||||||
|
value=cursor.getInt(valueIndex);
|
||||||
|
break;
|
||||||
|
case "long":
|
||||||
|
value=cursor.getLong(valueIndex);
|
||||||
|
break;
|
||||||
|
case "boolean":
|
||||||
|
int dbVal=cursor.getInt(valueIndex);
|
||||||
|
value=true;
|
||||||
|
if (dbVal == 0){
|
||||||
|
value=false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
field.set(newObj,value);
|
||||||
|
}
|
||||||
|
objList.add(newObj);
|
||||||
|
}
|
||||||
|
return objList;
|
||||||
|
}catch (Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,85 @@
|
|||||||
|
package com.example.leudaemialikeme.Utils;
|
||||||
|
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import okhttp3.Callback;
|
||||||
|
import okhttp3.FormBody;
|
||||||
|
import okhttp3.OkHttpClient;
|
||||||
|
import okhttp3.Request;
|
||||||
|
import okhttp3.RequestBody;
|
||||||
|
import okhttp3.Response;
|
||||||
|
|
||||||
|
public class OkHttpUtil {
|
||||||
|
private static OkHttpClient client = new OkHttpClient();
|
||||||
|
private static Gson gson = new Gson();
|
||||||
|
//同步GET请求
|
||||||
|
public static String synGet(String url){
|
||||||
|
try{
|
||||||
|
Request request = new Request.Builder()
|
||||||
|
.url(url)
|
||||||
|
.build();
|
||||||
|
Response response = client.newCall(request).execute();
|
||||||
|
return response.body().string();
|
||||||
|
}catch (Exception e){
|
||||||
|
Log.d("ok http","ok http is error");
|
||||||
|
e.printStackTrace();
|
||||||
|
return "error";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//同步POST请求
|
||||||
|
public static String synPost(String url, Map params){
|
||||||
|
try{
|
||||||
|
|
||||||
|
String jsonStr= gson.toJson(params);
|
||||||
|
RequestBody requestBody=new FormBody.Builder()
|
||||||
|
.add("jsonStr",jsonStr)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
Request request = new Request.Builder()
|
||||||
|
.url(url)
|
||||||
|
.post(requestBody)
|
||||||
|
.build();
|
||||||
|
Response response = client.newCall(request).execute();
|
||||||
|
return response.body().string();
|
||||||
|
}catch (Exception e){
|
||||||
|
Log.d("ok http","ok http is error");
|
||||||
|
e.printStackTrace();
|
||||||
|
return "error";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//异步GET请求
|
||||||
|
public static void asyGet(String url, Callback callback){
|
||||||
|
try{
|
||||||
|
Request request = new Request.Builder()
|
||||||
|
.url(url)
|
||||||
|
.build();
|
||||||
|
client.newCall(request).enqueue(callback);
|
||||||
|
}catch (Exception e){
|
||||||
|
Log.d("ok http","ok http is error");
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//异步POST请求
|
||||||
|
public static void asyPost(String url, Map params, Callback callback){
|
||||||
|
try{
|
||||||
|
String jsonStr = gson.toJson(params);
|
||||||
|
RequestBody requestBody=new FormBody.Builder()
|
||||||
|
.add("jsonStr",jsonStr)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
Request request = new Request.Builder()
|
||||||
|
.url(url)
|
||||||
|
.post(requestBody)
|
||||||
|
.build();
|
||||||
|
client.newCall(request).enqueue(callback);
|
||||||
|
}catch (Exception e){
|
||||||
|
Log.d("ok http","ok http is error");
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,186 @@
|
|||||||
|
package com.example.leudaemialikeme.service;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import com.example.leudaemialikeme.Activity.BaseActivity;
|
||||||
|
import com.example.leudaemialikeme.Activity.ChatActivity;
|
||||||
|
import com.example.leudaemialikeme.Controller.ActivityController;
|
||||||
|
import com.example.leudaemialikeme.Model.Message;
|
||||||
|
import com.example.leudaemialikeme.Utils.OkHttpUtil;
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
|
||||||
|
import org.java_websocket.drafts.Draft_6455;
|
||||||
|
import org.java_websocket.handshake.ServerHandshake;
|
||||||
|
|
||||||
|
import java.net.URI;
|
||||||
|
|
||||||
|
public class WebSocketClient extends org.java_websocket.client.WebSocketClient {
|
||||||
|
|
||||||
|
private Activity currentActivity;
|
||||||
|
private ChatActivity chatActivity;///////////////////
|
||||||
|
// private PrivateMsgFragment privateMsgFragment;////////////////////////
|
||||||
|
// private FriendDao friendDao;
|
||||||
|
private Gson gson = new Gson();
|
||||||
|
|
||||||
|
public static final int MSG_TEXT=1;
|
||||||
|
public static final int MSG_IMAGE=2;
|
||||||
|
public static final int MSG_SYSTEM=3;
|
||||||
|
|
||||||
|
|
||||||
|
public WebSocketClient(URI serverURI){
|
||||||
|
super(serverURI,new Draft_6455());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onOpen(ServerHandshake handshakedata) {
|
||||||
|
Log.d("WS","链接开启");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onMessage(String message){
|
||||||
|
try {
|
||||||
|
// friendDao=new FriendDao();
|
||||||
|
Log.d("WS",message);
|
||||||
|
//提取消息
|
||||||
|
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();
|
||||||
|
Message newMessage=new Message(senderId,receiverId,messageType, content, createTime);
|
||||||
|
//获取当前活动对象
|
||||||
|
currentActivity= ActivityController.getCurrentActivity();
|
||||||
|
// //判断消息发送者是否为本地好友,如果不是本地好友,需要进行好友同步,0表示是系统发送的消息
|
||||||
|
// if (senderId!=0){
|
||||||
|
// Friend friend=friendDao.findByNetId(senderId,receiverId);
|
||||||
|
// if (friend==null){
|
||||||
|
// getNewFriends(senderId,receiverId);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
//根据消息类型进行判断
|
||||||
|
/****/
|
||||||
|
String currentActivityName=currentActivity.getLocalClassName();
|
||||||
|
if (messageType==MSG_SYSTEM){
|
||||||
|
if (content.equals("offline")){
|
||||||
|
offline();
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
//如果当前活动为聊天活动则进行数据展示
|
||||||
|
if (currentActivityName.equals("activity.ChatActivity")){
|
||||||
|
updateChatUi(newMessage);
|
||||||
|
//如果当前活动为聊天列表界面,需要对指定的元素进行局部更新,如果没有该用户在聊天列表中,需要添加该好友项
|
||||||
|
// }else if (currentActivityName.equals("activity.ChatListActivity")){
|
||||||
|
// newMessage.save();
|
||||||
|
// updateChatListUi();
|
||||||
|
}else{
|
||||||
|
newMessage.save();
|
||||||
|
notification();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/****/
|
||||||
|
}catch (Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void offline(){
|
||||||
|
currentActivity.runOnUiThread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
Intent intent=new Intent("FORCE_OFFLINE");
|
||||||
|
intent.putExtra("warringMsg","您的账号异地登录,您将被强制下线");
|
||||||
|
currentActivity.sendBroadcast(intent);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateChatUi(final Message newMessage){
|
||||||
|
currentActivity.runOnUiThread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
//TODO
|
||||||
|
// chatActivity=(ChatActivity) currentActivity;
|
||||||
|
// //如果当前正在聊天的人为消息的发送者,则进行展示,并存为已读消息
|
||||||
|
// if (chatActivity.friendNetId==newMessage.getSenderNetId()){
|
||||||
|
// chatActivity.addMsg(newMessage,true);
|
||||||
|
// }
|
||||||
|
// //如果当前正在聊天的人不是消息发送者,则更新一个未读标记
|
||||||
|
// else {
|
||||||
|
// chatActivity.hasNewMsgView.setVisibility(View.VISIBLE);
|
||||||
|
// newMessage.setRead(false);
|
||||||
|
// newMessage.save();
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// public void updateChatListUi(){
|
||||||
|
// currentActivity.runOnUiThread(new Runnable() {
|
||||||
|
// @Override
|
||||||
|
// public void run() {
|
||||||
|
// privateMsgFragment =(ChatListActivity) currentActivity;
|
||||||
|
// chatListActivity.updateUi();
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
public void notification(){
|
||||||
|
currentActivity.runOnUiThread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
Toast.makeText(currentActivity,"您有新的消息,请查收",Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClose(int code, String reason, boolean remote) {
|
||||||
|
Log.d("WS","链接关闭");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onError(Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
//好友数据同步
|
||||||
|
private void getNewFriends(final int friendNetId,final int ownerNetId){
|
||||||
|
new Thread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
String url = BaseActivity.SERVER_URL + "/user/getNewFriendById/"+ownerNetId+"/"+friendNetId;
|
||||||
|
String jsonStr= OkHttpUtil.synGet(url);
|
||||||
|
getNewFriendsResponse(jsonStr);
|
||||||
|
}catch (Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
|
}
|
||||||
|
private void getNewFriendsResponse(final String jsonStr){
|
||||||
|
currentActivity.runOnUiThread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
//TODO
|
||||||
|
// Map jsonMap= JSON.parseObject(jsonStr);
|
||||||
|
// final String message=(String) jsonMap.get("message");
|
||||||
|
// if (message.equals("success")){
|
||||||
|
// JSONObject newFriend=(JSONObject) jsonMap.get("data");
|
||||||
|
// int netId=newFriend.getIntValue("id");
|
||||||
|
// int ownerNetId=BaseActivity.owner.getNetId();
|
||||||
|
// String name=newFriend.getString("name");
|
||||||
|
// String url=BaseActivity.SERVER_URL+newFriend.getString("imagePath");
|
||||||
|
// String username=newFriend.getString("username");
|
||||||
|
// Friend friend=new Friend(netId,username,name,url,ownerNetId);
|
||||||
|
// friend.save();
|
||||||
|
// Toast.makeText(currentActivity,"你有新的好友与消息",Toast.LENGTH_SHORT).show();
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<network-security-config>
|
||||||
|
<base-config cleartextTrafficPermitted="true" />
|
||||||
|
</network-security-config>
|
Loading…
Reference in new issue