// 周五啊哈哈哈
Retrofit 是 Android 中很流行的 Http 框架,我们只需要设定请求什么资源,Retrofit 就可以帮我们设置 Http 请求、解析 JSon 等等功能。
我们准备获取解析 json 格式的数据,URL 是:
https://api.github.com/users/Guolei1130
比如我们需要知道这段 JSon 的 login。
思路很清晰:1、连接服务器拿到数据 2、解析数据。 使用之前我们首先要导入 Retrofit 在 build.gradle 中添加依赖。
在这里 ----->
添加这个 ---->
- compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'
- compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'
这时 Android studio 会提示你同步一下项目,同步完成后注意要在 AndroidManifest.xml 文件中申请网络权限,申请网络权限添加这个:
- <uses-permission android:name="android.permission.INTERNET" />
这样就可以使用了。
首先我们要准备一个解析类,来指定我们要获取的对象 model:
code 出现,dadada
- public class DataModel{
- private String login;//注意这里的变量名要和解析的JSon中的key相同
- public String getLogin() {
- return login;
- }
- }
然后我们需要定义一个接口
- public interface RequestServices {
- @GET("Guolei1130")//要请求的文件
- Call<DataModel> getList();//这个方法返回请求到的数据,格式就是我们的解析类
- }
其中 @GET 称为注解, 作用是标注我们使用的是 get 方法请求数据,注解的类型有很多,我们现在只使用最基础的 get。
不过有的时候我们请求的 URL 是带有参数的,例如:http://www.abc.com/a/b?pram=c, 这里 URL 中, ? 后的就是参数,这种情况的话我们这样处理
- @GET("b")
- Call<DataModel> getData(
- @Query("pram") String c);
@query 注解就是标注参数,在调用这个方法的时候传参就可以了。
话不多说,直接代码见分晓
- Retrofit retrofit = new Retrofit.Builder()
- .baseUrl("https://api.github.com/users/")//注意URL最后的"/"很重要不要丢
- .addConverterFactory(GsonConverterFactory.create())//设置数据解析器,用GSON解析
- .build();
- //接下来创建请求实例
- RequestServices requestServices = retrofit.create(RequestServices.class);
- //封装请求实例
- Call<DataModel> call = requestServices.getList();
- //发送请求(并设置请求回调)
- call.enqueue(new Callback<DataModel>() {
- @Override
- public void onResponse(Call<DataModel> call, Response<DataModel> response) {
- //请求成功
- if(response.isSuccess()){
- try {
- //获取数据
- DataModel user = response.body();//这样数据就按照DataModel解析出来并储存在user中了
- Log.v("response-------->",user.getLogin());
- } catch (Exception e){
- e.printStackTrace();
- }
- }
- }
- @Override
- public void onFailure(Call<DataModel> call, Throwable t) {
- //请求失败
- }
- });
这样就可以请求到数据并解析出来了。
例如我们请求 http://www.abc.com/a/b,那么不同的 baseURL 和 get 注解写法有区别吗?(既然说了当然有区别)
baseUrl | get 注解中的 URL | 最终请求的 URL |
---|---|---|
http://www.abc.com/a/ | /b | http://www.abc.com/b |
http://www.abc.com/a/ | b | http://www.abc.com/a/b |
http://www.abc.com/a/ | http://www.qwe.com/a | http://www.qwe.com/a |
所以推荐使用第二种方法,简单清楚。
这样就可以请求到我们想要的数据并白头偕老了。O 了个动态规划 K
// 作为 Android 开发的初学者,如果我有错误的地方或者不足的话欢迎大家指正。
来源: https://juejin.im/post/5a338687f265da43062ad232