1. 程式人生 > >Retrofit 2.0關於get和post的網路訪問的簡單使用

Retrofit 2.0關於get和post的網路訪問的簡單使用

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'
compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2'
2.然後寫一個類來進行get和post的註解:
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的認知還很膚淺。需要在實踐中加深認知。也希望大神指教。

相關學習資料的網址