Android开发Android知识

Retrofit2入门级笔记(二)

2017-04-04  本文已影响132人  Xdjm

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'
Glide.with(content).load(URL).into(imageView);

【继续,完成api接口】

//http://gank.io/api/data/福利/10/1
    @GET("{fuli}/10/1")
    Call<Gankio> getFuli(@Path("fuli")String owner);

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

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

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

.addConverterFactory(GsonConverterFactory.create())

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

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.ResultsBean mResultsBean = 
                 mMobileNumber.getResults().get(1);
返回的json数据.png
textView.setText(mResultsBean.toString());
Glide.with(Example2.this)
     .load(mResultsBean.getUrl())
     .into(imageView);

ok,最后编译运行

上一篇 下一篇

猜你喜欢

热点阅读