专栏名称: druidZ
目录
相关文章推荐
微同城本地便民  ·  超神奇的黑科技搅拌杯,放热水自动搅拌!快速降 ... ·  昨天  
微同城本地便民  ·  超神奇的黑科技搅拌杯,放热水自动搅拌!快速降 ... ·  昨天  
PChouse家居APP  ·  住进玻璃阳光大宅,光影成诗的家美得不像话 ·  昨天  
消费日报官方平台  ·  年货消费为家居行业全年发展“开好头” ·  2 天前  
51好读  ›  专栏  ›  druidZ

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

druidZ  · 掘金  ·  · 2017-12-16 01:25

正文

//周五啊哈哈哈

零点一

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

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







请到「今天看啥」查看全文