Retrofit的簡單介紹使用

今天說下關於網絡的東西,公司的項目的網絡請求都是用okhttp搭的,前陣子在網上看到Retrofit這東西,它跟okhttp一樣都是Square公司,retrofit就是對okhttp做了一層封裝。我覺得它對於okhttp的區別最大的一點就是用註解的方式來設置參數請求等。所以可以說RxAndroid跟它算是絕配。今天只是簡單玩了下get請求。例子有點基礎,我也在探究階段0.0     好了。接下來進入正題吧

來看下項目中build.gradle文件的配置

其實本例子rxandroid還沒講到,所以只需要導入上三個retrofit的包就ok了。需要注意的是版本需要一樣。

首先看下我完整的接口,裏面是json字符串。http://litchiapi.jstv.com/api/GetFeeds?column=0&PageSize=20&pageIndex=2

分類一下,首先  http://litchiapi.jstv.com/  我作爲了baseUrl 。api/GetFeeds  這段我作爲了get請求的url。column=0&PageSize=20&pageIndex=2  這些是請求的參數。上面的3段除了baseUrl其他都用註解的方式聲明。

下面看下具體用法。首先我們先定義一個請求接口,看下代碼:

/**
 * Created by Administrator on 2016/9/29.
 */
public interface  RetrofitTestInterface  {

    @GET("api/GetFeeds")
    Call<Bean> getServiceBeans(@Query("column") int column,
                               @Query("PageSize") int pageSize,
                               @Query("pageIndex") int pageIndex);
}

上面用@GET聲明瞭get請求的地址,@Query用來聲明參數,多個請求的話我們還可以包裝成Map,但是註解就不是@Query了,而是@QueryMap。時間原因,本例子沒講,後續我再加上,這裏需要注意的是聲明的參數需跟請求的Url的參數對應。下面我們看具體用法:

public class MainActivity extends AppCompatActivity {

    private String TAG = "MainActivity";
    private String baseUrl = "http://litchiapi.jstv.com/";
    private Button mBtn;
    private Call<Bean> serviceBeans;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mBtn = ((Button) findViewById(R.id.btn));

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(baseUrl)
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        RetrofitTestInterface retrofitTestInterface = retrofit
                .create(RetrofitTestInterface.class);

        serviceBeans = retrofitTestInterface.getServiceBeans(0, 20, 2);
        mBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                serviceBeans.enqueue(new Callback<Bean>() {
                    @Override
                    public void onResponse(Call<Bean> call, Response<Bean> response) {
                        Log.e(TAG, "請求成功");
                        Log.e(TAG, response.body().getParamz().getFeeds().get(0).getData().getSubject());
                    }

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

                    }
                });


            }
        });


    }
}
我們通過 new Retrofit.Builder 方法來構建 Retrofit 對象,然後通過
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.build();
設置基本url,添加gson解析器,就是表示需要用什麼轉換器來解析返回值,GsonConverterFactory.create()表示調用Gson庫來解析json返回值。最後調用build()完成。

然後我們通過retrofit對象調用

 RetrofitTestInterface retrofitTestInterface = retrofit
                .create(RetrofitTestInterface.class);
來得到我們定義好的接口對象。

通過接口調用裏面的方法然後傳入參數得到Call:

 serviceBeans = retrofitTestInterface.getServiceBeans(0, 20, 2);
最後我們通過call的異步得打請求得到的數據:

serviceBeans.enqueue(new Callback<Bean>() {
                    @Override
                    public void onResponse(Call<Bean> call, Response<Bean> response) {
                        Log.e(TAG, "請求成功");
                        Log.e(TAG, response.body().getParamz().getFeeds().get(0).getData().getSubject());
                    }

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

                    }
                });
它有同步和異步兩種請求方式,同步的話是通過call.execute().body();得到請求體。需要注意的是同步需要另開線程,而異步則不用。其中onResponse方法是請求成功的回調方法,而onFailure()方法是請求失敗的回調。請求成功之後我們想要的數據已經解析好變成response對象。

點擊按鈕之後返回數據成功:

好了,是不是很簡單。今天這個例子很基礎。希望大家都能看懂。後續的話有時間再添加其他方式的使用介紹,畢竟它的功能確實很強大。

共勉



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章