1项目中接口需要使用socket网络请求,大概有十几个接口。之前用过rxjava简单封装过些简单的http请求的接口,
现在也想按照那种思维模式老封装一下。总体思路是发送数据时传一个bean过去,接收时直接返回已经解析好的
bean,用面向对象的方法编程。如果像以前一样一个工具类中写死好多socket请求的方法,这样耦合性太强,牵一发动全身。 所以使用rxjava 2.0小小封装一下。
2:核心工具类简介
package com.socketutil;
import android.util.Log;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.Arrays;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
/**
* Created by admin on 2018/8/3.
*/
public class RxSocket {
static RxSocket rxSocket;
OutputStream outputStream = null;
Socket socket = null;
InputStream inputStream = null;
/** 读取数据超时时间 */
final int READ_TIMEOUT = 15 * 1000;
/** 连接超时时间 */
final int CONNECT_TIMEOUT = 5 * 1000;
final String IP = "218.29.74.138";
final int PORT = 11274;
final String TAG = "RxSocket-->",SUCCEED="初始化成功",TIMEOUT="连接超时",SEND_ERROR="发送数据异常";
/** 网络返回的监听 */
SocketListener observer;
public boolean isCancle = false;
private RxSocket() {
Observable.just("")
.subscribeOn(Schedulers.io())
.subscribeOn(AndroidSchedulers.mainThread())
.doOnNext(s -> initSocket(IP, PORT))
.subscribe(s -> Log.d(TAG, SUCCEED));
}
public static RxSocket getInstance() {