使用okhttp 创建一个工具类 方便实用
以下是工具类的创建 其中包含诸多方法
首先单例创建 okhttp
其次素质三连
package com.example.wangyiyun;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class Utils {
OkHttpClient okHttpClient;
private Utils() {
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.connectTimeout(5, TimeUnit.SECONDS);
builder.readTimeout(5, TimeUnit.SECONDS);
okHttpClient= builder.build();
}
public static Utils Utils;
public static Utils getinstance(){
if(Utils==null){
synchronized (String.class){
if(Utils==null){
Utils= new Utils();
}
}
}
return Utils;
}
public void doGet(String url, final Mycall mycall){
Request.Builder builder = new Request.Builder();
builder.url(url);
final Request request = builder.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
mycall.fail(e.getMessage());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
mycall.success(response.body().string());
}
});
}
public void doPost(String url, final Mycall mycall, HashMap<String,String> map){
Request.Builder builder = new Request.Builder();
builder.url(url);
FormBody.Builder builder1 = new FormBody.Builder();
Set<String> key = map.keySet();
for (String s:key){
String s1 = map.get(s);
builder1.add(s,s1);
}
FormBody formBody = builder1.build();
final Request request = builder.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
mycall.fail(e.getMessage());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
mycall.success(response.body().string());
}
});
}
public void download(String url, String filename, final MyFileCallBack myFileCallBack) throws FileNotFoundException {
final FileOutputStream fileOutputStream = new FileOutputStream(filename);
Request.Builder builder = new Request.Builder();
builder.url(url);
Request request = builder.build();
Call call=okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
myFileCallBack.fail(e.getMessage());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
//TODO 1:获得最大值
long max = response.body().contentLength();
myFileCallBack.setMax(max);
//TODO 2:进度
InputStream inputStream = response.body().byteStream();
byte[] bytes=new byte[1024];
int len=0;
int count=0;
while((len=inputStream.read(bytes))!=-1){
count+=len;
fileOutputStream.write(bytes,0,len);
myFileCallBack.setProgress(count);
}
//TODO 3:完成
myFileCallBack.complete();
}
});
}
}
然后我们在主界面 就可以调用使用 传入对应的参数即可