摘要
上一节TesterHome android app 编写历程(一)我们将主要的界面给完成了,今天的话主要是会出现处理一些数据的的请求以及存储
正文
这里主要用到的话是Retrofit 进行网络请求,想详细了解Retrofit的用法的话可以参照Retrofit开发指南讲的相当详细了。
那么我们就按照那份文档进行操作吧。
首先添加Retrofit库到项目中,我们使用gradle配置下:
compile 'com.squareup.retrofit:retrofit:1.9.0'
再来我们需要创建一个POJO或模型类,Testerhome返回的数据都是json的格式,所以我们需要将其转换成Java Bean类型来进行存储。有一个很好的工具节省了我们新建类的工作。
jsonschema2pojo通过直接输入后台返回的json的数据,生成对应的模型类。
/**
* id : 3339
* title : TesterHome 与 fir.im 设立月度最佳文章奖金 [千元悬赏]
* created_at : 2015-09-15T21:23:19.217+08:00
* updated_at : 2015-09-15T23:38:25.218+08:00
* replied_at : 2015-09-15T23:38:25.206+08:00
* replies_count : 4
* node_name : 活动沙龙
* node_id : 24
* last_reply_user_id : 1011
* last_reply_user_login : doctorq
* user : {“id”:104,”login”:”seveniruby”,”name”:”思寒”,”avatar_url”:”/user/large_avatar/104.jpg”}
* deleted : false
* abilities : {“update”:false,”destroy”:false}
*/
我们以这个帖子为例,当然这个不是json的格式类型,我们就勉强脑补为json个数,那么使用jsonschema2pojo的话就会自动生成topic以及user两个类型,并且包含其中的getter以及setter等。
再下来是配置我们的接口用来管理像GET,POST…等请求的URL,这是一个服务类
我们请求的URL是https://testerhome.com/api/v3/topics.json 后面会带有各类的参数来满足你的一些请求,目前的话我们需要获取到精华帖子,热门帖子等等,所以我们需要加上参数类型type,所以看下我们的接口实现吧。
public interface TopicsService {
@GET("/topics.json")
void getTopicsByType(@Query("type") String type,@Query("offset") int offset,
Callback<Topics> callback);
@GET("/topics.json")
void getTopicsByType(@Query("type") String type,@Query("offset") int offset,@Query("node_id") int node_id,
Callback<Topics> callback);
}
完成了接口 下来就是完成接口的实现了。
TesterHomeApi.getInstance().getTopicsService().getTopicsByType("recent",offset,19,new Callback<Topics>() {
@Override
public void success(Topics topics, Response response) {
topicAdapter.setItems(topics.getTopics());
Toast.makeText(getActivity(),"已经是最新消息了",Toast.LENGTH_SHORT).show();
}
@Override
public void failure(RetrofitError error) {
Log.e("demo", "failure() called with: " + "error = [" + error + "]"
+ error.getUrl());
Toast.makeText(getActivity(), "获取数据失败", Toast.LENGTH_SHORT).show();
}
});
这里的topicAdpter实际上就是我们加载数据的一个适配器了。使用的是RecyclerView.Adapter,关于RecylerView的话以及topicAdpter下次在讲吧。