zoukankan      html  css  js  c++  java
  • 网络通信框架Retrofit2

    网络通信框架Retrofit2

    1 概要
    Retrofit2的简介以及特点
    Retrofit2使用配置(导包,权限等)
    Retrofit2中常用的注解介绍
    Retrofit2实现http网络访问
    GET与POST请求
    同步请求和异步请求
    Retrofit2实现文件上传
    Retrofit2进行大文件下载

    2 Retrofit2的特点及简介
    简介
    Retrofit翻新,改型,改良
    Retrofit是针对于Android/Java的、基于okHttp的、一种轻量级并使用注解方式和动态代理的网络请求框架,是目前比较流行的网络框架!
    Retrofit是square公司开源系列的精品之一,简单好用,效率高,基于REST的架构风格,本框架的主要开发人Jake Wharton
    REST Representational State Transfer简称REST,表述性状态转移传递
    一种软件架构的设计风格,针对网络应用的设计和开发方式
    Retrofit让开发者面向接口去请求服务,使用注解和代理去发起真正的请求,让开发者更快速的开发应用,省掉一些复杂的逻辑处理
    你不用担心android6.0不支持httpclient方式的请求,你也不用引入gson去转换数据与对象,Retrofit都已经完美实现

    特点
    性能好,处理快,使用简单,目前安卓中使用比较的流行网络请求跨框架之一.(速度上比volley更快!)
    支持NIO;(新的IOapi,可以替代标准的java IO API)
    使用注解方式,大大简化了我们的URL拼写形式,而且注解含义一目了然,简单易懂
    支持同步和异步执行,使得请求变得异常简单,只要调用enqueue/execute即可完成
    请求的方法参数注解都可以定制
    默认是使用OKHttp处理网络请求的
    默认使用Gson来进行数据解析的

    相关资料的网址
    retrofit官网:
    http://square.github.io/retrofit/
    github地址:
    https://github.com/square/retrofit

    3 Retrofit2的使用配置

    3.1 modle下build.gradle配置添加如下依赖后进行同步
    dependencies {
    compile 'com.squareup.retrofit2:converter-gson:2.0.2'//
    compile 'com.squareup.retrofit2:retrofit:2.3.0'
    compile 'com.squareup.okhttp3:okhttp:3.8.1'
    }
    同步后External Libraries中会增加:
    retrofit-2.3.0
    okhttp-3.8.0
    okio-1.13.0
    gson-2.6.1
    converer-gson-2.0.2

    3.2 AndroidManifest.xml添加权限
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

    4 Retrofit2常用注解
    请求方法类
    4.1 @GET
    GET网络请求方式

    4.2 @PSOT
    POST网络请求方式

    @PUT,@DELETE,@PATCH,@HEAD,@OPTIONS,@HTTP
    不常用请求方式.

    参数类
    4.3 @Headers
    头信息参数

    4.4 @Path
    路径参数,用于替换url路径中的变量字符替换,也就是url中的{*}中的*部分
    (@Path主要用于Get请求)
    例如接口:子连接地址中/wages/{wageId}/detail
    替换部分:{wageId}中的wageId.

    4.5 @Query
    形成单个查询参数,将接口url中追加类似于"page=1"的字符串,形成提交给服务器端的参数.
    (主要用于Get请求数据,用于拼接在拼接在url路径后面的查询参数,一个@Query相当于拼接一个参数,多个参数中间用,隔开)

    4.5.1,无参数
    例如接口:
    http://www.weather.com.cn/data/sk/101010100.html
    使用注解:
    @GET("data/sk/101010100.html")
    Call <Weather> getWeather();

    4.5.2,单个参数
    例如接口:
    http://cache.video.iqiyi.com/jp/avlist/202861101/1/?callback=jsonp9
    形成提交参数的部分:
    callback=jsonp9
    使用注解:使用注解:
    @GET("jp/avlist/202861101/1/")
    Call VideoInfo getVideoData(@Query("callback") String callback);

    4.5.3,多个参数
    例如接口:
    http://www.kuaidi100.com/query?type=yuantong&postid=500379523313"
    形成提交参数的部分:
    type=yuantong&postid=500379523313
    使用注解:
    @GET("query")
    Call QueryInfo QueryInfo(@Query("type") String type,@Query("postid") String postid,);

    4.6 @QueryMap
    查询参数集合,将url中追加类似于"page=1&count=20"的字符串,形成提交给服务器端的参数.
    (主要的效果等同于多个@Query参数拼接,主要也用于Get请求网络数据。)
    例如接口:
    http://www.kuaidi100.com/query?type=yuantong&postid=500379523313"
    形成提交参数的部分:
    type=yuantong&postid=500379523313
    使用注解:
    Call QueryInfo QueryInfo(@QueryMap Map<String, String> map) ;

    4.7 @Url
    使用此注解参数后,@GET后无需在添加任何内容.
    方法中的@Url参数可以是全路径参数,也可以是子路径参数,但是baseurl必须要指定.

    4.8 @Field
    指定form表单中域中每个控件name以及相应数值
    (@Field的用法类似于@Query,主要不同的是@Field主要用于Post请求数据。)

    4.9 @FieldMap
    表单域集合
    (主要用于Post请求数据,@FieldMap的用法类似于@QueryMap)

    4.10 @Part
    Post提交分块请求
    (表单字段,与 PartMap 配合,适合文件上传情况)

    4.11PartMap
    表单字段,与 Part 配合,适合文件上传情况;默认接受 Map<String, RequestBody> 类型,非 RequestBody 会通过 Converter 转换

    4.12 @Body
    (指定一个对象作为 request body)非表单请求体
    @POST("users/new")
    Call<User> createUser(@Body User user);

    标记类:

    4.13 @FormUrlEncoded
    对表单域中填写的内容进行编码处理,避免乱码.
    (用于post请求.)
    例如:
    @FormUrlEncoded
    @POST(“/user/edit”)
    Call updateUnableApeName(@Field(“first_name”) String first,
    @Field(“last_name”) String last);

    4.14 @MultiPart
    Post提交分块请求,如果上传文件必须指定MultiPart
    (请求体是支持文件上传的 From 表单)

    4.15 @Streaming
    响应体的数据用流的形式返回
    (未使用该注解,默认会把数据全部载入内存,之后通过流读取内存中数据,所以返回数据较大时,需要使用该注解)

    注意:
    Map 用来组合复杂的参数;
    Query、QueryMap 与 Field、FieldMap 功能一样,生成的数据形式一样;
    Query、QueryMap 的数据体现在url上,主要用于GET请求.
    Field、FieldMap 的数据是在请求体上,主要用于Post请求.

    5 Retrofit2代码实现步骤(Retrofit2五部曲)
    1,定义一个接口(用于存放执行网络请求的方法)
    2,实例化Retrofit
    3,通过Retrofit实例创建接口服务对象
    4,接口服务对象调用其对应的方法,获取Call对象
    5,Call对象来执行网络请求(同步或者异步请求)

    6 Retrofit2发送GET请求
    6.1 GET请求方法中无参数
    6.2 GET请求方法指定@Path参数和@Query参数
    6.3 GET请求,提交表单数据,方法中定义@QueryMap参数
    6.4 GET请求,方法中无参数,但是在@Url中定义完整的Url路径,这种情况下BaseUrl会被忽略!
    6.5 GET请求,指定返回结果为ResponseBody.

    7 Retrofit2发送POST请求
    7.1 Post请求,方法中定义@Fild参数,分别指定各个表单控件的名称
    7.2 Post请求,方法中定义@FildMap参数,@FildMap集合中来指定所有控件名称

    8 同步请求和异步请求
    同步:调用call对象的excute(),需要开启子线程!!!
    异步:调用call对象的enqueue(Callback<T> callback)方法,请求结果的回调是在主线程中进行的,这点不同于OkHttp.
    9 Retrofit2进行文件上传
    9.1 Post请求,方法中定义@Part参数,该参数指定file控件的名称及上传后文件的名称
    上传数据类型:multipart/form-data
    步骤:锁定File,创建RequestBody,创建MultipartBody.Part
    9.2 Post请求,方法中定义@Body参数,向服务器中上传多个文件及其他表单域数据
    9.3 Post请求,方法中定义@Part参数,向服务器中上传多个文件及其他表单域数据
    9.4 Post请求,方法中定义@PartMap参数,向服务器中上传多个文件及其他表单域数据
    使用此种方式变量的书写格式:
    file"; filename="123.jpg
    (表单控件名称";filename="保存在服务其端的文件名称)
    web端:
    Content-Disposition: form-data; name="file"; filename="1.txt"
    10 Retrofit2进行文件下载
    10.1小文件下载整体加载到内存.
    10.2大文件下载需使用@Streaming注解,实现边下载边存入sd卡(存入sd卡过程也应该放在子线程中进行,否则会出现异常)

     

     

             Java 注解
    定义:注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。

    作用分类:
    ①编写文档:通过代码里标识的元数据生成文档【生成文档doc文档】
    ② 代码分析:通过代码里标识的元数据对代码进行分析【使用反射】
    ③编译检查:通过代码里标识的元数据让编译器能够实现基本的编译检查【Override】

    Annotation(注解)是JDK1.5及以后版本引入的。它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。注解是以‘@注解名’在代码中存在的,根据注解参数的个数,我们可以将注解分为:标记注解、单值注解、完整注解三类。它们都不会直接影响到程序的语义,只是作为注解(标识)存在,我们可以通过反射机制编程实现对这些元数据(用来描述数据的数据)的访问。另外,你可以在编译时选择代码里的注解是否只存在于源代码级,或者它也能在class文件、或者运行时中出现(SOURCE/CLASS/RUNTIME)。

    元数据的作用
    如果要对于元数据的作用进行分类,还没有明确的定义,不过我们可以根据它所起的作用,大致可分为三类:
    编写文档:通过代码里标识的元数据生成文档。
    代码分析:通过代码里标识的元数据对代码进行分析。
    编译检查:通过代码里标识的元数据让编译器能实现基本的编译检查

    代码实现:Activity

      1 public class MainActivity extends AppCompatActivity implements View.OnClickListener {
      2 
      3     private TextView tv_content;
      4     private String TAG = this.getClass().getSimpleName();
      5     private String itemName;
      6     private String STR_TAG = TAG + "--->***";
      7     protected OkHttpClient okHttpClient;
      8     protected Handler deliveryHandler;
      9 
     10     @Override
     11     protected void onCreate(Bundle savedInstanceState) {
     12         super.onCreate(savedInstanceState);
     13         setContentView(R.layout.activity_main);
     14         findViewById(R.id.btn_retrofit).setOnClickListener(this);
     15         tv_content = (TextView) findViewById(R.id.tv_content);
     16 
     17         okHttpClient = OkHttpClientManager.getInstance(this).getOkHttpClient();
     18         deliveryHandler = OkHttpClientManager.getInstance(MainActivity.this).getDeliveryHandler();
     19     }
     20 
     21     @Override
     22     public void onClick(View v) {
     23         //弹一个对话框,分类选择:
     24         show();
     25 
     26     }
     27 
     28     private void show() {
     29         //创建builder对象。
     30         final AlertDialog.Builder builder = new AlertDialog.Builder(this);
     31         //设置标题.
     32         builder.setTitle("Retrofit2操作");
     33         //设置列表内容,以及点击事件.
     34         //参数:1,String数组.2,点击事件.
     35         final String[] items = {
     36                 "0指定无参数GET请求",
     37                 "1指定@Path和@Query参数GET请求",
     38                 "2指定@QueryMap参数集合GET请求",
     39                 "3指定@Url参数GET请求",
     40                 "4指定GET请求返回ResponseBody",
     41                 "5同步GET请求",
     42                 "6指定@Fild参数POST请求",
     43                 "7指定@FildMap参数POST请求",
     44                 "8指定@Part参数单文件上传",
     45                 "9指定@Body多文件上传带参数",
     46                 "10指定@Part通过多文件上传带参数",
     47                 "11指定@PartMap多文件上传带参数",
     48                 "12指定@Streaming大文件下载",
     49         };
     50         builder.setItems(items, new DialogInterface.OnClickListener() {
     51             @Override
     52             public void onClick(DialogInterface dialogInterface, int i) {
     53                 itemName = items[i] + STR_TAG;
     54                 switch (i) {
     55                     case 0:
     56                         get0();
     57                         break;
     58                     case 1:
     59                         get1();
     60                         break;
     61                     case 2:
     62                         get2();
     63                         break;
     64                     case 3:
     65                         get3();
     66                         break;
     67                     case 4:
     68                         get4();
     69                         break;
     70                     case 5:
     71                         get5();
     72                         break;
     73                     case 6:
     74                         get6();
     75                         break;
     76                     case 7:
     77                         get7();
     78                         break;
     79                     case 8:
     80                         get8();
     81                         break;
     82                     case 9:
     83                         get9();
     84                         break;
     85                     case 10:
     86                         get10();
     87                         break;
     88                     case 11:
     89                         get11();
     90                         break;
     91                     case 12:
     92                         get12();
     93                         break;
     94                 }
     95             }
     96         });
     97         builder.create().show();
     98     }
     99 
    100     private void get11() {
    101         final File file = new File(Environment.getExternalStorageDirectory(), "1.txt");
    102         final File file1 = new File(Environment.getExternalStorageDirectory(), "2.png");
    103         final RequestBody body = MultipartBody.create(MultipartBody.FORM, file);
    104         final RequestBody body1 = MultipartBody.create(MultipartBody.FORM, file1);
    105         final RequestBody body2 =RequestBody.create(MultipartBody.FORM, "zxn001");
    106 
    107 //        body =MultipartBody.Part.createFormData("file", file.getName(), body).body();
    108 //        body1 =MultipartBody.Part.createFormData("file", file.getName(), body1).body();
    109 //        final RequestBody body2 = MultipartBody.Part.createFormData("username", "zxn001").body();
    110 
    111 
    112         String baseUrl = "http://192.168.1.102/";
    113         new Retrofit.Builder()
    114                 .baseUrl(baseUrl)
    115                 .client(okHttpClient)
    116                 .build()
    117                 .create(NetService.class)
    118                 .uploadFilesByPartMap(new HashMap<String, RequestBody>(){
    119                     {
    120                         put("file"; filename=""+file.getName(), body);
    121                         put("file"; filename=""+file1.getName(), body1);
    122                         put("username",body2);
    123                     }
    124                 })
    125                 .enqueue(new Callback<ResponseBody>() {
    126                     @Override
    127                     public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
    128                         try {
    129                             showResult("onResponse"+response.body().string());
    130                         } catch (IOException e) {
    131                             e.printStackTrace();
    132                         }
    133                     }
    134 
    135                     @Override
    136                     public void onFailure(Call<ResponseBody> call, Throwable t) {
    137                         showResult("onFailure"+t.getMessage());
    138                     }
    139                 });
    140     }
    141 
    142     private void get12() {
    143         final String baseUrl = "http://1251603248.vod2.myqcloud.com/";
    144         final String downUrl = "http://1251603248.vod2.myqcloud.com/4c9adaa7vodtransgzp1251603248/30e0819d9031868223192061218/v.f40.mp4";
    145         new Thread(new Runnable() {
    146             @Override
    147             public void run() {
    148                 try {
    149                     Response<ResponseBody> response = new Retrofit.Builder()
    150                             .baseUrl(baseUrl)
    151                             .client(okHttpClient)
    152                             .build()
    153                             .create(NetService.class)
    154                             .download(downUrl)
    155                             .execute();
    156 
    157                     if (response.isSuccessful()) {
    158                         deliveryHandler.post(new Runnable() {
    159                             @Override
    160                             public void run() {
    161                                 showResult("服务器连接成功!");
    162                             }
    163                         });
    164                         boolean ok = writeDisk(response.body());
    165                         Log.i(TAG, STR_TAG + "run: 下载:" + ok);
    166                         if (ok) {
    167                             deliveryHandler.post(new Runnable() {
    168                                 @Override
    169                                 public void run() {
    170                                     tv_content.setText("下载完成!!");
    171                                 }
    172                             });
    173                         }
    174                     } else {
    175                         deliveryHandler.post(new Runnable() {
    176                             @Override
    177                             public void run() {
    178                                 showResult("下载失败!");
    179                             }
    180                         });
    181                     }
    182                 } catch (IOException e) {
    183                     e.printStackTrace();
    184                 }
    185             }
    186         }).start();
    187     }
    188 
    189     private boolean writeDisk(ResponseBody body) {
    190         try {
    191             File file = new File(Environment.getExternalStorageDirectory(), "1.mp4");
    192             InputStream inputStream = null;
    193             OutputStream outputStream = null;
    194             try {
    195                 byte[] fileReader = new byte[4096];
    196                 long fileSize = body.contentLength();
    197                 long loadSize = 0;
    198 
    199                 inputStream = body.byteStream();
    200                 outputStream = new FileOutputStream(file);
    201                 int len = -1;
    202                 while ((len = inputStream.read(fileReader)) != -1) {
    203                     outputStream.write(fileReader, 0, len);
    204                     loadSize += len;
    205                     Log.i(TAG, STR_TAG + "已经下载: " + loadSize + "/总大小: " + fileSize);
    206                 }
    207                 outputStream.flush();
    208                 return true;
    209             } catch (IOException e) {
    210                 return false;
    211             } finally {
    212                 if (inputStream != null) {
    213                     inputStream.close();
    214                 }
    215                 if (outputStream != null) {
    216                     outputStream.close();
    217                 }
    218             }
    219         } catch (IOException e) {
    220             return false;
    221         }
    222     }
    223 
    224     private void get10() {
    225         File file = new File(Environment.getExternalStorageDirectory(), "1.txt");
    226         File file1 = new File(Environment.getExternalStorageDirectory(), "2.png");
    227         List<MultipartBody.Part> parts = new ArrayList<>();
    228         RequestBody body = MultipartBody.create(MultipartBody.FORM, file);
    229         RequestBody body1 = MultipartBody.create(MultipartBody.FORM, file1);
    230         MultipartBody.Part part = MultipartBody.Part.createFormData("file", file.getName(), body);
    231         MultipartBody.Part part1 = MultipartBody.Part.createFormData("file", file1.getName(), body1);
    232         MultipartBody.Part part2 = MultipartBody.Part.createFormData("username", "zxn001");
    233         parts.add(part);
    234         parts.add(part1);
    235         parts.add(part2);
    236 
    237 //        String baseUrl = "http://192.168.1.102/";
    238         String baseUrl = "http://169.254.38.24/";
    239         new Retrofit.Builder()
    240                 .baseUrl(baseUrl)
    241                 .client(okHttpClient)
    242                 .build()
    243                 .create(NetService.class)
    244                 .uploadFilesByPart(parts)
    245                 .enqueue(new Callback<ResponseBody>() {
    246                     @Override
    247                     public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
    248                         try {
    249                             showResult("onResponse" + response.body().string());
    250                         } catch (IOException e) {
    251                             e.printStackTrace();
    252                         }
    253                     }
    254 
    255                     @Override
    256                     public void onFailure(Call<ResponseBody> call, Throwable t) {
    257                         showResult("onFailure" + t.getMessage());
    258                     }
    259                 });
    260     }
    261 
    262     private void get9() {
    263         File file = new File(Environment.getExternalStorageDirectory(), "a.jpg");
    264         File file1 = new File(Environment.getExternalStorageDirectory(), "d.jpg");
    265         MultipartBody.Builder builder = new MultipartBody.Builder();
    266         RequestBody body = MultipartBody.create(MultipartBody.FORM, file);
    267         RequestBody body1 = MultipartBody.create(MultipartBody.FORM, file1);
    268         MultipartBody multipartBody = builder
    269                 .addFormDataPart("file", file.getName(), body)
    270                 .addFormDataPart("file", file1.getName(), body1)
    271                 .addFormDataPart("username", "zxn123")
    272                 .setType(MultipartBody.FORM)
    273                 .build();
    274 
    275 //        String baseUrl = "http://192.168.1.102/";
    276         String baseUrl = "http://169.254.38.24/";
    277         new Retrofit.Builder()
    278                 .baseUrl(baseUrl)
    279                 .client(okHttpClient)
    280                 .build()
    281                 .create(NetService.class)
    282                 .uploadFilesByody(multipartBody)
    283                 .enqueue(new Callback<ResponseBody>() {
    284                     @Override
    285                     public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
    286                         try {
    287                             showResult("onResponse" + response.body().string());
    288                         } catch (IOException e) {
    289                             e.printStackTrace();
    290                         }
    291                     }
    292 
    293                     @Override
    294                     public void onFailure(Call<ResponseBody> call, Throwable t) {
    295                         showResult("onFailure" + t.getMessage());
    296                     }
    297                 });
    298 
    299     }
    300 
    301     private void get8() {
    302         //指定上传文件
    303         File file = new File(Environment.getExternalStorageDirectory(), "3.jpg");
    304 //        RequestBody body = RequestBody.create(MediaType.parse("multipart/form-data"), file);
    305 
    306         //封装请求体
    307 //        RequestBody body = RequestBody.create(MediaType.parse("application/otcet-stream"), file);
    308         RequestBody body = MultipartBody.create(MultipartBody.FORM, file);
    309         MultipartBody.Part part = MultipartBody.Part.createFormData("file", file.getName(), body);
    310 
    311 
    312         //http://192.168.1.100/MyUploadServer/servlet/UpLoadFileServlet
    313 //        String baseUrl = "http://192.168.1.102/";
    314         String baseUrl = "http://169.254.38.24/";
    315 
    316         new Retrofit.Builder()
    317                 .baseUrl(baseUrl)
    318                 .client(okHttpClient)
    319                 .build()
    320                 .create(NetService.class)
    321                 .postUpLoadFile(part)
    322                 .enqueue(new Callback<ResponseBody>() {
    323                     @Override
    324                     public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
    325                         try {
    326                             showResult("onResponse" + response.body().string());
    327                         } catch (IOException e) {
    328                             e.printStackTrace();
    329                         }
    330                     }
    331 
    332                     @Override
    333                     public void onFailure(Call<ResponseBody> call, Throwable t) {
    334                         showResult("onFailure" + t.getMessage());
    335                     }
    336                 });
    337     }
    338 
    339     private void get7() {
    340 //        String baseUrl = "http://v5.pc.duomi.com/search-ajaxsearch-searchall?kw=liedehua&pi=1&pz=10";
    341         String baseUrl = "http://v5.pc.duomi.com/";
    342         new Retrofit.Builder()
    343                 .baseUrl(baseUrl)
    344                 .client(okHttpClient)
    345                 .build()
    346                 .create(NetService.class)
    347                 .getSearchByPost(new HashMap<String, String>() {
    348                     {
    349                         put("kw", "liedehua");
    350                         put("pi", "1");
    351                         put("pz", "15");
    352                     }
    353                 }).enqueue(new Callback<ResponseBody>() {
    354             @Override
    355             public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
    356                 try {
    357                     showResult("onResponse" + response.body().string());
    358                 } catch (IOException e) {
    359                     e.printStackTrace();
    360                 }
    361             }
    362 
    363             @Override
    364             public void onFailure(Call<ResponseBody> call, Throwable t) {
    365                 showResult("onFailure" + t.getMessage());
    366             }
    367         });
    368     }
    369 
    370     private void get6() {
    371 //        String baseUrl = "http://cache.video.iqiyi.com/jp/avlist/202861101/1/?callback=jsonp9";
    372         String baseUrl = "http://cache.video.iqiyi.com/";
    373         new Retrofit.Builder()
    374                 .baseUrl(baseUrl)
    375                 .client(okHttpClient)
    376                 .build()
    377                 .create(NetService.class)
    378                 .getJpByPost("jsonp9")
    379                 .enqueue(new Callback<ResponseBody>() {
    380                     @Override
    381                     public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
    382                         try {
    383                             showResult("onResponse" + response.body().string());
    384                         } catch (IOException e) {
    385                             e.printStackTrace();
    386                         }
    387                     }
    388 
    389                     @Override
    390                     public void onFailure(Call<ResponseBody> call, Throwable t) {
    391                         showResult("onFailure" + t.getMessage());
    392                     }
    393                 });
    394 
    395     }
    396 
    397     private void get4() {
    398         String baseUrl = "http://api.immedc.com/";
    399         new Retrofit.Builder()
    400                 .baseUrl(baseUrl)
    401                 .client(okHttpClient)
    402                 .build()
    403                 .create(NetService.class)
    404                 .getStartBannerResponseBody()
    405                 .enqueue(new Callback<ResponseBody>() {
    406                     @Override
    407                     public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
    408                         try {
    409                             showResult("onResponse" + response.body().string());
    410                         } catch (IOException e) {
    411                             e.printStackTrace();
    412                         }
    413                     }
    414 
    415                     @Override
    416                     public void onFailure(Call<ResponseBody> call, Throwable t) {
    417                         showResult("onFailure" + t.getMessage());
    418                     }
    419                 });
    420 
    421     }
    422 
    423     private void get5() {
    424         final String baseUrl = "http://www.weather.com.cn/";
    425         new Thread(new Runnable() {
    426             @Override
    427             public void run() {
    428                 try {
    429                     final Weather weather = new Retrofit.Builder()
    430                             .baseUrl(baseUrl)
    431                             .addConverterFactory(GsonConverterFactory.create())
    432                             .client(okHttpClient)
    433                             .build()
    434                             .create(NetService.class)
    435                             .getWeather()
    436                             .execute().body();
    437                     MainActivity.this.runOnUiThread(new Runnable() {
    438                         @Override
    439                         public void run() {
    440                             showResult(weather.toString());
    441                         }
    442                     });
    443                 } catch (IOException e) {
    444                     e.printStackTrace();
    445                 }
    446             }
    447         }).start();
    448     }
    449 
    450     private void get3() {
    451         String baseUrl = "http://www.weather.com.cn/";
    452 //        String url = "http://www.weather.com.cn/data/sk/101010100.html";
    453         String url = "data/sk/101010100.html";
    454         new Retrofit.Builder().baseUrl(baseUrl)
    455                 .client(okHttpClient)
    456                 .addConverterFactory(GsonConverterFactory.create())
    457                 .build()
    458                 .create(NetService.class)
    459                 .getWeather(url)
    460                 .enqueue(new Callback<Weather>() {
    461                     @Override
    462                     public void onResponse(Call<Weather> call, Response<Weather> response) {
    463                         showResult("onResponse" + response.body().toString());
    464                     }
    465 
    466                     @Override
    467                     public void onFailure(Call<Weather> call, Throwable t) {
    468                         showResult("onFailure" + t.getMessage());
    469                     }
    470                 });
    471     }
    472 
    473     private void get2() {
    474         String baseUrl = "http://www.kuaidi100.com/";
    475         new Retrofit.Builder()
    476                 .baseUrl(baseUrl)
    477                 .client(okHttpClient)
    478                 .addConverterFactory(GsonConverterFactory.create())
    479                 .build().create(NetService.class)
    480                 .getQueryInfo(new HashMap<String, String>() {
    481                     {
    482                         put("type", "yuantong");
    483                         put("postid", "500379523313");
    484                     }
    485                 }).enqueue(new Callback<QueryInfo>() {
    486             @Override
    487             public void onResponse(Call<QueryInfo> call, Response<QueryInfo> response) {
    488                 showResult("onResponse" + response.body().toString());
    489             }
    490 
    491             @Override
    492             public void onFailure(Call<QueryInfo> call, Throwable t) {
    493                 showResult("onResponse" + t.getMessage());
    494             }
    495         });
    496     }
    497 
    498     private void get1() {
    499         String baseUrl = "http://m2.qiushibaike.com/";
    500         new Retrofit.Builder().baseUrl(baseUrl)
    501                 .addConverterFactory(GsonConverterFactory.create())
    502                 .client(okHttpClient)
    503                 .build()
    504                 .create(NetService.class)
    505                 .getArticles("latest", 1)
    506                 .enqueue(new Callback<QiushiModel>() {
    507                     @Override
    508                     public void onResponse(Call<QiushiModel> call, Response<QiushiModel> response) {
    509                         showResult("onResponse" + response.body().toString());
    510                     }
    511 
    512                     @Override
    513                     public void onFailure(Call<QiushiModel> call, Throwable t) {
    514                         showResult("onFailure" + t.getMessage());
    515                     }
    516                 });
    517     }
    518 
    519     private void get0() {
    520         String url = "http://www.weather.com.cn/";
    521         Retrofit.Builder builder = new Retrofit.Builder();
    522         builder.baseUrl(url)
    523                 .client(okHttpClient)
    524                 .addConverterFactory(GsonConverterFactory.create())
    525                 .build().create(NetService.class).getWeather().enqueue(new Callback<Weather>() {
    526             @Override
    527             public void onResponse(Call<Weather> call, Response<Weather> response) {
    528                 Weather body = response.body();
    529                 showResult(body.toString());
    530             }
    531 
    532             @Override
    533             public void onFailure(Call<Weather> call, Throwable t) {
    534                 showResult(t.getMessage());
    535             }
    536         });
    537     }
    538 
    539     private void showResult(String result) {
    540         String mResult = itemName + result;
    541         tv_content.setText(mResult);
    542         Toast.makeText(this, mResult, Toast.LENGTH_SHORT).show();
    543         Log.i(TAG, mResult);
    544     }
    545 }

    创建接口,用于存放网络请求的方法

     1 public interface NetService {
     2 
     3     @GET("data/sk/101010100.html")
     4     Call<Weather> getWeather();
     5 
     6     @GET("article/list/{type}?")
     7     Call<QiushiModel> getArticles(@Path("type") String type, @Query("page") int page);
     8 
     9     @GET("query")
    10     Call<QueryInfo> getQueryInfo(@QueryMap Map<String, String> map);
    11 
    12     @GET
    13     Call<Weather> getWeather(@Url String url);
    14 
    15     @GET("/restapi/loading/getStartBanner")
    16     Call<ResponseBody> getStartBannerResponseBody();
    17 
    18     @FormUrlEncoded
    19     @POST("jp/avlist/202861101/1/")
    20     Call<ResponseBody> getJpByPost(@Field("callback") String callback);
    21 
    22     @FormUrlEncoded
    23     @POST("search-ajaxsearch-searchall")
    24     Call<ResponseBody> getSearchByPost(@FieldMap Map<String, String> map);
    25 
    26     @Multipart
    27     @POST("MyUploadServer/servlet/UpLoadFileServlet")
    28     Call<ResponseBody> postUpLoadFile(@Part() MultipartBody.Part requestBody);
    29 
    30     @POST("MyUploadServer/servlet/MyUploadServlet")
    31     Call<ResponseBody> uploadFilesByody(@Body MultipartBody multipartBody);
    32 
    33     @Multipart
    34     @POST("MyUploadServer/servlet/MyUploadServlet")
    35     Call<ResponseBody> uploadFilesByPart(@Part()  List<MultipartBody.Part> parts);
    36 
    37     @Multipart
    38     @POST("MyUploadServer/servlet/MyUploadServlet")
    39     Call<ResponseBody> uploadFilesByPartMap(@PartMap()  Map<String, RequestBody> map);
    40 
    41     @Streaming
    42     @GET
    43     Call<ResponseBody> download(@Url String fileUrl);
    44 
    45 }
  • 相关阅读:
    hdu3251 最小割
    2012金华邀请赛解题报告
    Java依照List内存储的对象的某个字段进行排序
    Cocos2d-x移植安卓的笔记
    设计模式------策略模式
    C#实现相似QQ的隐藏浮动窗口、消息闪动
    libiconv字符集转换库在C#中的使用
    poj1564 Sum it up
    Objective-C学习笔记(四)——OC实现最简单的数学运算
    安装配置PhoneGap开发环境(一)
  • 原文地址:https://www.cnblogs.com/SongYongQian/p/7966989.html
Copyright © 2011-2022 走看看