最近项目完事,空闲之时给大家介绍下最近自己封装简单的AndroidSocket库给大家,方便其他同学在项目中使用,如有错误之处还请各位大神指教,话不多说直接上代码与介绍:
一、添加引用到你的项目:
Androidstudio Gradle引用:
compile 'com.virtue.androidsocket:AndroidSocket:1.0.5'
如果用Eclipse的同学直接导入库,导入方法就不在这说了,不知道的同学可以百度的。
二、配置说明
1.在项目中建一个service服务,用于socket通讯,而且这个服务在你打开应用时就启动它:
startService(new Intent(this, MySocketService.class));
2.在服务中配置连接服务器参数,这里的提供两种配置方式,一种是以结束符为一段完整数据接收的方式,;另一种是以固定长度方式接收。根据自己服务器去配置一种相应的方式。
Socketer.getInstance(getApplicationContext()).bindServerConnect("123.57.56.201", 20083)
.setTimeout(15).setEncode("UTF_8") //配置超时时间与编码
.setReceiveType(ReceiveType.SEPARATION_SIGN) //配置接收形式以分隔符接收
.setEndCharSequence("\r\n") //"\r\n"配置结束符
.setSendMaxByteLength(1500).start(); //配置一次性最多发送的消息字节数
或者:
Socketer.getInstance(getApplicationContext()).bindServerConnect("123.57.56.201", 20083)
.setTimeout(15).setEncode("UTF_8")
.setReceiveType(ReceiveType.FIXED_LENGTH) //配置接收形式以分隔符接收
.setMsgLength(2048) //配置固定长度大小接收
.setSendMaxByteLength(1500).start(); //配置一次性最多发送的消息字节数
三、请求与接收
请求与接收这里有两种接收方式,推荐第二种方式,因为大家的项目数据各种各样,你们自己解析最好,第一种方式对于可以说是赖人模式。下面详细给大家介绍这两种:
No1.自动解析包含服务器主推通知和请求响应两种数据
如果服务有主推通知消息给你,你需要在接收的地方注册以下广播:
//Set parse to Auto 设置为自动解析放方式
Socketer.getInstance(MainActivity.this).setParseMode(ParseMode.AUTO_PARSE);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(BroadCastType.SERVER_NOTICE);
MessageReceiver dataReceiver = new MessageReceiver();
registerReceiver(dataReceiver, intentFilter);
广播接收如下:
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction() == BroadCastType.SERVER_NOTICE) {
String dataStr = intent.getStringExtra(BroadCastType.SERVER_NOTICE_DATA);
Log.i(TAG, "Data given to me by the server:" + dataStr);
}
}
发送请求到服务器
Socketer.getInstance(MainActivity.this).sendStrData(reDataStr, "\"seq\":100", new ResponseListener() {
@Override
public void onSuccess(final String data) {
Log.i("Test server data", "callback data:" + data);
runOnUiThread(new Runnable() {
@Override
public void run() {
tvResponse.setText(data);
}
});
}
@Override
public void onFail(int failCode) {
Log.e("Test server data", "callback error:" + failCode);
}
});
其中参数1代表是请求的数据,参数2代表是返回数据中的唯一标识,可以是请求ID、token值或者能标识唯一性的字符串,这个参数是服务器每条返回数据的唯一标示,一定不要错哦。
No2.手动解析没有服务器主推通知和请求响应之分,服务器所有发过来的数据都由你自定义解析,根据你们项目的数据结构去解析。
//Set parse to Manual 设置为手动解析方式
Socketer.getInstance(MainActivity.this).setParseMode(ParseMode.MANUALLY_PARSE);
设置接收监听器,解析数据:
Socketer.getInstance(MainActivity.this).setOnReceiveListener(new OnReceiveListener() {
@Override
public void onConnected(Socketer socketer) {
}
@Override
public void onDisconnected(Socketer socketer) {
}
@Override
public void onResponse(final String data) {
runOnUiThread(new Runnable() {
@Override
public void run() {
//response data
tvResponse.setTextColor(getResources().getColor(R.color.blue));
tvResponse.setText(data);
//... your parse ...
}
});
}
});
发送请求数据:
Socketer.getInstance(MainActivity.this).sendStrData(reDataStr); //request
欢迎大家关注交流如果问题可以在github中提交你的问题。
参考github地址:https://github.com/Zvirtuey/AndroidSocket