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数据为例子。
1. 首先创建一个接口,新建ApiService.java。
public interface ApiService {
@GET("data/福利/" + 10 + "/{page}")
Call<GirlPageBean> getData(
@Path("page") int page);
}
2. 同上篇文章一样,利用Gsonformat生成GirlPageBean,用于存储从网上拉下来的数据
同上篇文章一样,略。
3. 在子线程获取数据
//初始化数据
public void initData(){
handler.postDelayed(new Runnable() {
@Override
public void run() {
getData(1);
}
}, 100);
}
/**
* 获取测试数据
*/
private void getData(int index) {
//1.创建Retrofit对象
Retrofit retrofit = new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(Constant.BASE_URL)
.build();
//2.创建访问请求
ApiService service = retrofit.create(ApiService.class);
Call<GirlPageBean> call = service.getData(index);
//3.发送请求
call.enqueue(new Callback<GirlPageBean>() {
@Override
public void onResponse(Call<GirlPageBean> call, Response<GirlPageBean> response) {
//4.处理结果
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;
-
再更改上面在子线程获取数据中那一步,其中的的创建访问请求:
//2.创建访问请求 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
网友评论