描述:
1 使用https进行网络访问
2 使用RxJava2+Retrofit2+okhttp网络框架
步骤:
一、
添加依赖
compile 'io.reactivex.rxjava2:rxjava:2.1.3'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'//运行在Android UIxian线程时使用 observeOn(AndroidSchedulers.mainThread())
compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.squareup.retrofit2:converter-gson:2.3.0'//addConverterFactory(GsonConverterFactory.create()) 时使用
compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'//addCallAdapterFactory(RxJava2CallAdapterFactory.create()) 时使用
二、初始化Retrofit 添加token 创建SSLSocketFactory
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.concurrent.TimeUnit;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
/**
* Created by zhangdan on 2017/9/5.
*/
public class RetrofitManager {
private static Retrofit instance;
private static OkHttpClient okHttpClient;
public static Retrofit getInstance() {
if (instance == null) {
synchronized (RetrofitManager.class) {
if (instance == null) {
instance = new Retrofit.Builder()
.baseUrl("https://172.16.163.65")
.client(getOkHttpClient())
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
}
}
}
return instance;
}
private static OkHttpClient getOkHttpClient() {
if (okHttpClient == null) {
synchronized (RetrofitManager.class) {
if (okHttpClient == null) {
okHttpClient = new OkHttpClient.Builder()
.connectTimeout(15, TimeUnit.SECONDS)
.hostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
})
.sslSocketFactory(getsslsocket())
.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request.Builder builder = chain.request().newBuilder();
builder.addHeader("token", "123");
return chain.proceed(builder.build());
}
})
.build();
}
}
}
return okHttpClient;
}
private static SSLSocketFactory getsslsocket() {
try {
SSLContext sslContext = SSLContext.getInstance("TLS");
X509TrustManager tm = new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
};
sslContext.init(null, new TrustManager[]{tm}, null);
return sslContext.getSocketFactory();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
三、创建Entity 根据返回的数据额格式创建Entity
/**
* Created by zhangdan on 2017/9/5.
*/
public class UserInfoEntity {
String status;
String message;
UserEntity data;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public UserEntity getData() {
return data;
}
public void setData(UserEntity data) {
this.data = data;
}
class UserEntity{
String code;
String name;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
四、使用
RetrofitManager.getInstance().create(GsonService.class)
.getUserInfo()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<UserInfoEntity>() {
@Override
public void accept(UserInfoEntity userInfoEntity) throws Exception {
LogUtil.e("nn", userInfoEntity.getName());
}
});
实现比较简单,还在努力学习当中,欢迎大家吐槽。。。。。