zoukankan      html  css  js  c++  java
  • OkHttp3的简单使用(二)

    OkHttp3的简单封装

    public class OkHttpUtil {
       public static final String TAG="OkHttpUtil";
       private static OkHttpClient client;
       private static OkHttpUtil httpUtil;
    
       private OkHttpUtil(){
          client=new OkHttpClient.Builder()
                .connectTimeout(10, TimeUnit.SECONDS)
                .readTimeout(10,TimeUnit.SECONDS)
                .build();
       }
    
    // 使用单例模式,保证只有一个OkHttpUtil和OkHttpClient 的实例。
       public static OkHttpUtil getInstance(){
          synchronized (OkHttpUtil.class){
             if(httpUtil==null){
                httpUtil= new OkHttpUtil();
                return httpUtil;
             }
          }
          return httpUtil;
       }
    
    
       /**
        * get异步请求
        * @param url
        */
       public static void getData(String url){
          Request request=new Request.Builder().url(url)
                .build();
          client.newCall(request).enqueue(new Callback() {
             @Override
             public void onFailure(Call call, IOException e) {
    
             }
    
             @Override
             public void onResponse(Call call, Response response) throws IOException {
                //字符串类型
                Log.i(TAG, "getData: " + response.body().string());
                //字节数组类型
                Log.i(TAG, "getData: " + response.body().bytes());
                //字节流类型
                Log.i(TAG, "getData: " + response.body().byteStream());
                //字符流类型
                Log.i(TAG, "getData: " + response.body().charStream());
             }
          });
       }
    
       /**
        * 带有多个参数的get请求
        * @param url
        * @param map
        */
       public void getParams(String url,Map<String,String> map){
          String url1=url;
    
          if(map!=null&&map.size()>0){
             for(String key:map.keySet()){
                url1+="&"+key+"="+map.get(key);
             }
          }
          getData(url1);
       }
    
       /**
        * 提交单个键值对
        * @param url
        * @param key
        * @param value
        */
       public void postKeyValuePaire(String url,String key,String value){
          FormBody formBody=new FormBody.Builder()
                .add(key,value)
                .build();
          Request request=new Request.Builder()
                .url(url)
                .post(formBody)
                .build();
          client.newCall(request).enqueue(new Callback() {
             @Override
             public void onFailure(Call call, IOException e) {
    
             }
    
             @Override
             public void onResponse(Call call, Response response) throws IOException {
    
             }
          });
       }
    
    
       /**
        * 提交多个键值对
        *
        * @param url 提交的路径
        * @param map 用来放置键值对,map的key对应键,value对应值
        */
    
       public void postMap(String url,Map<String ,String> map){
          FormBody.Builder formBody=new FormBody.Builder();
          if(map!=null){
             for(String key:map.keySet()){
                formBody.add(key,map.get(key));
             }
          }
          Request request=new Request.Builder().url(url)
                .post(formBody.build())
                .build();
          client.newCall(request).enqueue(new Callback() {
             @Override
             public void onFailure(Call call, IOException e) {
    
             }
    
             @Override
             public void onResponse(Call call, Response response) throws IOException {
    
             }
          });
       }
    
    
    
       /**
        * post提交Json数据
        * @param url
        * @param content
        */
       public void postString(String url,String content){
    
          MediaType mediaType=MediaType.parse("application/json;  charset=utf-8");
          RequestBody requestBody=RequestBody.create(mediaType,content);
          Request request=new Request.Builder()
                .url(url)
                .post(requestBody)
                .build();
          client.newCall(request)
                .enqueue(new Callback() {
                   @Override
                   public void onFailure(Call call, IOException e) {
    
                   }
    
                   @Override
                   public void onResponse(Call call, Response response) throws IOException {
    
                   }
                });
       }
    
    
       /**
        * 上传单一文件
        */
        public void uploadFile(String url, File file, Callback callback){
            MediaType type=MediaType.parse(getMediaType(file.getName()));//设置上传文件的类型
            MultipartBody.Builder builder = new MultipartBody.Builder()
                    .setType(MultipartBody.FORM)
                    .addFormDataPart("file", file.getName(),
                            RequestBody.create(type, file));
        
            RequestBody requestBody = builder.build();
        
            Request request = new Request.Builder()
                    .url(url)
                    .post(requestBody)
                    .build();
            
            client.newCall(request).enqueue(callback);
        }
    
        /**
         * 上传多个文件
         * @param url
         * @param files
         */
        public void uploadFiles(String url,File[] files){
             MultipartBody.Builder builder=new MultipartBody
                     .Builder()
                     .setType(MultipartBody.FORM);
             for(int i = 0; i<files.length; i++){
                 RequestBody fileBody=RequestBody.create(MediaType.parse(getMediaType(files[i].getName())),files[i]);
                 builder.addFormDataPart("file",files[i].getName(),fileBody);
             }
             Request request=new Request.Builder()
                     .url(url)
                     .post(builder.build())
                     .build();
             client.newCall(request)
                     .enqueue(new Callback() {
                         @Override
                         public void onFailure(Call call, IOException e) {
    
                         }
                         @Override
                         public void onResponse(Call call, Response response) throws IOException {
    
                         }
                     });
         }
    
    
        /**
         * 上传多个文件和参数
         * @param url   url地址
         * @param files  文件
         * @param map  参数
         */
         public void uplaodMultiFiles(String url, File[] files, Map<String ,String> map){
             MultipartBody.Builder builder=new MultipartBody.Builder().setType(MultipartBody.FORM);
             //添加文件
             if(files!=null&&files.length>0){
                 for(int i=0;i<files.length;i++){
                     builder.addFormDataPart("uploadfile",files[i].getName(),RequestBody.create(MediaType.parse(files[i].getName()),files[i]));
                 }
             }
    
             //添加参数
             if(map!=null&&map.size()>0){
                 for(String key:map.keySet()){
                     builder.addFormDataPart(key,map.get(key));
                 }
             }
             Request request=new Request.Builder().url(url)
                     .post(builder.build())
                     .build();
             client.newCall(request).enqueue(new Callback() {
                 @Override
                 public void onFailure(Call call, IOException e) {
    
                 }
                 @Override public void onResponse(Call call, Response response) throws IOException {
    
                 }
             });
         }
    
        /**
         * 根据文件的名称判断文件的MediaType
         * @param fileName  文件名
         * @return  文件的MediaType
         */
         private String getMediaType(String fileName){
             FileNameMap map= URLConnection.getFileNameMap();
             String contentTypeFor=map.getContentTypeFor(fileName);
             if(contentTypeFor==null){
                 contentTypeFor="applicationn/octet-stream";
             }
             return contentTypeFor;
         }
    
        /**
        * 设置请求头
        * @param headersParams  请求头参数
        * @return headers
        */
         private Headers SetHeaders(Map<String, String> headersParams){
             Headers headers=null;
             okhttp3.Headers.Builder headersbuilder=new okhttp3.Headers.Builder();
             if(headersParams != null) {
                 Iterator<String> iterator = headersParams.keySet().iterator(); String key = "";
                 while (iterator.hasNext()) { key = iterator.next().toString();
                 headersbuilder.add(key, headersParams.get(key));
                 Log.d("get http", "get_headers==="+key+"===="+headersParams.get(key));
                 }
             }
             headers=headersbuilder.build(); return headers;
         }
    
        /**
         * get方法连接拼加参数
         * @param mapParams  参数
         * @return  拼接后的url
         */
         private String setUrlParams(Map<String, String> mapParams){
             String strParams = "";
             if(mapParams != null){
                 Iterator<String> iterator = mapParams.keySet().iterator();
                 String key = "";
                 while (iterator.hasNext()) {
                     key = iterator.next().toString();
                     strParams += "&"+ key + "=" + mapParams.get(key);
                 }
             }
             return strParams;
         }
    
    }
    

      

  • 相关阅读:
    jQuery获取option的一些常用方法
    111
    网站架构
    软件测试分类
    Python之import的用法
    解决:appium-doctor不是内部或外部命令
    mysql四种常见的数据库引擎
    mysql之数据类型
    彻底清除mysql(windows平台)
    Tkinter基于Combobox控件实现二级菜单联动
  • 原文地址:https://www.cnblogs.com/wangjiaghe/p/6931244.html
Copyright © 2011-2022 走看看