版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fengyeNom1/article/details/86677337
项目中常常会用到网络请求的工具类,大多数其实都是可以自定义的,如果嫌麻烦的话,也可以直接使用我的,如有错误还请见谅!
/**
* Retrofit工具类
* Created by mazhanzhu on 2019/1/28.
*/
public class RetrofitUtils {
/**
* 缓存文件
*/
private static final String RESPONSE_CACHE_FILE = "responseCache";
/**
* 缓存大小
*/
private static final long RESPONSE_CACHE_SIZE = 10 * 1024 * 1024L;
/**
* 连接超时时间
*/
private static final long HTTP_CONNECT_TIMEOUT = 10L;
/**
* 读取超时时间
*/
private static final long HTTP_READ_TIMEOUT = 30L;
/**
* 写入超时时间
*/
private static final long HTTP_WRITE_TIMEOUT = 10L;
private static SimpleArrayMap<String, List<Cookie>> map = new SimpleArrayMap<>();
private static String baseUrl;
private static NetInterface mPortraitService;
public static NetInterface getUrls() {
//-----------------------------------配置网络请求日志-----------------------------------------------------------
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
@Override
public void log(String message) {
//完整的日志打印标识
Log.e("=====log======", message);
}
});
//日志打印的最高级别,可以输出所有的请求返回的信息包括各种请求格式!
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
//-----------------------------------配置网络请求日志------------------------------------------------------------
//-----------------------------------配置网络请求参数------------------------------------------------------------
File cacheFile = new File(JLApp.getContext().getCacheDir(), RESPONSE_CACHE_FILE);
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(BuildConfig.DEBUG ? HttpLoggingInterceptor.Level.BODY : HttpLoggingInterceptor.Level.NONE);
OkHttpClient.Builder builder = new OkHttpClient.Builder()
.cache(new Cache(cacheFile, RESPONSE_CACHE_SIZE))
.connectTimeout(HTTP_CONNECT_TIMEOUT, TimeUnit.SECONDS)
.writeTimeout(HTTP_WRITE_TIMEOUT, TimeUnit.SECONDS)
.readTimeout(HTTP_READ_TIMEOUT, TimeUnit.SECONDS)
.cookieJar(new CookieJar() {
@Override
public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
map.put(url.toString(), cookies);
}
@Override
public List<Cookie> loadForRequest(HttpUrl url) {
List<Cookie> cookies = map.get(url.toString());
return cookies != null ? cookies : new ArrayList<Cookie>();
}
})
.addInterceptor(loggingInterceptor)
.addInterceptor(logging);
OkHttpClient client = builder.build();
//-----------------------------------配置网络请求参数------------------------------------------------------------
//-----------------------------------配置Retrofit----------------------------------------------------------------
//BaseUrl 一般网络请求地址里面,总会有一样得前缀,就像是
//http://192.168.20.241:11008****这就是那个基地址,基地址+NetInterface类里面的
//post()的地址就是一个完整的网络请求地址,这点要注意
baseUrl = "http://192.168.20.241:11008/";
Retrofit mRetrofit = new Retrofit.Builder()
//添加网络请求的基地址
.baseUrl(baseUrl)
//增加返回值为String的支持
.addConverterFactory(ScalarsConverterFactory.create())
//添加转换工厂,用于解析json并转化为javaBean
.addConverterFactory(GsonConverterFactory.create())
//设置参数
//.client(DataLayer.getClient())
.client(client)
.build();
//NetInterface为接口定义类
mPortraitService = mRetrofit.create(NetInterface.class);
return mPortraitService;
//-----------------------------------配置Retrofit----------------------------------------------------------------
}
}
这是NetInterface类,就是retrofit的辅助接口类
/**
* Created by mazhanzhu on 2019/1/28.
*/
public interface NetInterface {
/**
* 车辆核查历史
*/
@POST("/InfoCheck_Srv_esb/oc")
@FormUrlEncoded
Call<String> getCheckCarHistroy(@FieldMap Map<String, String> map);
}
在需要的网络请求的地方这样写
Map<String, String> map = new HashMap<String, String>();
map.put("CPH", car_num);
map.put("staffCode", Hawk.get(Constant.STAFF_ID) + "");
map.put("PAGENUM", page + "");
//合起来之后完整的网络请求地址就是 http://192.168.20.241:11008/InfoCheck_Srv_esb/oc
RetrofitUtils_Ma.getUrls().getCheckCarHistroy(map).enqueue(new Callback<String>() {
@Override
public void onResponse(Call<String> call, Response<String> response) {
}
@Override
public void onFailure(Call<String> call, Throwable t) {
}
});
搞定!