/** * okhttp3 单例对象 */ public class OkHttpClientSingle { private OkHttpClientSingle(){ } private static volatile OkHttpClient clientInstance; public static OkHttpClient getClientInstance() { if (clientInstance == null) { synchronized (OkHttpClientSingle.class){ if (clientInstance == null){ clientInstance = new OkHttpClient.Builder() .connectTimeout(5, TimeUnit.SECONDS) .writeTimeout(5, TimeUnit.SECONDS) .readTimeout(15, TimeUnit.SECONDS) .connectionPool(new ConnectionPool(10,5, TimeUnit.MILLISECONDS)) .retryOnConnectionFailure(true) .build(); } } } return clientInstance; } }
public class OKHttpUtils { public static final String TAG = "OKHttpUtils"; //使用Get方式获取服务器上数据 public static void sendOkHttpRequest(final String address, final Callback callback) { OkHttpClient client = OkHttpClientSingle.getClientInstance(); Request request = new Request.Builder() .url(address) .build(); client.newCall(request).enqueue(callback); } //使用Post方式向服务器上提交数据并获取返回提示数据 public static void sendOkHttpResponse(final String address, final RequestBody requestBody, final Callback callback) { OkHttpClient client = OkHttpClientSingle.getClientInstance(); // JSONObject object; Request request = new Request.Builder() .url(address).post(requestBody).build(); client.newCall(request).enqueue(callback); } public static void downloadFile(final File file, String url) { // 父目录是否存在 File parent = file.getParentFile(); if (!parent.exists()) { parent.mkdir(); } // 文件是否存在 if (!file.exists()) { try { file.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } Request request=new Request.Builder().url(url).get().build(); // new OkHttpClient.Builder() // .readTimeout(2000, TimeUnit.SECONDS) // .writeTimeout(2000, TimeUnit.SECONDS) // .connectTimeout(2000, TimeUnit.SECONDS).build() OkHttpClientSingle.getClientInstance() .newCall(request) .enqueue(new Callback() { @Override public void onFailure(Call call, final IOException e) { LogUtils.e("下载失败"); } @Override public void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful()) { ResponseBody body = response.body(); // 获取文件总长度 final long totalLength = body.contentLength(); //以流的方式进行读取 InputStream inputStream = body.byteStream(); FileOutputStream outputStream = new FileOutputStream(file); byte[] buffer = new byte[2048]; int len = 0; int num = 0; while ((len = inputStream.read(buffer)) != -1){ num+=len; outputStream.write(buffer,0,len); final int finalNum = num; } //读取完关闭流 outputStream.flush(); outputStream.close(); inputStream.close(); if(file.exists()){ //返回下载文件路径 // callBack.onSuccess(file.getPath()); Log.d(TAG,"---------path"+file.getPath()); } } } }); } }