Android中Retrofit框架的基础使用(请求数据并解析)

1,891 阅读2分钟

//周五啊哈哈哈

零点一

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" />

这样就可以使用了。

三、GOGOGO RUSH B

解析类

首先我们要准备一个解析类,来指定我们要获取的对象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注解就是标注参数,在调用这个方法的时候传参就可以了。

MainActivity中使用

话不多说,直接代码见分晓

    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) {
        //请求失败
        }
    });

这样就可以请求到数据并解析出来了。

等等,关于URL是不是还没讲

例如我们请求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开发的初学者,如果我有错误的地方或者不足的话欢迎大家指正。