需求:
OkHttp的封装,方便使用
- 添加依赖
compile 'com.google.code.gson:gson:2.8.2'
compile 'com.squareup.okhttp3:okhttp:3.9.1'
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.9.0'
compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'
- 网络权限
<!--网络请求-->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
- 网络请求的公共参数
&source=android
Okhttp的封装 (.net文件夹中)
public class OkHttpUtils {
private static OkHttpUtils okHttpUtils;
private final OkHttpClient client;
private OkHttpUtils() {
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
client = new OkHttpClient.Builder()
.addInterceptor(new MyInterceptor())
.build();
}
public static OkHttpUtils getOkHttpUtils() {
if (okHttpUtils == null) {
synchronized (OkHttpUtils.class) {
if (okHttpUtils == null) {
okHttpUtils = new OkHttpUtils();
}
}
}
return okHttpUtils;
}
/**
* GET请求
*
* @param url
* @param callback
*/
public void doGet(String url, Callback callback) {
Request request = new Request.Builder().url(url).build();
client.newCall(request).enqueue(callback);
}
/**
* POST请求
*
* @param url
* @param params
* @param callback
*/
public void doPost(String url, Map<String, String> params, Callback callback) {
if (params == null) {
throw new RuntimeException("参数为空了");
}
FormBody.Builder builder = new FormBody.Builder();
for (Map.Entry<String, String> entry : params.entrySet()) {
builder.add(entry.getKey(), entry.getValue());
}
Log.e("OkHttpUtils", "请求地址:" + url + " 请求的参数:");
FormBody formBody = builder.build();
Request request = new Request.Builder().url(url).post(formBody).build();
client.newCall(request).enqueue(callback);
}
}
URL地址封装
public interface Api {
public static String str1 = "https://www.zhaoapi.cn/product/getProductDetail";
public static String str2 = "https://www.zhaoapi.cn/product/getCarts";
接口封装
public interface OnNetListener<T> {
public void onSuccess(T t);
public void onFailure(Exception e);
公共参数的封装
public class MyInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
if (request.method().equals("GET")) {
String url = request.url().url().toString();
url += "&source=android";
Request newRequset = request.newBuilder().url(url).build();
return chain.proceed(newRequset);
} else {
FormBody formBody = (FormBody) request.body();
FormBody.Builder builder = new FormBody.Builder();
for (int i = 0; i < formBody.size(); i++) {
builder.add(formBody.name(i), formBody.value(i));
}
builder.add("source", "android");
FormBody newFormBody = builder.build();
Request newRequest = request.newBuilder().url(request.url().url().toString()).post(newFormBody).build();
return chain.proceed(newRequest);
}
}