开发者们现在都在使用OkHttp了,在很多借鉴之后,现在也来封装属于自己的网络请求框架。
该框架使用Retrofit,OkHttp,RxJava,RxAndroid,Gson一起封装。
客户端请求一般分为如下几步:
通过API向服务器发送请求------->服务器收到请求然后响应(这里有两种情况,一是请求成功返回Json数据,二是去请求失败返回失败状态)---------->客服端拿到服务器返回状态解析数据或者请求失败提示用户
根据以上思路来看代码:
import android.os.Build;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
/**
* Created by hedong on 2016/4/19.
*/
public class LocalService {
public static final String API_BASE_URL = "http://www.tngou.net/api/info/";//主Api路径
private static final LocalApi service = getRetrofit().create(LocalApi.class);
private static Retrofit mRetrofit;
private static OkHttpClient mOkHttpClient;
public final static int CONNECT_TIMEOUT = 60; //设置连接超时时间
public final static int READ_TIMEOUT = 60; //设置读取超时时间
public final static int WRITE_TIMEOUT = 60; //设置写的超时时间
private static OkHttpClient genericClient() {
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.HEADERS);
OkHttpClient httpClient = new OkHttpClient.Builder()
.addNetworkInterceptor(interceptor)
.retryOnConnectionFailure(true)
.readTimeout(READ_TIMEOUT, TimeUnit.SECONDS)//设置读取超时时间
.writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS)//设置写的超时时间
.connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS)//设置连接超时时间
.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request()
.newBuilder()
.addHeader("source-terminal", "Android") //操作系统名称(注:ios、android)