Retrofit 2.0關於get和post的網路訪問的簡單使用
阿新 • • 發佈:2019-01-06
Retrofit 2.0已經發布很久了,由於個人原因,現在才稍有接觸。其他地方關於這個框架的中文介紹都只是之言片語。使得學習起來比較麻煩一些。一般來說這種比較強大的框架,學習起來都有一些難度,有時候也只運用它的一個功能模組。最近由於工作需要我學習使用了這個框架來進行網路的get和post請求來對資料進行操作。由於只是初次使用,瞭解還不深入,只能稍微介紹一下。
retrofit底層預設使用的就是okhttp。
優點:
可以配置不同HTTPclient來實現網路請求,如okhttp、httpclient等
請求的方法引數註解都可以定製
支援同步、非同步和RxJava
超級解耦
可以配置不同的反序列化工具來解析資料,如json、xml等
使用非常方便靈活
框架使用了很多設計模式(感興趣的可以看看原始碼學習學習)
缺點:
不能接觸序列化實體和響應資料
執行的機制太嚴格
使用轉換器比較低效
只能支援簡單自定義引數型別
我所要解析的資料是json格式,說實話,使用這個框架真心非常的爽。個人認為不接觸序列化實體是它最明顯的缺點。下面按照步驟介紹一下使用步驟:
1. 在androidstudio的gradle中匯入依賴
compile 'com.squareup.retrofit:retrofit-mock:2.0.0-beta2' compile 'com.squareup.okhttp:okhttp:2.7.5' compile 'com.squareup.okio:okio:1.11.0'2.然後寫一個類來進行get和post的註解:compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2'
public class Appstore { //例如URl為: // http://host/mobile/oauth/requireorder/publisher/2333/order?status=-1&start" + // "=0&size=1000000000&c=E12C8F80739" // 1.定義一個介面 public interface IPService { // 1.1.get請求:通過@GET註解,指明訪問的地址 @GET()//★這裡最前面不能帶“/” // 1.2.定義一個請求網路,並且返回結果的方法(方法返回Call<Mydata> ), // 通過@Url來指定url
//這裡的IP是一個數據類, Call<Mydata> getIP(@Url() String ip); /*********************************************************************************/ // 1.3.post請求:通過@FormUrlEncoded、和@POST註解,指明訪問的地址 // (★注意:千萬別忘了@FormUrlEncoded) @FormUrlEncoded @POST() // Call<Mydata> postIP(@Url() String ip); } // 2.例項化retrofit,配置好請求地址和解析方式 static Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://host/")//★這裡最後面必須能帶“/” .addConverterFactory(GsonConverterFactory.create())//設定將json解析為javabean所用的方式 .build(); // // 3.通過retrofit建立第一步定義的介面的例項, //// 供在外部直接通過該例項呼叫該介面的getIPad方法,完成網路請求 static Appstore.IPService iPService = retrofit.create(Appstore.IPService.class); }3.進行這個封裝之後就可以呼叫了。呼叫如下:
String ur=" mobile/oauth/requireorder/publisher/123456/order?status=-1&start=0&size=1000000000&c=E12C8F8073988A12499D28"; final Call<Mydata> call = Appstore.iPService.getIP(ur); call.enqueue(new Callback<Mydata>() { @Override public void onResponse(Response<IP> response, Retrofit retrofit) { Mydata body=response.body();//取出解析的資料 call.cancel();//必須關閉 } @Override public void onFailure(Throwable t) { } });
注:資料的封裝類。使用GsonFormat來進行資料封裝。(刪除了大部分資料)
public class Mydata { public static class DataBean { private int totalItemNum;private List<ItemsBean> items; public static class ItemsBean{private RequireOrderEntityBean requireOrderEntity; private RequireEntityDisplayVOBean requireEntityDisplayVO; private ResumeDisplayVOBean resumeDisplayVO; public Object getUpdatetime() { return updatetime; } public void setStatusName(String statusName) { this.statusName = statusName; } } }對於Retrofit 2.0的認知還很膚淺。需要在實踐中加深認知。也希望大神指教。