Retrofit是用來簡化訪問服務器API的工具。依賴于OkHttp。
compile 'com.squareup.okhttp3:okhttp:3.4.1'
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.0.0'
以從http://gank.io/api/data/福利/10/1
中提取json數(shù)據(jù)為例子。
1. 首先創(chuàng)建一個接口,新建ApiService.java。
public interface ApiService {
@GET("data/福利/" + 10 + "/{page}")
Call<GirlPageBean> getData(
@Path("page") int page);
}
2. 同上篇文章一樣,利用Gsonformat生成GirlPageBean,用于存儲從網(wǎng)上拉下來的數(shù)據(jù)
同上篇文章一樣,略。
3. 在子線程獲取數(shù)據(jù)
//初始化數(shù)據(jù)
public void initData(){
handler.postDelayed(new Runnable() {
@Override
public void run() {
getData(1);
}
}, 100);
}
/**
* 獲取測試數(shù)據(jù)
*/
private void getData(int index) {
//1.創(chuàng)建Retrofit對象
Retrofit retrofit = new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(Constant.BASE_URL)
.build();
//2.創(chuàng)建訪問請求
ApiService service = retrofit.create(ApiService.class);
Call<GirlPageBean> call = service.getData(index);
//3.發(fā)送請求
call.enqueue(new Callback<GirlPageBean>() {
@Override
public void onResponse(Call<GirlPageBean> call, Response<GirlPageBean> response) {
//4.處理結(jié)果
if (response.isSuccessful()){
GirlPageBean result = response.body();
data.addAll(analysisResult(result));
}
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
adapter.notifyDataSetChanged();
mSwipeRefreshLayout.setRefreshing(false);
adapter.notifyItemRemoved(adapter.getItemCount());
Toast.makeText(MainActivity.this, "下載完成," + adapter.getItemCount(), Toast.LENGTH_SHORT).show();
}
});
}
@Override
public void onFailure(Call<GirlPageBean> call, Throwable t) {
}
});
}
另外,RxJava也比較火,和Retrofit一起,用起來很好用
下面是最簡單的用法,詳細可以看博文http://gank.io/post/56e80c2c677659311bed9841。
-
先更改上面的ApiService接口中的
@GET("data/福利/" + 10 + "/{page}") Call<GirlPageBean> getData( @Path("page") int page);
為
@GET("data/福利/" + 10 + "/{page}")
public Observable<GirlPageBean> getData(
@Path("page") int page);
注意這里的Observable需要import rx.Observable;
-
再更改上面在子線程獲取數(shù)據(jù)中那一步,其中的的創(chuàng)建訪問請求:
//2.創(chuàng)建訪問請求 ApiService service = retrofit.create(ApiService.class); service.getData(index) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe( new Subscriber<GirlPageBean>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(GirlPageBean girlPageBean) { data.addAll(analysisResult(girlPageBean)); adapter.notifyDataSetChanged(); mSwipeRefreshLayout.setRefreshing(false); adapter.notifyItemRemoved(adapter.getItemCount()); Toast.makeText(MainActivity.this, "下載完成," + adapter.getItemCount(), Toast.LENGTH_SHORT).show(); } } );
作為例子的Demo:
https://github.com/GinSmile/GankSimple