Retrofit2入门级笔记(二)

Retrofit2入门级笔记(一)

如果你请求网页的返回数据类型是json,那么使用Retrofit将获得极大的便利

比如请求网址是http://gank.io/api/data/福利/10/1

先上效果图

Retrofit2入门级笔记(二)_第1张图片
效果图

【首先,compile相关库,别忘了Sync Now】

compile 'com.squareup.retrofit2:retrofit:2.2.0'
    compile 'com.jakewharton:butterknife:8.5.1'
    compile 'com.squareup.retrofit2:converter-gson:2.2.0'
    compile 'com.android.support:design:25.3.0'
    compile 'com.github.bumptech.glide:glide:3.7.0'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
  • converter-gson是retrofit内集成的gson工具库,完成api接口java化的东西
  • glide是谷歌官方的图片加载库,加载图片代码
Glide.with(content).load(URL).into(imageView);
  • butterknife是square开源的注解库,简单而言简化了绑定控件的fuckCode,用它就一定要用它的插件,可以快速绑定视图中的View。bk没有不是不行,但是有一定更好

【继续,完成api接口】

//http://gank.io/api/data/福利/10/1
    @GET("{fuli}/10/1")
    Call getFuli(@Path("fuli")String owner);
  • 将网址分为两部分,http://gank.io/api/data/是固定不变的,
    后面 data/福利/10/1 会变的,所以放在GET中,并且这里只对福利处传值处理,其他部分就不动了,还是用path做插值

【继续,完成Retrofit实例化对象】

Retrofit mRetrofit = new Retrofit
                        .Builder()//谁
                        .addConverterFactory(GsonConverterFactory.create())//怎么干
                        .baseUrl(URL)//干什么
                        .build();//是否干

谁,干什么,怎么干,是否干。

.addConverterFactory(GsonConverterFactory.create())
  • 显然,干的内容又丰富了。在获取json的同时,将json与java中的pojo或者说是bean一一对应起来,就是这段代码的意思

【所以,接下来构造pojo(bean)】

  • 和bk一样,用gson的话一定要用它的插件,那就是GsonFormat。导入json数据一键生成pojo。
public class Gankio {

    private boolean error;
    private List results;

    public boolean isError() {
        return error;
    }

    public void setError(boolean error) {
        this.error = error;
    }

    public List getResults() {
        return results;
    }

    public void setResults(List results) {
        this.results = results;
    }

    public static class ResultsBean {

        @Override
        public String toString() {
            return "ResultsBean{" +
                    "_id='" + _id + '\'' +
                    ", createdAt='" + createdAt + '\'' +
                    ", desc='" + desc + '\'' +
                    ", publishedAt='" + publishedAt + '\'' +
                    ", source='" + source + '\'' +
                    ", type='" + type + '\'' +
                    ", url='" + url + '\'' +
                    ", used=" + used +
                    ", who='" + who + '\'' +
                    '}';
        }
        
        private String _id;
        private String createdAt;
        private String desc;
        private String publishedAt;
        private String source;
        private String type;
        private String url;
        private boolean used;
        private String who;

        public String get_id() {
            return _id;
        }

        public void set_id(String _id) {
            this._id = _id;
        }

        public String getCreatedAt() {
            return createdAt;
        }

        public void setCreatedAt(String createdAt) {
            this.createdAt = createdAt;
        }

        public String getDesc() {
            return desc;
        }

        public void setDesc(String desc) {
            this.desc = desc;
        }

        public String getPublishedAt() {
            return publishedAt;
        }

        public void setPublishedAt(String publishedAt) {
            this.publishedAt = publishedAt;
        }

        public String getSource() {
            return source;
        }

        public void setSource(String source) {
            this.source = source;
        }

        public String getType() {
            return type;
        }

        public void setType(String type) {
            this.type = type;
        }

        public String getUrl() {
            return url;
        }

        public void setUrl(String url) {
            this.url = url;
        }

        public boolean isUsed() {
            return used;
        }

        public void setUsed(boolean used) {
            this.used = used;
        }

        public String getWho() {
            return who;
        }

        public void setWho(String who) {
            this.who = who;
        }
    }
}

如果你细心的看完这段代码,会发现我重写了ResultsBean的toString(),这是为了后续方便展示数据。

【准备发送请求】

GitHubService mGitHubService =
    mRetrofit.create(GitHubService.class);
Call call = 
    mGitHubService.getFuli("福利");

接口类名没变,还是GitHubService
也就是剧本没改,至于演哪一集就要看Call中的泛型了。这里静态传入“福利”,就不折腾了

【执行发送请求】

call.enqueue(new Callback() {
    @Override
        public void onResponse(Call call,
                    Response response) {
            try {
                 Gankio mMobileNumber = response.body();
                 Gankio.ResultsBean mResultsBean = 
                 mMobileNumber.getResults().get(1);
                 textView.setText(mResultsBean.toString());
                 Glide.with(Example2.this)
                      .load(mResultsBean.getUrl())
                      .into(imageView);
                        } catch (Exception e) {
                            textView.setText(e.toString());
                        }
                    }
    @Override
         public void onFailure(Call call, 
                               Throwable t) {
                 textView.setText(t.toString());
         }
});

对关键代码一行行分析

Gankio mMobileNumber = response.body();
  • 实例化Gankio并赋值,这里要注意response.body()就已经是了,不要加String()
Gankio.ResultsBean mResultsBean = 
                 mMobileNumber.getResults().get(1);
  • 继续实例化ResultsBean并赋值,由于返回的是ResultsBean对象数组,所以添加get(1),选择数组中第2个对象赋值回去,如图
Retrofit2入门级笔记(二)_第2张图片
返回的json数据.png
textView.setText(mResultsBean.toString());
  • 调用我们刚才重写的toString(),把ResultsBean数组中第2个数据展示在tv中
Glide.with(Example2.this)
     .load(mResultsBean.getUrl())
     .into(imageView);
  • 使用Glide加载图片,URL就是从ResultsBean对象中的getUrl()方法返回的字符串,然后into到ImageView的实例中就可以了

ok,最后编译运行

你可能感兴趣的:(Retrofit2入门级笔记(二))