java  中OkHttp的使用方法及实例

java  中OkHttp的使用方法及实例

概述

准备研究Retrofit,而它是依赖OkHttp的,所以先使用一下OkHttp,不深究源码,只探究使用方法。以后有机会再翻查源码。

在进行之前,首先需要2个jar包,其中一个是okHttp的jar包,github上可以下载,另一个是它的依赖包,这个很关键,没有它,项目就无法运行。

OkHttp请求的2种方式

不难猜测,涉及到网络请求,那么无非2种方式,一种是使用回调,另一种则是开启子线程执行。

第一种:开启子线程执行

OkHttpClient client = new OkHttpClient();
Request build = new Request.Builder().url(url).build();
try {
<span style="white-space:pre">  </span>Response execute = client.newCall(build).execute();
  if(execute.isSuccessful()){
    System.out.println("wisely aaa");
  } else {
    System.out.println("wisely bbb");
  }
} catch (IOException e) {
  e.printStackTrace();
}

第二种:使用回调,我个人最喜欢使用这种。(PS:觉得自己真是too young too simple!!本来以为回调的方法是在主线程,结果发现,竟然是子线程,子线程....)

OkHttpClient client = new OkHttpClient();
Request build = new Request.Builder().url(url).build();
client.newCall(build).enqueue(new Callback() { 

  @Override
  public void onResponse(Response arg0) throws IOException {
    System.out.println("wisely  success");
  } 

  @Override
  public void onFailure(Request arg0, IOException arg1) {
    System.out.println("wisely  failure");
  }
});

OkHttp之get请求

1、获取图片

OkHttpClient client = new OkHttpClient(); 

Request build = new Request.Builder().url(url).build();
client.newCall(build).enqueue(new Callback() { 

  @Override
  public void onResponse(Response response) throws IOException {
//   byte[] bytes = response.body().bytes();
    InputStream is = response.body().byteStream();
    Options options = new BitmapFactory.Options();
    options.inSampleSize = 8;
//   Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length,options);
    Bitmap bitmap = BitmapFactory.decodeStream(is, null, options);
    Message msg = handler.obtainMessage();
    msg.obj = bitmap;
    handler.sendMessage(msg);
  } 

  @Override
  public void onFailure(Request arg0, IOException arg1) {
    System.out.println("wisely fail:"+arg1.getCause().getMessage());
  }
});

只写了关键代码,并未写handler的相关代码。

获取网络图片有2种方式,1是获取byte数组,2是获取输入流。注意,onResponse在子线程中...

OkHttp之post请求

比起get请求,post请求的分类略多。

1、首先是最常用的表单提交。

OkHttpClient client = new OkHttpClient(); 

RequestBody body = new FormEncodingBuilder()
    .add("userName", "13363114390")
    .add("password", "200820e3227815ed1756a6b531e7e0d2").build(); 

Request build = new Request.Builder().url(url).post(body).build();
client.newCall(build).enqueue(new Callback() { 

  @Override
  public void onResponse(Response response) throws IOException {
    String lenght = response.header("Content-Length");
    System.out.println("wisely--lenght:" + lenght); 

    LoginResponse loginResponse = new Gson().fromJson(response.body().charStream(), LoginResponse.class);
    System.out.println("wisely---" + loginResponse.getMessage());
  } 

  @Override
  public void onFailure(Request arg0, IOException arg1) {
    System.out.println("wisely-----fail");
  }
});
String tokeId;
  boolean result; 

  public boolean isResult() {
    return result;
  } 

  public void setResult(boolean result) {
    this.result = result;
  } 

  public String getMessage() {
    return message;
  } 

  public void setMessage(String message) {
    this.message = message;
  } 

  public String getTokeId() {
    return tokeId;
  } 

  public void setTokeId(String tokeId) {
    this.tokeId = tokeId;
  } 

}

上面的是一个简单的登录表单的提交,其中将返回的json数据封装到了一个bean中。除了能够获取json数据外,还能获取到各个消息头。

2、上传图片

这是我最关心的一个功能,实验证明,okHttp上传图片的功能确实强大,支持多图片上传。

private MediaType PNG = MediaType.parse("application/octet-stream"); 
OkHttpClient client = new OkHttpClient(); 

RequestBody body = new MultipartBuilder()
    .type(MultipartBuilder.FORM)
    .addPart(Headers.of("Content-Disposition","form-data; name=\"files\";filename=\"img1.jpg\""),RequestBody.create(PNG, file1))
    .addPart(Headers.of("Content-Disposition","form-data; name=\"files\";filename=\"img2.jpg\""),RequestBody.create(PNG, file2)).build(); 

Request request = new Request.Builder()
  <span style="white-space:pre">  </span>.url(url)
    .post(body).build();
client.newCall(request).enqueue(new Callback() { 

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

    if(response.isSuccessful()){
      UploadPNGResponse uploadPNGResponse = new Gson().fromJson(response.body().charStream(), UploadPNGResponse.class);
      String msg = uploadPNGResponse.getMsg(); 

      List<String> list = uploadPNGResponse.getList();
      for (String string : list) {
        System.out.println("wisely---path:"+string);
      } 

    }
  } 

  @Override
  public void onFailure(Request arg0, IOException arg1) {
    System.out.println("wisely---fail--"+arg1.getCause().getMessage());
  }
}); 

class UploadPNGResponse{ 
String msg;
  boolean result;
  List<String> list;
  public String getMsg() {
    return msg;
  }
  public void setMsg(String msg) {
    this.msg = msg;
  }
  public boolean isResult() {
    return result;
  }
  public void setResult(boolean result) {
    this.result = result;
  }
  public List<String> getList() {
    return list;
  }
  public void setList(List<String> list) {
    this.list = list;
  }
}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • Android中的Retrofit+OkHttp+RxJava缓存架构使用

    RxJava如何与Retrofit结合 先扔出build.gradle文件的内容 dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.2.0' compile 'io.reactivex:rxjava:1.1.0' compile 'io.reactivex:rxand

  • java 中OkHttp的使用方法及实例

    java  中OkHttp的使用方法及实例 概述 准备研究Retrofit,而它是依赖OkHttp的,所以先使用一下OkHttp,不深究源码,只探究使用方法.以后有机会再翻查源码. 在进行之前,首先需要2个jar包,其中一个是okHttp的jar包,github上可以下载,另一个是它的依赖包,这个很关键,没有它,项目就无法运行. OkHttp请求的2种方式 不难猜测,涉及到网络请求,那么无非2种方式,一种是使用回调,另一种则是开启子线程执行. 第一种:开启子线程执行 OkHttpClient c

  • java  中OkHttp的使用方法及实例

    java  中OkHttp的使用方法及实例 概述 准备研究Retrofit,而它是依赖OkHttp的,所以先使用一下OkHttp,不深究源码,只探究使用方法.以后有机会再翻查源码. 在进行之前,首先需要2个jar包,其中一个是okHttp的jar包,github上可以下载,另一个是它的依赖包,这个很关键,没有它,项目就无法运行. OkHttp请求的2种方式 不难猜测,涉及到网络请求,那么无非2种方式,一种是使用回调,另一种则是开启子线程执行. 第一种:开启子线程执行 OkHttpClient c

  • java 中序列化与readResolve()方法的实例详解

    java 中序列化与readResolve()方法的实例详解 readResolve方法是作用是什么?这个方法跟对象的序列化相关(这样倒是解释了为什么 readResolve方法是private修饰的). 怎么跟对象的序列化相关了? 下面我们先简要地回顾下对象的序列化.一般来说,一个类实现了 Serializable接口,我们就可以把它往内存地写再从内存里读出而"组装"成一个跟原来一模一样的对象.不过当序列化遇到单例时,里边就有了个问题:从内存读出而组装的对象破坏了单例的规则.单例是要

  • Java中的== 和equals()方法详解与实例

    Java中的== 和equals()方法: Java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型. byte,short,char,int,long,float,double,boolean,他们之间的比较,应用双等号(==),比较的是他们的值. 2.引用数据类型(类) 当它们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false. Java当中所有的类都是继承于Object这个基类

  • java中request对象各种方法的使用实例分析

    本文实例讲述了java中request对象各种方法的使用.分享给大家供大家参考,具体如下: request对象是从客户端向服务器端发出请求,包括用户提交的信息以及客户端的一些信息.request对象是javax.servlet.http.HttpServletRequest类的实现实例. request对象封装了浏览器的请求信息,通过request对象的各种方法可以获取客户端以及用户提交的各项请求信息. 使用request对象获取客户端提交的请求参数的常用方法如下: 1.String getPa

  • java中JSONObject转换为HashMap(方法+main方法调用实例)

    1.首先要导入json相关的jar包 引入的jar包: (版本自行定义,可以选用使用人数偏多的版本,这样比较稳定) commons-beanutils-1.9.2.jar commons-collections-3.2.1.jar commons-lang-2.6.jar commons-logging-1.2.jar ezmorph-1.0.6.jar json-lib-2.4-jdk15.jar jar包的下载可以去下面这个网址搜索: https://mvnrepository.com/ 2

  • Java中Spring获取bean方法小结

    Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架,如何在程序中获取Spring配置的bean呢? Bean工厂(com.springframework.beans.factory.BeanFactory)是Spring框架最核心的接口,它提供了高级IoC的配置机制.BeanFactory使管理不同类型的Java对象成为可能,应用上下文(com.springframework.context.ApplicationContext)建立在BeanFactory基础之上,提供

  • Java中计算时间差的方法

    本文实例讲述了Java中计算时间差的方法.分享给大家供大家参考.具体如下: 假设现在是2004-03-26 13:31:40 过去是:2004-01-02 11:30:24 要获得两个日期差,差的形式为:XX天XX小时XX分XX秒 方法一: DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { Date d1 = df.parse("2004-03-26 13:31:40"); Date

  • JavaScript实现Java中Map容器的方法

    本文实例讲述了JavaScript实现Java中Map容器的方法.分享给大家供大家参考,具体如下: 声明一下,JavaScript和Java的区别就像雷锋和雷峰塔的区别. 在Java中,Map是一种集合,用来存储Key-Value键值对的容器.根据键得到值,因此不允许键重复(重复了的覆盖),但允许值重复.JavaScript中的对象特性,就是不允许有相同的属性存在,和Java的Map非常的相似,所以可以利用这个特性在JavaScript中来实现Map容器,实现基本的增删查的操作. functio

  • java中简单的截取分割字符串实例

    目前整理出来三种形式: 可根据实际需要选择使用 String userNameUrl; int beginIndex = 0; int endIndex = 0; userNameUrl = "454512@hongri@4944115455d9591b274648a06303d910de"; /** * 方法一: */ beginIndex = userNameUrl.indexOf("@")+1; endIndex = userNameUrl.lastIndex

随机推荐