zoukankan      html  css  js  c++  java
  • 从api接口获取数据-okhttp

    首先先介绍下api接口:

    API:应用程序接口(API:Application Program Interface)

    通常用于数据连接,调用函数提供功能等等。。。

    从api接口获取数据有四种方式:HttpClient、HttpURLConnection、OKHttp 和 Volley。

    之前项目中用到了OKHttp3,项目做好了,但这方面知识还没完全掌握,写篇随笔争取理解多一些 = =

    OkHttp 是一个现代、快速、高效的 Http client,支持 Http/2 以及 SPDY,扮演着传输层的角色,

    OkHttp 使用 Okio 来打打简化数据的访问与存储,Okio是一个增强 java.io 和 java.nio 的库。。。。and so on

    OkHttp 的基本用法(现在OkHttp3是比较新的版本,通常用这个多一些):

    首先导入jar包,没有jar包的同学可以进入下面链接搜索下载

    https://mvnrepository.com/

     

    然后在pom.xml进行配置(version 要对上,和你引入的okhttp jar包版本一致)

    下面是从网上偷的代码:https://www.jianshu.com/p/1873287eed87

     如果是Get请求:

     1 String url = "https://www.baidu.com";
     2 OkHttpClient okHttpClient = new OkHttpClient();
     3 Request request = new Request.Builder()
     4            .url(url);
     5            .build();
     6 Call call = okHttpClient.newCall(request);
     7 try{
     8      Response reponse = call.excecute();
     9      System.out.println(response。body().string());      
    10 }catch(IOExcption e){
    11      e.printStackTrace();
    12 }

     如果需要在request的header添加参数,如cookie、User-Agent什么的 , 就写成这样:

    1 Request request = new Request.Builder()
    2        .url(url)
    3        .header("key","value")
    4        .header("key","value")
    5        ...
    6        .build();

    注意:

    url 为 api 数据源,需要根据自身情况调用相应的api。

    response的body有很多种输出方法,string() 只是其中之一,注意是string() 不是toString()。

    如果是下载文件就是response.body().bytes(),

    另外可以根据response.code() 获取返回的状态码。

    -----------------------------------------------------------------------------------------------------------------------------------------

     如果是Post请求:

     1 String url = "https://baidu.com";
     2 OkHttpClient okHttpClient = new OkHttpClient();
     3 
     4 RequestBody body = new FormBody.Builder()
     5        .add("key","value");
     6        .add("key","value");
     7        ...
     8        .build();
     9 
    10 Request request = new Request.Builder()
    11        .url(url)
    12        .post(body)
    13        .build();
    14 
    15 Call call = okHttpClient.newCall(request);
    16 try{
    17      Response reponse = call.execute();
    18      System.out.println(response.body().string());
    19 }catch{
    20      e.printStackTrace();
    21 }

    post 请求创建 request 和 get 是一样的,只是post请求需要提交一个表单——ResponseBody

    表单格式有很多种,普通表单:

    1 RequestBody body = new FormBody.Builder()
    2     .add("键", "值")
    3     .add("键", "值")
    4     ...
    5     .build();

    RequestBody 的数据格式都要指定 Content-Type ,常见有三种:

    application/x-www-form-urlencoded 数据是个普通表单

    multipart/form-data 数据里有文件

    application/json 数据是个json

    但是上面代码中的表单并没有指定Content-Type这是因为FormBody继承了RequestBody,它已经指定了数据类型为application/x-www-form-urlencoded。

    1 private static final MediaType CONTENT_TYPE = MediaType.parse("application/x-www-form-urlencoded");

    如果表单是 json:

    1 MediaType JSON = MediaType.parse("application/json;charset = utf-8");
    2 RequestBody body = RequestBody.create(JSON,"你的JSON");

    如果表单包含文件:

    1 RequestBody requestBody = new MultipartBody.Build()
    2        .setType(MultipartBody.FORM)
    3        .addFormDataPart("file",file.getName(),RequestBody.create(MediaType.parse("image/png"),file))
    4        .build();

    上面的 MultipartBody也是继承了RequestBody,看下源码可知它适用于这五种Content-Type:

    public static final MediaType MIXED = MediaType.parse("multipart/mixed");
    public static final MediaType ALTERNATIVE = MediaType.parse("multipart/alternative");
    public static final MediaType DIGEST = MediaType.parse("multipart/digest");
    public static final MediaType PARALLEL = MediaType.parse("multipart/parallel");
    public static final MediaType FORM = MediaType.parse("multipart/form-data");

    另外还可以参考这个链接中的内容,还写了其他三种api接收数据的方式,很具体很细节~

    https://www.2cto.com/kf/201607/521798.html

    创造接口:

    https://blog.csdn.net/qq_35731570/article/details/69937457

    restful

    urlrewrite

    https://blog.csdn.net/kkkkkjava/article/details/78296845

  • 相关阅读:
    RN-Android构建失败:Caused by: org.gradle.api.ProjectConfigurationException: A problem occurred configuring root project 'AwesomeProject'.
    Android更新包下载成功后不出现安装界面
    真机调试: The application could not be installed: INSTALL_FAILED_TEST_ONLY
    react native 屏幕尺寸转换
    Android Studio生成签名文件,自动签名,以及获取SHA1和MD5值
    React Native安卓真机调试
    git提交代码报错Permission denied, please try again
    The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.
    命令行设置快捷命令
    Linux 常用指令
  • 原文地址:https://www.cnblogs.com/guojia314/p/9751599.html
Copyright © 2011-2022 走看看