request请求
这个提交包含在:
父节点
0985b44740
当前提交
7eb33aae86
@ -20,13 +20,6 @@ android {
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
debug {
|
||||
// 开启混淆
|
||||
minifyEnabled false
|
||||
// Zipalign压缩优化
|
||||
zipAlignEnabled true
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
release {
|
||||
// 开启混淆
|
||||
minifyEnabled true
|
||||
@ -43,7 +36,7 @@ android {
|
||||
|
||||
dependencies {
|
||||
|
||||
implementation 'androidx.appcompat:appcompat:1.4.1'
|
||||
implementation 'androidx.appcompat:appcompat:1.4.2'
|
||||
implementation 'com.google.android.material:material:1.5.0'
|
||||
testImplementation 'junit:junit:4.13.2'
|
||||
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
|
||||
|
||||
@ -1,7 +1,9 @@
|
||||
package cn.org.bjca.trust.android.lib.im;
|
||||
|
||||
import cn.org.bjca.trust.android.lib.im.kit.SdkGroupInterface;
|
||||
import cn.org.bjca.trust.android.lib.im.kit.SdkInterface;
|
||||
import cn.org.bjca.trust.android.lib.im.kit.SdkMsgInterface;
|
||||
import cn.org.bjca.trust.android.lib.im.manager.SZYXGroupManager;
|
||||
import cn.org.bjca.trust.android.lib.im.manager.SZYXImManager;
|
||||
import cn.org.bjca.trust.android.lib.im.manager.SZYXMessageManager;
|
||||
|
||||
@ -15,6 +17,10 @@ public class SZYXImSdk {
|
||||
static final SdkMsgInterface instance = new SZYXMessageManager();
|
||||
}
|
||||
|
||||
private static final class SdkGroupInterfaceHolder {
|
||||
static final SdkGroupInterface instance = new SZYXGroupManager();
|
||||
}
|
||||
|
||||
public static SdkInterface getInstance() {
|
||||
return SdkInterfaceHolder.instance;
|
||||
|
||||
@ -24,4 +30,9 @@ public class SZYXImSdk {
|
||||
return SdkMsgInterfaceHolder.instance;
|
||||
|
||||
}
|
||||
|
||||
public static SdkGroupInterface getGroupManager() {
|
||||
return SdkGroupInterfaceHolder.instance;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,270 @@
|
||||
package cn.org.bjca.trust.android.lib.im.common;
|
||||
|
||||
import android.content.Context;
|
||||
import android.text.Editable;
|
||||
import android.text.TextUtils;
|
||||
import android.text.TextWatcher;
|
||||
import android.view.View;
|
||||
import android.widget.EditText;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.google.android.material.snackbar.Snackbar;
|
||||
import com.google.android.material.textfield.TextInputLayout;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class ToolsHelper {
|
||||
|
||||
public static boolean isNull(Object obj) {
|
||||
if (null == obj)
|
||||
return true;
|
||||
String str = obj.toString();
|
||||
if (str.isEmpty())
|
||||
return true;
|
||||
return str.equalsIgnoreCase("null");
|
||||
}
|
||||
|
||||
public static Long toLong(Object obj) {
|
||||
if (isNull(obj))
|
||||
return 0L;
|
||||
try {
|
||||
return Long.parseLong(obj.toString());
|
||||
} catch (Exception e) {
|
||||
return 0L;
|
||||
}
|
||||
}
|
||||
|
||||
public static int toInt(Object obj) {
|
||||
if (isNull(obj))
|
||||
return 0;
|
||||
try {
|
||||
return Integer.parseInt(obj.toString());
|
||||
} catch (Exception e) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
public static Double toDouble(Object obj) {
|
||||
if (isNull(obj))
|
||||
return 0.0;
|
||||
try {
|
||||
return Double.parseDouble(obj.toString());
|
||||
} catch (Exception e) {
|
||||
return 0D;
|
||||
}
|
||||
}
|
||||
|
||||
public static String toString(Object obj) {
|
||||
if (isNull(obj))
|
||||
return "";
|
||||
return obj.toString();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 格式化json字符串
|
||||
*
|
||||
* @param jsonStr 需要格式化的json串
|
||||
* @return 格式化后的json串
|
||||
*/
|
||||
public static String formatJson(String jsonStr) {
|
||||
if (null == jsonStr || "".equals(jsonStr)) return "";
|
||||
StringBuilder sb = new StringBuilder();
|
||||
char last = '\0';
|
||||
char current = '\0';
|
||||
int indent = 0;
|
||||
for (int i = 0; i < jsonStr.length(); i++) {
|
||||
last = current;
|
||||
current = jsonStr.charAt(i);
|
||||
//遇到{ [换行,且下一行缩进
|
||||
switch (current) {
|
||||
case '{':
|
||||
case '[':
|
||||
sb.append(current);
|
||||
sb.append('\n');
|
||||
indent++;
|
||||
addIndentBlank(sb, indent);
|
||||
break;
|
||||
//遇到} ]换行,当前行缩进
|
||||
case '}':
|
||||
case ']':
|
||||
sb.append('\n');
|
||||
indent--;
|
||||
addIndentBlank(sb, indent);
|
||||
sb.append(current);
|
||||
break;
|
||||
//遇到,换行
|
||||
case ',':
|
||||
sb.append(current);
|
||||
if (last != '\\') {
|
||||
sb.append('\n');
|
||||
addIndentBlank(sb, indent);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
sb.append(current);
|
||||
}
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加space
|
||||
*/
|
||||
private static void addIndentBlank(StringBuilder sb, int indent) {
|
||||
for (int i = 0; i < indent; i++) {
|
||||
sb.append('\t');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* http 请求数据返回 json 中中文字符为 unicode 编码转汉字转码
|
||||
*
|
||||
* @param theString
|
||||
* @return 转化后的结果.
|
||||
*/
|
||||
public static String decodeUnicode(String theString) {
|
||||
char aChar;
|
||||
int len = theString.length();
|
||||
StringBuilder outBuffer = new StringBuilder(len);
|
||||
for (int x = 0; x < len; ) {
|
||||
aChar = theString.charAt(x++);
|
||||
if (aChar == '\\') {
|
||||
aChar = theString.charAt(x++);
|
||||
if (aChar == 'u') {
|
||||
int value = 0;
|
||||
for (int i = 0; i < 4; i++) {
|
||||
aChar = theString.charAt(x++);
|
||||
switch (aChar) {
|
||||
case '0':
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
case '6':
|
||||
case '7':
|
||||
case '8':
|
||||
case '9':
|
||||
value = (value << 4) + aChar - '0';
|
||||
break;
|
||||
case 'a':
|
||||
case 'b':
|
||||
case 'c':
|
||||
case 'd':
|
||||
case 'e':
|
||||
case 'f':
|
||||
value = (value << 4) + 10 + aChar - 'a';
|
||||
break;
|
||||
case 'A':
|
||||
case 'B':
|
||||
case 'C':
|
||||
case 'D':
|
||||
case 'E':
|
||||
case 'F':
|
||||
value = (value << 4) + 10 + aChar - 'A';
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException(
|
||||
"Malformed \\uxxxx encoding.");
|
||||
}
|
||||
|
||||
}
|
||||
outBuffer.append((char) value);
|
||||
} else {
|
||||
if (aChar == 't') {
|
||||
aChar = '\t';
|
||||
} else if (aChar != 'r') {
|
||||
if (aChar == 'n') {
|
||||
aChar = '\n';
|
||||
} else if (aChar == 'f') {
|
||||
aChar = '\f';
|
||||
}
|
||||
} else {
|
||||
aChar = '\r';
|
||||
}
|
||||
outBuffer.append(aChar);
|
||||
}
|
||||
} else {
|
||||
outBuffer.append(aChar);
|
||||
}
|
||||
}
|
||||
return outBuffer.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* 弹出提示信息 感觉比Toast好看点 不过Toast不需要依赖view
|
||||
*
|
||||
* @param view 绑定一个view才能展示
|
||||
* @param content 需要展示的内容
|
||||
*/
|
||||
public static void snack(View view, CharSequence content) {
|
||||
Snackbar.make(view, content, Snackbar.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
public static void showMessage(Context context, CharSequence content) {
|
||||
Toast.makeText(context, content, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
/**
|
||||
* EditText绑定TextInputLayout,处理一下
|
||||
*
|
||||
* @param editText editText
|
||||
* @param textInputLayout textInputLayout
|
||||
*/
|
||||
public static void addTextChangedListener(EditText editText, TextInputLayout textInputLayout) {
|
||||
editText.addTextChangedListener(new TextWatcher() {
|
||||
@Override
|
||||
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterTextChanged(Editable s) {
|
||||
if (!TextUtils.isEmpty(textInputLayout.getError())) {//输入的时候不提示错误信息
|
||||
textInputLayout.setErrorEnabled(true);
|
||||
textInputLayout.setError("");
|
||||
textInputLayout.setErrorEnabled(false);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 使用 TextInputLayout 提示错误信息
|
||||
*
|
||||
* @param textInputLayout TextInputLayout
|
||||
* @param msg 错判的内容
|
||||
*/
|
||||
public static void showError(TextInputLayout textInputLayout, String msg) {
|
||||
textInputLayout.setErrorEnabled(true);
|
||||
textInputLayout.setError(msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* 将Object对象里面的属性和值转化成Map对象
|
||||
*
|
||||
* @param obj
|
||||
* @return
|
||||
* @throws IllegalAccessException
|
||||
*/
|
||||
public static <T> Map<String, T> objectToMap(Object obj) throws IllegalAccessException {
|
||||
Map<String, T> map = new HashMap<>();
|
||||
Class<?> clazz = obj.getClass();
|
||||
for (Field field : clazz.getDeclaredFields()) {
|
||||
field.setAccessible(true);
|
||||
String fieldName = field.getName();
|
||||
T value = (T) field.get(obj);
|
||||
if (null != value)
|
||||
map.put(fieldName, value);
|
||||
}
|
||||
return map;
|
||||
}
|
||||
}
|
||||
@ -3,6 +3,7 @@ package cn.org.bjca.trust.android.lib.im.im.bean;
|
||||
import java.util.UUID;
|
||||
|
||||
import cn.org.bjca.trust.android.lib.im.cfg.Constant;
|
||||
import cn.org.bjca.trust.android.lib.im.enums.OsType;
|
||||
import cn.org.bjca.trust.android.lib.im.enums.PacketType;
|
||||
|
||||
public abstract class PacketMessage {
|
||||
@ -15,6 +16,7 @@ public abstract class PacketMessage {
|
||||
private String appId;
|
||||
private String userName;
|
||||
private String token;
|
||||
private String osType;
|
||||
|
||||
public PacketMessage(PacketType packetType) {
|
||||
this.packetType = packetType;
|
||||
@ -22,6 +24,15 @@ public abstract class PacketMessage {
|
||||
this.appId = Constant.getSdkAppID();
|
||||
this.userName = Constant.getUserId();
|
||||
this.token = Constant.getToken();
|
||||
this.osType = String.valueOf(OsType.ANDROID.type());
|
||||
}
|
||||
|
||||
public String getOsType() {
|
||||
return osType;
|
||||
}
|
||||
|
||||
public void setOsType(String osType) {
|
||||
this.osType = osType;
|
||||
}
|
||||
|
||||
public String getMsgId() {
|
||||
|
||||
@ -0,0 +1,9 @@
|
||||
package cn.org.bjca.trust.android.lib.im.im.kit;
|
||||
|
||||
import cn.org.bjca.trust.android.lib.im.im.msg.ResultMessage;
|
||||
|
||||
public interface RequestImCallback {
|
||||
void success(ResultMessage message);
|
||||
|
||||
void failed(int code, String error);
|
||||
}
|
||||
@ -23,17 +23,22 @@ import java.util.Map;
|
||||
|
||||
import cn.org.bjca.trust.android.lib.im.cfg.Constant;
|
||||
import cn.org.bjca.trust.android.lib.im.common.DeviceHelper;
|
||||
import cn.org.bjca.trust.android.lib.im.common.ToolsHelper;
|
||||
import cn.org.bjca.trust.android.lib.im.common.json.GsonImplHelp;
|
||||
import cn.org.bjca.trust.android.lib.im.enums.MsgType;
|
||||
import cn.org.bjca.trust.android.lib.im.enums.PacketType;
|
||||
import cn.org.bjca.trust.android.lib.im.http.HttpResult;
|
||||
import cn.org.bjca.trust.android.lib.im.im.bean.PacketMessage;
|
||||
import cn.org.bjca.trust.android.lib.im.kit.IMInterface;
|
||||
import cn.org.bjca.trust.android.lib.im.im.kit.RequestImCallback;
|
||||
import cn.org.bjca.trust.android.lib.im.im.msg.ConnectMessage;
|
||||
import cn.org.bjca.trust.android.lib.im.im.msg.ConnectedMessage;
|
||||
import cn.org.bjca.trust.android.lib.im.im.msg.message.SZYXMessage;
|
||||
import cn.org.bjca.trust.android.lib.im.im.msg.RequestMessage;
|
||||
import cn.org.bjca.trust.android.lib.im.im.msg.ResultMessage;
|
||||
import cn.org.bjca.trust.android.lib.im.im.msg.SendAckMessage;
|
||||
import cn.org.bjca.trust.android.lib.im.im.msg.message.SZYXMessage;
|
||||
import cn.org.bjca.trust.android.lib.im.im.msg.message.SZYXTextMessage;
|
||||
import cn.org.bjca.trust.android.lib.im.im.opt.ImConnectOptions;
|
||||
import cn.org.bjca.trust.android.lib.im.kit.IMInterface;
|
||||
import cn.org.bjca.trust.android.lib.im.kit.IMSDKCallback;
|
||||
import cn.org.bjca.trust.android.lib.im.kit.IMSDKListener;
|
||||
import cn.org.bjca.trust.android.lib.im.kit.MsgListener;
|
||||
@ -70,6 +75,7 @@ public class ImManager implements IMInterface {
|
||||
|
||||
private final List<MsgListener> msgListeners = new ArrayList<>();
|
||||
private final Map<String, IMSDKCallback> msgListenerMap = new HashMap<>();
|
||||
private final Map<String, RequestImCallback> requestMap = new HashMap<>();
|
||||
|
||||
|
||||
@Override
|
||||
@ -168,6 +174,16 @@ public class ImManager implements IMInterface {
|
||||
m.what = 10002;
|
||||
handler.sendMessage(m);
|
||||
|
||||
}
|
||||
// 接口请求应答
|
||||
else if (topic.equals(topic_result)) {
|
||||
ResultMessage resultMessage = GsonImplHelp.get().toObject(msg, ResultMessage.class);
|
||||
|
||||
Message m = new Message();
|
||||
m.obj = resultMessage;
|
||||
m.what = 10004;
|
||||
handler.sendMessage(m);
|
||||
|
||||
}
|
||||
// 新消息送达
|
||||
else if (topic.equals(topic_arrive)) {
|
||||
@ -262,9 +278,36 @@ public class ImManager implements IMInterface {
|
||||
|
||||
@Override
|
||||
public void sendSZYXMessage(SZYXMessage message, IMSDKCallback callback) {
|
||||
if (ToolsHelper.isNull(message.getToClientId())) {
|
||||
if (null != callback) callback.failed(202, "没有消息接收者[toClientId]");
|
||||
for (MsgListener listener : msgListeners) {
|
||||
listener.statusChange(message.getMsgId(), -1);
|
||||
}
|
||||
} else
|
||||
sendPacketMessage(PacketType.SEND, message, callback);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void request(RequestMessage message, RequestImCallback callback) {
|
||||
this.sendPacketMessage(PacketType.REQUEST, message, new IMSDKCallback() {
|
||||
@Override
|
||||
public void success() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void failed(int code, String error) {
|
||||
callback.failed(4001, error);
|
||||
}
|
||||
});
|
||||
|
||||
requestMap.put(message.getMsgId(), callback);
|
||||
Message m = new Message();
|
||||
m.obj = message.getMsgId();
|
||||
m.what = 10003;
|
||||
handler.sendMessageDelayed(m, 600);
|
||||
}
|
||||
|
||||
private void sendConnectMsg() {
|
||||
ConnectMessage message = new ConnectMessage(DeviceHelper.getDevice());
|
||||
sendPacketMessage(PacketType.CONNECT, message, null);
|
||||
@ -347,6 +390,23 @@ public class ImManager implements IMInterface {
|
||||
msgListenerMap.remove(msgId1);
|
||||
}
|
||||
break;
|
||||
case 10003:
|
||||
String msgId3 = (String) msg.obj;
|
||||
RequestImCallback imCallback = requestMap.get(msgId3);
|
||||
if (null != imCallback) {
|
||||
imCallback.failed(4001, "发送超时");
|
||||
requestMap.remove(msgId3);
|
||||
}
|
||||
break;
|
||||
case 10004:
|
||||
ResultMessage resultMessage = (ResultMessage) msg.obj;
|
||||
String msgId4 = resultMessage.getAckId();
|
||||
RequestImCallback callback4 = requestMap.get(msgId4);
|
||||
if (null != callback4) {
|
||||
callback4.success(resultMessage);
|
||||
requestMap.remove(msgId4);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@ -0,0 +1,40 @@
|
||||
package cn.org.bjca.trust.android.lib.im.im.msg;
|
||||
|
||||
import cn.org.bjca.trust.android.lib.im.enums.PacketType;
|
||||
import cn.org.bjca.trust.android.lib.im.im.bean.PacketMessage;
|
||||
|
||||
public class RequestMessage extends PacketMessage {
|
||||
public RequestMessage() {
|
||||
super(PacketType.REQUEST);
|
||||
}
|
||||
|
||||
private String path;
|
||||
private String body;
|
||||
|
||||
public RequestMessage(String path) {
|
||||
super(PacketType.REQUEST);
|
||||
this.path = path;
|
||||
}
|
||||
|
||||
public RequestMessage(String path, String body) {
|
||||
super(PacketType.REQUEST);
|
||||
this.path = path;
|
||||
this.body = body;
|
||||
}
|
||||
|
||||
public String getPath() {
|
||||
return path;
|
||||
}
|
||||
|
||||
public void setPath(String path) {
|
||||
this.path = path;
|
||||
}
|
||||
|
||||
public String getBody() {
|
||||
return body;
|
||||
}
|
||||
|
||||
public void setBody(String body) {
|
||||
this.body = body;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,48 @@
|
||||
package cn.org.bjca.trust.android.lib.im.im.msg;
|
||||
|
||||
|
||||
import cn.org.bjca.trust.android.lib.im.enums.PacketType;
|
||||
import cn.org.bjca.trust.android.lib.im.im.bean.PacketMessage;
|
||||
|
||||
public class ResultMessage extends PacketMessage {
|
||||
public ResultMessage() {
|
||||
super(PacketType.RESULT);
|
||||
}
|
||||
|
||||
private String path;
|
||||
private String body;
|
||||
private String ackId;
|
||||
|
||||
public String getPath() {
|
||||
return path;
|
||||
}
|
||||
|
||||
public void setPath(String path) {
|
||||
this.path = path;
|
||||
}
|
||||
|
||||
public String getBody() {
|
||||
return body;
|
||||
}
|
||||
|
||||
public void setBody(String body) {
|
||||
this.body = body;
|
||||
}
|
||||
|
||||
public String getAckId() {
|
||||
return ackId;
|
||||
}
|
||||
|
||||
public void setAckId(String ackId) {
|
||||
this.ackId = ackId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "ResultMessage{" +
|
||||
"path='" + path + '\'' +
|
||||
", body='" + body + '\'' +
|
||||
", ackId='" + ackId + '\'' +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
@ -1,11 +1,10 @@
|
||||
package cn.org.bjca.trust.android.lib.im.kit;
|
||||
|
||||
import cn.org.bjca.trust.android.lib.im.enums.MsgType;
|
||||
import cn.org.bjca.trust.android.lib.im.im.kit.RequestImCallback;
|
||||
import cn.org.bjca.trust.android.lib.im.im.msg.RequestMessage;
|
||||
import cn.org.bjca.trust.android.lib.im.im.msg.message.SZYXMessage;
|
||||
import cn.org.bjca.trust.android.lib.im.im.opt.ImConnectOptions;
|
||||
import cn.org.bjca.trust.android.lib.im.kit.IMSDKCallback;
|
||||
import cn.org.bjca.trust.android.lib.im.kit.IMSDKListener;
|
||||
import cn.org.bjca.trust.android.lib.im.kit.MsgListener;
|
||||
|
||||
public interface IMInterface {
|
||||
void addMsgListener(MsgListener listener);
|
||||
@ -26,6 +25,8 @@ public interface IMInterface {
|
||||
|
||||
void sendSZYXMessage(SZYXMessage message, IMSDKCallback callback);
|
||||
|
||||
<T> void request(RequestMessage message, RequestImCallback callback);
|
||||
|
||||
SZYXMessage createMsg(MsgType msgType, String toUserId, boolean isGroup, Object message, String describe);
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,15 @@
|
||||
package cn.org.bjca.trust.android.lib.im.kit;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface SdkGroupInterface {
|
||||
|
||||
|
||||
void create(List<String> userList, IMSDKCallback callback);
|
||||
|
||||
void create(String groupName, List<String> userList, IMSDKCallback callback);
|
||||
|
||||
void create(String groupName, List<String> userList, String faceUrl, IMSDKCallback callback);
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,80 @@
|
||||
package cn.org.bjca.trust.android.lib.im.manager;
|
||||
|
||||
import static cn.org.bjca.trust.android.lib.im.request.RequestConstant.Group_create_v1;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.os.Message;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import cn.org.bjca.trust.android.lib.im.http.HttpManage;
|
||||
import cn.org.bjca.trust.android.lib.im.http.HttpResult;
|
||||
import cn.org.bjca.trust.android.lib.im.im.msg.SendAckMessage;
|
||||
import cn.org.bjca.trust.android.lib.im.kit.IMSDKCallback;
|
||||
import cn.org.bjca.trust.android.lib.im.kit.MsgListener;
|
||||
import cn.org.bjca.trust.android.lib.im.kit.SdkGroupInterface;
|
||||
import cn.org.bjca.trust.android.lib.im.repository.Service;
|
||||
import cn.org.bjca.trust.android.lib.im.repository.group.GroupCreateData;
|
||||
import cn.org.bjca.trust.android.lib.im.request.RequestCallback;
|
||||
import cn.org.bjca.trust.android.lib.im.request.RequestHelper;
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.disposables.Disposable;
|
||||
import io.reactivex.schedulers.Schedulers;
|
||||
|
||||
public class SZYXGroupManager implements SdkGroupInterface {
|
||||
|
||||
|
||||
@Override
|
||||
public void create(List<String> userList, IMSDKCallback callback) {
|
||||
this.create(null, userList, null, callback);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void create(String groupName, List<String> userList, IMSDKCallback callback) {
|
||||
this.create(groupName, userList, null, callback);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void create(String groupName, List<String> userList, String faceUrl, IMSDKCallback callback) {
|
||||
if (null == userList || userList.size() < 2) {
|
||||
if (null != callback) callback.failed(2001, "群成员需要大于一个");
|
||||
return;
|
||||
}
|
||||
GroupCreateData data = new GroupCreateData(groupName, faceUrl, userList);
|
||||
RequestHelper.getInstance().request(Group_create_v1, data, new RequestCallback<String>() {
|
||||
|
||||
@Override
|
||||
public void success(HttpResult<String> result) {
|
||||
if (null != callback) callback.success();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void failed(int code, String error) {
|
||||
if (null != callback) callback.failed(code, error);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void standby(RequestCallback<String> imCallback) {
|
||||
|
||||
Disposable d = HttpManage.getApi(Service.class)
|
||||
.groupCreate(data)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(httpResult -> {
|
||||
if (httpResult.getCode() == 200) {
|
||||
imCallback.success(httpResult);
|
||||
} else
|
||||
imCallback.failed(httpResult.getCode(), httpResult.getMsg());
|
||||
}, throwable -> {
|
||||
imCallback.failed(4002, throwable.getMessage());
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
@ -4,6 +4,7 @@ import cn.org.bjca.trust.android.lib.im.bean.UserInfo;
|
||||
import cn.org.bjca.trust.android.lib.im.http.HttpResult;
|
||||
import cn.org.bjca.trust.android.lib.im.repository.bean.LoginBean;
|
||||
import cn.org.bjca.trust.android.lib.im.repository.data.LoginData;
|
||||
import cn.org.bjca.trust.android.lib.im.repository.group.GroupCreateData;
|
||||
import io.reactivex.Observable;
|
||||
import retrofit2.http.Body;
|
||||
import retrofit2.http.GET;
|
||||
@ -17,4 +18,6 @@ public interface Service {
|
||||
|
||||
@POST("user/v1/register")
|
||||
Observable<HttpResult<LoginBean>> register(@Body LoginData loginData);
|
||||
@POST("group/v1/create")
|
||||
Observable<HttpResult<String>> groupCreate(@Body GroupCreateData data);
|
||||
}
|
||||
|
||||
@ -0,0 +1,39 @@
|
||||
package cn.org.bjca.trust.android.lib.im.repository.group;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class GroupCreateData {
|
||||
private String groupName;
|
||||
private String faceUrl;
|
||||
private List<String> userIdList;
|
||||
|
||||
public GroupCreateData(String groupName, String faceUrl, List<String> userIdList) {
|
||||
this.groupName = groupName;
|
||||
this.faceUrl = faceUrl;
|
||||
this.userIdList = userIdList;
|
||||
}
|
||||
|
||||
public String getGroupName() {
|
||||
return groupName;
|
||||
}
|
||||
|
||||
public void setGroupName(String groupName) {
|
||||
this.groupName = groupName;
|
||||
}
|
||||
|
||||
public String getFaceUrl() {
|
||||
return faceUrl;
|
||||
}
|
||||
|
||||
public void setFaceUrl(String faceUrl) {
|
||||
this.faceUrl = faceUrl;
|
||||
}
|
||||
|
||||
public List<String> getUserIdList() {
|
||||
return userIdList;
|
||||
}
|
||||
|
||||
public void setUserIdList(List<String> userIdList) {
|
||||
this.userIdList = userIdList;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,12 @@
|
||||
package cn.org.bjca.trust.android.lib.im.request;
|
||||
|
||||
import cn.org.bjca.trust.android.lib.im.http.HttpResult;
|
||||
import cn.org.bjca.trust.android.lib.im.im.kit.RequestImCallback;
|
||||
|
||||
public interface RequestCallback<T> {
|
||||
void success(HttpResult<T> result);
|
||||
|
||||
void failed(int code, String error);
|
||||
|
||||
void standby(RequestCallback<T> imCallback);
|
||||
}
|
||||
@ -0,0 +1,5 @@
|
||||
package cn.org.bjca.trust.android.lib.im.request;
|
||||
|
||||
public class RequestConstant {
|
||||
public static final String Group_create_v1 = "/group/v1/create";
|
||||
}
|
||||
@ -0,0 +1,12 @@
|
||||
package cn.org.bjca.trust.android.lib.im.request;
|
||||
|
||||
public class RequestHelper {
|
||||
private static final class RequestHelperHolder {
|
||||
static final RequestInterface instance = new RequestManager();
|
||||
}
|
||||
|
||||
public static RequestInterface getInstance() {
|
||||
return RequestHelperHolder.instance;
|
||||
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,5 @@
|
||||
package cn.org.bjca.trust.android.lib.im.request;
|
||||
|
||||
public interface RequestInterface {
|
||||
<T> void request(String path, Object data, RequestCallback<T> callback);
|
||||
}
|
||||
@ -0,0 +1,55 @@
|
||||
package cn.org.bjca.trust.android.lib.im.request;
|
||||
|
||||
import cn.org.bjca.trust.android.lib.im.common.json.GsonImplHelp;
|
||||
import cn.org.bjca.trust.android.lib.im.http.HttpResult;
|
||||
import cn.org.bjca.trust.android.lib.im.im.IMHelper;
|
||||
import cn.org.bjca.trust.android.lib.im.im.kit.RequestImCallback;
|
||||
import cn.org.bjca.trust.android.lib.im.im.msg.RequestMessage;
|
||||
import cn.org.bjca.trust.android.lib.im.im.msg.ResultMessage;
|
||||
|
||||
public class RequestManager implements RequestInterface {
|
||||
|
||||
|
||||
public <T> void request(String path, Object data, RequestCallback<T> callback) {
|
||||
|
||||
RequestMessage rm = new RequestMessage(path, GsonImplHelp.get().toJson(data));
|
||||
|
||||
IMHelper.getInstance().request(rm, new RequestImCallback() {
|
||||
|
||||
@Override
|
||||
public void success(ResultMessage message) {
|
||||
HttpResult<T> h = GsonImplHelp.get().toObject(message.getBody(), HttpResult.class);
|
||||
if (h.getCode() == 200) {
|
||||
callback.success(h);
|
||||
} else {
|
||||
callback.failed(h.getCode(), h.getMsg());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void failed(int code, String error) {
|
||||
if (null != callback) {
|
||||
callback.standby(new RequestCallback<T>() {
|
||||
@Override
|
||||
public void success(HttpResult<T> result) {
|
||||
callback.success(result);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void failed(int code, String error) {
|
||||
callback.failed(code, error);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void standby(RequestCallback<T> imCallback) {
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
@ -21,6 +21,7 @@ android {
|
||||
release {
|
||||
minifyEnabled false
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
signingConfig signingConfigs.debug
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
|
||||
@ -7,11 +7,17 @@ import android.view.View;
|
||||
import com.xuqm.base.adapter.BasePagedAdapter;
|
||||
import com.xuqm.base.adapter.CommonPagedAdapter;
|
||||
import com.xuqm.base.adapter.ViewHolder;
|
||||
import com.xuqm.base.common.LogHelper;
|
||||
import com.xuqm.base.ui.BaseListActivity;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import cn.org.bjca.trust.android.imdemo.R;
|
||||
import cn.org.bjca.trust.android.imdemo.data.item.UserItem;
|
||||
import cn.org.bjca.trust.android.imdemo.vm.FriendsVM;
|
||||
import cn.org.bjca.trust.android.lib.im.SZYXImSdk;
|
||||
import cn.org.bjca.trust.android.lib.im.common.ToolsHelper;
|
||||
import cn.org.bjca.trust.android.lib.im.kit.IMSDKCallback;
|
||||
|
||||
public class FriendsActivity extends BaseListActivity<UserItem, FriendsVM> {
|
||||
@Override
|
||||
@ -19,7 +25,22 @@ public class FriendsActivity extends BaseListActivity<UserItem, FriendsVM> {
|
||||
super.initView(savedInstanceState);
|
||||
setTitleText("好友列表");
|
||||
setConfirmText("添加好友", v -> {
|
||||
SZYXImSdk.getGroupManager().create(new ArrayList<String>() {{
|
||||
add("13666666666");
|
||||
add("13811111111");
|
||||
}
|
||||
}, new IMSDKCallback() {
|
||||
@Override
|
||||
public void success() {
|
||||
ToolsHelper.showMessage(mContext, "创建成功");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void failed(int code, String error) {
|
||||
ToolsHelper.showMessage(mContext, "创建失败" + code + error);
|
||||
LogHelper.e("=====>", "创建失败" + code + error);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
正在加载...
在新工单中引用
屏蔽一个用户