美文网首页Android开发Android知识
Retrofit2入门级笔记(二)

Retrofit2入门级笔记(二)

作者: Xdjm | 来源:发表于2017-04-04 09:38 被阅读132次

    Retrofit2入门级笔记(一)

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

    比如请求网址是http://gank.io/api/data/福利/10/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<Gankio> 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<ResultsBean> results;
    
        public boolean isError() {
            return error;
        }
    
        public void setError(boolean error) {
            this.error = error;
        }
    
        public List<ResultsBean> getResults() {
            return results;
        }
    
        public void setResults(List<ResultsBean> 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<Gankio> call = 
        mGitHubService.getFuli("福利");
    

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

    【执行发送请求】

    call.enqueue(new Callback<Gankio>() {
        @Override
            public void onResponse(Call<Gankio> call,
                        Response<Gankio> 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<Gankio> call, 
                                   Throwable t) {
                     textView.setText(t.toString());
             }
    });
    

    对关键代码一行行分析

    Gankio mMobileNumber = response.body();
    
    • 实例化Gankio并赋值,这里要注意response.body()就已经是<Gankio>了,不要加String()
    Gankio.ResultsBean mResultsBean = 
                     mMobileNumber.getResults().get(1);
    
    • 继续实例化ResultsBean并赋值,由于返回的是ResultsBean对象数组,所以添加get(1),选择数组中第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入门级笔记(二)

        本文链接:https://www.haomeiwen.com/subject/hkdaottx.html