网络请求准备
1.导包
自行前往maven仓库下载
fastjson-1.2.62.jar
okhttp-3.8.1.jar
okio-1.13.0.jar
导包方式 右键 add as library…
2.使用OKHTTP封装请求类
HttpCallBack
package sample.utils;
public interface HttpCallBack {
void success(String success);
void fail(String fail);
}
httputils
package sample.utils;
public interface HttpCallBack {
void success(String success);
void fail(String fail);
}
/
package sample.utils;
import com.alibaba.fastjson.JSONObject;
import okhttp3.*;
import org.omg.Messaging.SYNC_WITH_TRANSPORT;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
public class HttpUtil {
private static String PrefixURL ="http://localhost:9000";
public static String uri_login = "/login";
private final OkHttpClient mOkHttpClient;
private volatile static HttpUtil INSTANCE;
private Interceptor netCacheInterceptor = new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
HttpUrl httpUrl = request.url().newBuilder().build();
Request build;
System.out.println("请求地址》》" + httpUrl.url());
if (!StringUtil.isEmpty(session)) {
build = request.newBuilder()
// add common header
.addHeader("contentType", "application/json; charset=utf-8").addHeader("cookie", session)
.url(httpUrl).build();
} else {
build = request.newBuilder()
// add common header
.addHeader("contentType", "application/json; charset=utf-8").url(httpUrl).build();
}
Response response = chain.proceed(build);
return response;
}
};
public HttpUtil() {
OkHttpClient.Builder builder = new OkHttpClient.Builder();
// 设置超时
builder.connectTimeout(60, TimeUnit.SECONDS);
builder.readTimeout(60, TimeUnit.SECONDS);
builder.writeTimeout(60, TimeUnit.SECONDS);
// 错误重连
// builder.retryOnConnectionFailure(true);
//设置拦截器
// builder.addInterceptor(netCacheInterceptor);
mOkHttpClient = builder.build();
}
//单例
public static HttpUtil getInstance() {
if (INSTANCE == null) {
synchronized (HttpUtil.class) {
if (INSTANCE == null) {
INSTANCE = new HttpUtil();
}
}
}
return INSTANCE;
}
/**
get请求
*/
public void get(String uri, HttpCallBack callBack) {
Request request = new Request.Builder().addHeader("Content-Type", "application/json; charset=utf-8")
.url(PrefixURL + uri).get().build();
Call call = mOkHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
callBack.fail("请求失败");
}
@Override
public void onResponse(Call call, okhttp3.Response response) throws IOException {
boolean successful = response.isSuccessful();
String success = response.body().string(); //返回结果
if (successful) {
callBack.success(success);
} else {
callBack.fail("请求失败");
}
}
});
}
private String session; //请求的session
public void post(Map<String, String> map, String uri, HttpCallBack callBack) {
FormBody.Builder builder = new FormBody.Builder();
for (String in : map.keySet()) {
builder.add(in, map.get(in));
}
RequestBody body = builder.build();
Request.Builder builder1 = new Request.Builder();
builder1.addHeader("Content-Type", "application/json; charset=utf-8");
if (!StringUtil.isEmpty(session)) {
builder1.addHeader("cookie", session);
}
Request request = builder1.url(PrefixURL + uri).post(body).build();
Call call = mOkHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
System.out.println("请求失败");
callBack.fail("请求失败");
}
@Override
public void onResponse(Call call, okhttp3.Response response) throws IOException {
Headers headers = response.headers();
List<String> cookies = headers.values("Set-Cookie");
if (cookies.size() > 0) {
String s = cookies.get(0);
session = s.substring(0, s.indexOf(";")); //取到session 用户下次请求 无session不影响
System.out.println("session>>>" + session);
}
boolean successful = response.isSuccessful();
String success = response.body().string();
// System.out.println("请求结果>>>"+success);
if (successful) {
callBack.success(success);
} else {
callBack.fail("请求失败");
}
}
});
}
/**
* 带token请求
*/
public void postToken(Map<String, String> map, String uri, HttpCallBack callBack, String token) {
FormBody.Builder builder = new FormBody.Builder();
for (String in : map.keySet()) {
builder.add(in, map.get(in));
}
RequestBody body = builder.build();
Request request = new Request.Builder().addHeader("Content-Type", "application/json; charset=utf-8")
.addHeader("Authorization", "Bearer " + token).url(PrefixURL + uri).post(body).build();
Call call = mOkHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
callBack.fail("请求失败");
}
@Override
public void onResponse(Call call, okhttp3.Response response) throws IOException {
boolean successful = response.isSuccessful();
String success = response.body().string();
if (successful) {
callBack.success(success);
} else {
callBack.fail("请求失败");
}
}
});
}
private String BASE_PIC_URL = "http://localhost:8888";
//上传文件
public void uploadFile(Map<String, String> map, File[] files, String uri, HttpCallBack callBack) {
MultipartBody.Builder builder = new MultipartBody.Builder();
builder.setType(MultipartBody.FORM);
builder.addFormDataPart("参数1", map.get("参数1"));
builder.addFormDataPart("参数2", map.get("参数2"));
for (int i = 0; i < files.length; i++) {
File file = files[i];
System.out.println("file>>" + file.getPath());
int num = file.getName().indexOf(".");
RequestBody fileBody = RequestBody.create(MediaType.parse("image/jpeg"), file);// 将file转换成RequestBody文件
// 这里以MP4视频为例
builder.addFormDataPart("photos[" + file.getName().substring(0, num) + "]", file.getName().toLowerCase(), fileBody);
}
MultipartBody requestBody = builder.build();
Request request = new Request.Builder().url(BASE_PIC_URL + uri).post(requestBody).build();
Call call = mOkHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
System.out.println("上传图片》》失败");
callBack.fail("上传失败");
}
@Override
public void onResponse(Call call, Response response) throws IOException {
boolean successful = response.isSuccessful();
String success = response.body().string();
System.out.println("上传图片》》success》》" + success);
if (successful) {
callBack.success(success);
} else {
callBack.fail("上传失败");
}
}
});
}
/**
请求体 json传参
**/
public void postJson(JSONObject jsonObject, String uri, HttpCallBack callBack) {
MediaType JSON = MediaType.parse("application/json; charset=utf-8");
RequestBody body = RequestBody.create(JSON, String.valueOf(jsonObject));
Request.Builder builder1 = new Request.Builder();
builder1.addHeader("Content-Type", "application/json; charset=utf-8");
if (!StringUtil.isEmpty(session)) {
builder1.addHeader("cookie", session);
}
Request request = builder1.url(PrefixURL + uri).post(body).build();
Call call = mOkHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
System.out.println("请求失败");
callBack.fail("请求失败");
}
@Override
public void onResponse(Call call, okhttp3.Response response) throws IOException {
Headers headers = response.headers();
List<String> cookies = headers.values("Set-Cookie");
if (cookies.size() > 0) {
String s = cookies.get(0);
session = s.substring(0, s.indexOf(";"));
System.out.println("session>>>" + session);
}
boolean successful = response.isSuccessful();
String success = response.body().string();
// System.out.println("请求结果>>>"+success);
if (successful) {
callBack.success(success);
} else {
callBack.fail("请求失败");
}
}
});
}
}