OkHttp网络请求
导入OkHttp依赖
implementation ‘com.squareup.okhttp3:okhttp:4.1.0’
public class OkHttpUtils {
//单例模式
private OkHttpClient okHttpClient;
private Handler handler = new Handler();
// 1.构造私有化
private OkHttpUtils(){
//创建client对象
okHttpClient = new OkHttpClient.Builder()
.readTimeout(60*1000, TimeUnit.MILLISECONDS)
.writeTimeout(60*1000,TimeUnit.MILLISECONDS)
.build();
}
// 2.自行实例化
private static OkHttpUtils okHttpUtils = new OkHttpUtils();
// 3.提供公开发方式
public static OkHttpUtils getInstance(){
return okHttpUtils;
}
//get请求 网址 回调接口
public void thisget(String urlstring, final MyOkHttpCallBack okHttpCallBack){
Request request = new Request.Builder()
.get()
.url(urlstring)
.build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
final String message = e.getMessage();
handler.post(new Runnable() {
@Override
public void run() {
okHttpCallBack.onError(message);
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String string = response.body().string();
handler.post(new Runnable() {
@Override
public void run() {
okHttpCallBack.onOk(string);
}
});
}
});
}
//post请求 网址 map集合 回调接口
public void thispost(String urlstring, HashMap<String,String> map, final MyOkHttpCallBack okHttpCallBack){
FormBody.Builder builder = new FormBody.Builder();
Set<Map.Entry<String,String>> entries = map.entrySet();//获得键值对集合
for (Map.Entry<String, String> entry : entries) {//遍历每个键值对
String key = entry.getKey();//获得键
String value = entry.getValue();//获得值
builder.add(key,value);//添加参数
}
FormBody formBody = builder.build();//build()获得请求体
Request request = new Request.Builder()
.post(formBody)
.url(urlstring)
.build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override//失败
public void onFailure(Call call, IOException e) {
final String message = e.getMessage();
handler.post(new Runnable() {
@Override
public void run() {
okHttpCallBack.onError(message);
}
});
}
@Override//成功
public void onResponse(Call call, Response response) throws IOException {
final String string = response.body().string();
handler.post(new Runnable() {
@Override
public void run() {
okHttpCallBack.onOk(string);
}
});
}
});
}
//网络下载 网址 本地路径 回调接口
public void thisdownload(String urlstring, final String pathstring, final MyOkHttpCallBack okHttpCallBack){
Request request = new Request.Builder()
.get()
.url(urlstring)
.build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
final String message = e.getMessage();
handler.post(new Runnable() {
@Override
public void run() {
okHttpCallBack.onError(message);
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
InputStream inputStream = response.body().byteStream();
FileOutputStream fileOutputStream = new FileOutputStream(pathstring);
int len = 0;
byte[] bytes = new byte[1024];
while((len = inputStream.read(bytes)) != -1){
fileOutputStream.write(bytes,0,len);
}
handler.post(new Runnable() {
@Override
public void run() {
okHttpCallBack.onOk("下载完毕");
}
});
}
});
}
}