第一步:导包compile 'com.squareup.okhttp3:okhttp:3.9.0'
public class HttpOkUntils {
这里涉及到了单例模式。
//单例模式创建对象
private Context context ;
private static HttpOkUntils httpOkUntils ;
private Handler handler = new Handler();
private HttpOkUntils (Context context){
this.context=context;
}
public static HttpOkUntils getHttpOkUntils(Context context){
if(httpOkUntils==null){
synchronized (HttpOkUntils.class){
if(httpOkUntils==null){
httpOkUntils = new HttpOkUntils(context);
}
}
}
return httpOkUntils ;
}
//封装的okhttp的get方法
public void okHttpGet(String url, final Class clazz, final NetClickListener netclicklister){
//加入拦截器
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.addInterceptor(interceptor);
builder.addNetworkInterceptor(networkinterceptor);
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(url)
.get()
//缓存
.cacheControl(new CacheControl.Builder().maxAge(2000, TimeUnit.SECONDS).build())
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
if(netclicklister!=null){
netclicklister.Error(e.getMessage());
}
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String string = response.body().string();
handler.post(new Runnable() {
@Override
public void run() {
Gson gson = new Gson();
BaseBean basebean = (BaseBean) gson.fromJson(string, clazz);
if(basebean.getCode().equals("0")){
//log测试输出
Log.d("qq","判断netclicklister为空前");
if(netclicklister!=null){
//log测试输出
Log.d("qq","判断netclicklister为空后");
//log测试输出
Log.d("qq","basebean:" + basebean);
netclicklister.Suesses(basebean);
}
}
}
});
}
});
}
//封装的okhttp的post方法
public void okHttpPost(String url, Map<String,Object> parms, final Class clazz, final NetClickListener netclicklister){
//加入拦截器
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.addInterceptor(interceptor);
builder.addNetworkInterceptor(networkinterceptor);
OkHttpClient client = new OkHttpClient();
FormBody.Builder body = new FormBody.Builder();
if(parms!=null&&parms.size()>0){
for (Map.Entry<String,Object> map : parms.entrySet()){
String key = map.getKey();
Object value = map.getValue();
if(value instanceof Integer){
int value1 = (int) value;
body.add(key, String.valueOf(value1));
}else if(value instanceof String){
String value2 = (String) value;
body.add(key,value2);
}
}
}
Request request = new Request.Builder()
.url(url)
.post(body.build())
//缓存
.cacheControl(new CacheControl.Builder().maxAge(2000, TimeUnit.SECONDS).build())
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
if(netclicklister!=null){
netclicklister.Error(e.getMessage());
}
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String string = response.body().string();
handler.post(new Runnable() {
@Override
public void run() {
Gson gson = new Gson();
BaseBean basebean = (BaseBean) gson.fromJson(string, clazz);
if(basebean.getCode().equals("0")){
if(netclicklister!=null){
netclicklister.Suesses(basebean);
}
}
}
});
}
});
}
/**
* 对头像进行上传服务器的method
* **/
public void upload(Map<String, Object> params, final NetClickListener netClickListener){
//post请求方式二:multipart/form-data(不仅能够上传string类型的参数,还可以上传文件(流的形式,file))
OkHttpClient okHttpClient1 = new OkHttpClient();
MultipartBody.Builder builder1 = new MultipartBody.Builder();
builder1.setType(MultipartBody.FORM);
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.addInterceptor(interceptor);
builder.addNetworkInterceptor(interceptor);
for (Map.Entry<String, Object> stringObjectEntry : params.entrySet()) {
String key = stringObjectEntry.getKey();
Object value = stringObjectEntry.getValue();
if (value instanceof File) {//如果请求的值是文件
File file = (File) value;
//MediaType.parse("application/octet-stream")以二进制的形式上传文件
builder1.addFormDataPart(key, ((File) value).getName(), RequestBody.create(MediaType.parse("application/octet-stream"), file));
} else {//如果请求的值是string类型
builder1.addFormDataPart(key, value.toString());
}
}
Request request1 = new Request.Builder().post(builder1.build()).url(Api.UPLOADHEAD).build();
okHttpClient1.newCall(request1).enqueue(new Callback() {
@Override
public void onFailure(okhttp3.Call call, IOException e) {
if(netClickListener!=null){
netClickListener.Error(e.getMessage());
}
}
@Override
public void onResponse(okhttp3.Call call, final Response response) throws IOException {
if (response.isSuccessful()){
final String string = response.body().string();
System.out.println("fileuploadsuccess:" + response.body().string());
handler.post(new Runnable() {
@Override
public void run() {
Gson g = new Gson();
BaseBean baseBean = g.fromJson(string, BaseBean.class);
if(netClickListener!=null){
netClickListener.Suesses(baseBean);
}
}
});
}
}
});
}
}
//调用接口
public interface NetClickListener {
void Suesses(BaseBean baseBean);
void Error(BaseBean baseBean);
}
//所用的bean类
public class BaseBean {
private String msg ;
private String code ;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
}