亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android網(wǎng)絡(luò)請求框架Retrofit詳解

 更新時間:2017年08月07日 10:09:23   作者:xing-java  
這篇文章主要為大家詳細介紹了Android網(wǎng)絡(luò)請求框架Retrofit,使用Retrofit2.0.0版本進行實例演示,具有一定的參考價值,感興趣的小伙伴們可以參考一下

介紹:

Retrofit 是Square公司開發(fā)的一款針對Android網(wǎng)絡(luò)請求的框架,Retrofit2底層基于OkHttp實現(xiàn)的,OkHttp現(xiàn)在已經(jīng)得到Google官方認可,大量的app都采用OkHttp做網(wǎng)絡(luò)請求。本文使用Retrofit2.0.0版本進行實例演示。

使用Retrofit可以進行GET,POST,PUT,DELETE等請求方式。

同步請求:需要在子線程中完成,會阻塞主線程。

Response response = call.execute().body();

異步請求:請求結(jié)果在主線程中回調(diào),可以在onResponse()回調(diào)方法進行更新UI。

call.enqueue(Callback callback)

使用步驟:

(1) 創(chuàng)建工程,添加jar:

compile 'com.squareup.retrofit2:retrofit:2.0.0'
compile 'com.squareup.retrofit2:converter-gson:2.0.0' //這兩個jar版本要一致,否則會有沖突

(2) 創(chuàng)建業(yè)務(wù)請求接口,具體代碼如下

/**
 * 創(chuàng)建業(yè)務(wù)請求接口
 */

public interface IUserService {
 /**
  * GET請求
  */
 @GET("Servlet/UserServlet")
 Call<User> getUser(@Query("email") String email);

 /**
  * POST請求
  */
 @FormUrlEncoded
 @POST("UserServlet")
 Call<User> postUser(@Field("name") String name, @Field("email") String email);
}


解釋說明:

@GET注解表示GET請求,@Query表示請求參數(shù),將會以key=value(@Query注解參數(shù)名稱為key,調(diào)用傳進來的值為value)的方式拼接在url后面.

@POST注解表示POST請求,@FormUrlEncoded將會自動將請求參數(shù)的類型設(shè)置為application/x-www-form-urlencoded,@FormUrlEncoded注解不能用于Get請求。@Field注解將每一個請求參數(shù)都存放至請求體中,還可以添加encoded參數(shù),該參數(shù)為boolean型,具體的用法為:
@Field(value = "password", encoded = true) String pwd
encoded參數(shù)為true的話,key-value-pair將會被編碼,即將中文和特殊字符進行編碼轉(zhuǎn)換.

(3)創(chuàng)建Retrofit對象

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl(Constant.BASE_URL)
    .addConverterFactory(GsonConverterFactory.create())
    .build();
IUserService iUserService = retrofit.create(IUserService.class);


解釋說明:

baseUrl()方法制定網(wǎng)絡(luò)請求的固定絕對地址,一般包括請求協(xié)議(如Http)、域名或IP地址、端口號。
創(chuàng)建Retrofit實例時,若沒有配置addConverterFactory(GsonConverterFactory.create())將會回調(diào)出JSON字符串,配置了將會回調(diào)實體對象。

支持的JSON解析庫:

Gson: compile ‘com.squareup.retrofit2:converter-gson:2.0.1'
Jackson: compile ‘com.squareup.retrofit2:converter-jackson:2.0.1'
Moshi: compile ‘com.squareup.retrofit2:converter-moshi:2.0.1'
Protobuf: compile ‘com.squareup.retrofit2:converter-protobuf:2.0.1'
Wire: compile ‘com.squareup.retrofit2:converter-wire:2.0.1'
Simple XML: compile ‘com.squareup.retrofit2:converter-simplexml:2.0.1'
Scalars (primitives, boxed, and String): compile ‘com.squareup.retrofit2:converter-scalars:2.0.1'

(4) 調(diào)用請求方法,并得到Call實例

Call<ResponseBody> call = iUserService.getUser(xing-java@foxmail.com);

(5) 使用Call實例完成同步或異步請求

/**
  * 發(fā)送GET請求
  */
 private void getRequest() {
  Retrofit retrofit = new Retrofit.Builder()
    .baseUrl(Constant.BASE_URL)
    .addConverterFactory(GsonConverterFactory.create())
    .build();
  IUserService iUserService = retrofit.create(IUserService.class);
  Call<User> call = iUserService.getUser("xing-java@foxmail.com");
  call.enqueue(new Callback<User>() {
   @Override
   public void onResponse(Call<User> call, Response<User> response) {

    Log.i("MainActivity", "response = " + response);
    User user = response.body();
    resTxtView.setText(user.toString());
   }

   @Override
   public void onFailure(Call<User> call, Throwable t) {

   }
  });
 }


請求方式:

(1)GET 請求:

GET 請求返回 JSON 字符串:

這里寫圖片描述

GET 請求返回實體對象:

這里寫圖片描述

(2) POST發(fā)送表單:

 /**
  * 發(fā)送POST請求
  */
 private void postRequest() {
  Retrofit retrofit = new Retrofit.Builder()
    .baseUrl(Constant.BASE_URL)
    .addConverterFactory(GsonConverterFactory.create())
    .build();
  IUserService iUserService = retrofit.create(IUserService.class);
  Call<User> call = iUserService.postUser("star.tao", "xing-java@foxmail.com");
  call.enqueue(new Callback<User>() {
   @Override
   public void onResponse(Call<User> call, Response<User> response) {
   }

   @Override
   public void onFailure(Call<User> call, Throwable throwable) {

   }
  });


服務(wù)端接收到的結(jié)果:

這里寫圖片描述

(3)文件上傳:

private void uploadFile() {
  Retrofit retrofit = new Retrofit.Builder()
    .addConverterFactory(GsonConverterFactory.create())
    .baseUrl(Constant.BASE_URL)
    .build();
  IUserService iUserService = retrofit.create(IUserService.class);
  File file = new File("/sdcard/s.png");
  RequestBody fileRequestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file);
  MultipartBody.Part multipartBody = MultipartBody.Part.createFormData("upload_file", file.getName(), fileRequestBody);
  String desc = "this is file description";
  RequestBody descRequestBody = RequestBody.create(MediaType.parse("multipart/form-data"), desc);
  Call<ResponseBody> call = iUserService.uploadFile(descRequestBody, multipartBody);
  call.enqueue(new Callback<ResponseBody>() {
   @Override
   public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
    Log.i("debug", "upload success");
   }

   @Override
   public void onFailure(Call<ResponseBody> call, Throwable t) {

   }
  });

 }


這里寫圖片描述

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android應(yīng)用開發(fā)之代碼混淆

    Android應(yīng)用開發(fā)之代碼混淆

    Android項目中的混淆很easy,之所以寫這篇總結(jié)是由于近期發(fā)現(xiàn)公司的代碼居然沒有混淆,反編譯后代碼隨手可得。很震驚。
    2014-07-07
  • Android獲取SHA1的方法

    Android獲取SHA1的方法

    這篇文章主要介紹了Android獲取SHA1的方法,需要的朋友可以參考下
    2017-12-12
  • 詳解Android的內(nèi)存優(yōu)化--LruCache

    詳解Android的內(nèi)存優(yōu)化--LruCache

    LruCache是基于Lru算法實現(xiàn)的一種緩存機制。本文對LruCache的概念和實現(xiàn)原理進行介紹,通過實例分析和使用介紹,讓大家更好的了解LruCache,下面跟著小編一起來看下吧
    2016-12-12
  • Android編程實現(xiàn)系統(tǒng)重啟與關(guān)機的方法

    Android編程實現(xiàn)系統(tǒng)重啟與關(guān)機的方法

    這篇文章主要介紹了Android編程實現(xiàn)系統(tǒng)重啟與關(guān)機的方法,較為詳細的分析了Android運行原理與源碼剖析,講述了Android編程實現(xiàn)系統(tǒng)重啟與關(guān)機的相關(guān)技巧與注意事項,需要的朋友可以參考下
    2016-02-02
  • Java操作FreeMarker模板引擎的基本用法示例小結(jié)

    Java操作FreeMarker模板引擎的基本用法示例小結(jié)

    這篇文章主要介紹了Java操作FreeMarker模板引擎的基本用法示例小結(jié),FreeMarker本身由Java寫成,用模板來生成文本輸出,需要的朋友可以參考下
    2016-02-02
  • Android實現(xiàn)高亮搜索功能的示例

    Android實現(xiàn)高亮搜索功能的示例

    這篇文章主要介紹了Android實現(xiàn)高亮搜索功能的示例,幫助大家更好的理解和學(xué)習(xí)使用Android開發(fā),感興趣的朋友可以了解下
    2021-05-05
  • Android XRecyclerView實現(xiàn)多條目加載

    Android XRecyclerView實現(xiàn)多條目加載

    這篇文章主要為大家詳細介紹了Android XRecyclerView實現(xiàn)多條目加載效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Android ListView控件使用方法

    Android ListView控件使用方法

    這篇文章主要為大家詳細介紹了Android ListView控件的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Android 組合控件實現(xiàn)布局的復(fù)用的方法

    Android 組合控件實現(xiàn)布局的復(fù)用的方法

    本篇文章主要介紹了Android 組合控件實現(xiàn)布局的復(fù)用的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Android實現(xiàn)底部導(dǎo)航欄功能(選項卡)

    Android實現(xiàn)底部導(dǎo)航欄功能(選項卡)

    這篇文章主要介紹了Android實現(xiàn)底部導(dǎo)航欄功能,可以隨意切換不同的頁面,實現(xiàn)選項卡功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2015-12-12

最新評論