OkHttp的相关

来源:互联网 发布:舰队collection 知乎 编辑:程序博客网 时间:2024/04/30 08:55

因为我们现在大部分公司都要用新的工具Android studio   下面 介绍好用的 网络请求OkHttp

1:要用OkHttp 得先导包  包下载地址 okhttp he latest JAR 和okio the latest JAR

废话不多说  看代码

2:一般的get 请求

       //创建OkHTTPClient对象
       OkHttpClient ok=new OkHttpClient();
       
     //创建一个Request对象
      Request re=new Request.Builder().url(path).build();
     //开始请求
       ok.newCall(re).enqueue(new Callback() {
  @Override
  public void onFailure(Request request, IOException e) {

  }

  @Override
 public void onResponse(Response response) throws IOException {


//  一:如果先字符串可以的话 就用这个 一行搞定 默认 我是注掉了 因为大多数 都是乱码 所以果断用第 二中

      //   String str=response.body().toString();

//  二:如果 是乱码之类的 不正常的 就用字节流转换下 


          InputStream in=response.body().byteStream();
          int a;
          char[] ch=new char[1024];

        //在这里 如果乱码 可以换 gbk  utf-8  之类的  切换

         InputStreamReader ins=new InputStreamReader(in,"utf-8");
         StringBuffer sb=new StringBuffer();
         while((a=ins.read(ch))!=-1){


          sb.append(new String(ch,0,a));
        }


          String str=sb.toString();

         System.out.print(sb.toString()); 

        Log.d("读取内容是",sb.toString());
    }
  });

3:post 请求 

 //创建OkHTTPClient对象
       OkHttpClient ok=new OkHttpClient();

//这两行 暂时 没用到过 可以不写 暂时不懂啥意思

// Request request = buildMultipartFormRequest(  

// url,new File[]{file},new String[]{fileKey},null);

 //请求参数 里边可以放 联网 需要的请求参数 如 key 等
     FormEncodingBuilder builder=new FormEncodingBuilder();
       builder.add("name","fanaw");
       builder.add("key",key);


        //创建一个Request对象
    Request re=new Request.Builder().url(path).post(builder.build()).build();
            //开始请求
        ok.newCall(re).enqueue(new Callback() {
            @Override
            public void onFailure(Request request, IOException e) {


            }


            @Override
            public void onResponse(Response response) throws IOException {
                //在这里 直接借用 String 用了
               String str=response.body().toString();
                System.out.print(sb.toString());
  Log.d("读取内容是",sb.toString());
            }
        });


4:    写多个请求肯定包含大量的重复代码,所以我希望封装后的代码调用是这样的:

一般的 get 请求

OkHttpClientManager.getAsyn("https://www.baidu.com"

new OkHttpClientManager.ResultCallback<String>() {  

@Override  

publicvoidonError(Request request, Exception e) {  

e.printStackTrace();  

}  

@Override  

publicvoidonResponse(String u) {  

mTv.setText(u);//注意这里是UI线程  

}  

});

 一般的 post  请求
OkHttpClientManager.postAsyn("http://192.168.1.103:8080/okHttpServer/fileUpload",//new OkHttpClientManager.ResultCallback<String>() {  @Override  publicvoidonError(Request request, IOException e) {  e.printStackTrace();   }  @Override  publicvoidonResponse(String result) {   }  },// file,//"mFile",//new OkHttpClientManager.Param[]{  new OkHttpClientManager.Param("username","zhy"),  new OkHttpClientManager.Param("password","123")} );



其实 后边这复用的 我也 没明白 先写上 慢慢实验吧
 更多的  推荐   鸿祥的  介绍   http://blog.csdn.net/lmj623565791/article/details/47911083


0 0
原创粉丝点击