博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Retrofit 入门学习
阅读量:5263 次
发布时间:2019-06-14

本文共 21763 字,大约阅读时间需要 72 分钟。

Retrofit 入门学习官方RetrofitAPI

官方的一个例子

public interface GitHubService {  @GET("users/{user}/repos")  Call
> listRepos(@Path("user") String user);}

 

这些注解都有一个参数 value,用来配置其路径,比如示例中的 users/{user}/repos, 我们还注意到在构造 Retrofit 之时我们还传入了一个 baseUrl(" 请求的完整 Url

https://api.github.com/users/{user}/repos 传入user参数替换{user}

 

就是通过 baseUrl 与注解的 value(下面称 “path“ ) 整合起来的,具体整合的规则如下:

path 是绝对路径的形式:    path = "/apath",baseUrl = "http://host:port/a/b"      Url = "http://host:port/apath"    path 是相对路径,baseUrl 是目录形式:      path = "apath",baseUrl = "http://host:port/a/b/"      Url = "http://host:port/a/b/apath"    path 是相对路径,baseUrl 是文件形式:      path = "apath",baseUrl = "http://host:port/a/b"      Url = "http://host:port/a/apath"    path 是完整的 Url:      path = "http://host:port/aa/apath",baseUrl = "http://host:port/a/b"      Url = "http://host:port/aa/apath"

 

(@Path("user") String user) 中user参数会替换 @GET("users/{user}/repos")中的{user}

建议采用第二种方式来配置,并尽量使用同一种路径形式

请求

Retrofit retrofit = new Retrofit.Builder()    .baseUrl("https://api.github.com/")    .build();GitHubService service = retrofit.create(GitHubService.class);

 

调用

Call
> repos = service.listRepos("octocat");

 

这个是个什么鬼List 找了半天没找到Repo这个类

尝试去访问

https://api.github.com/users/octocat/repos

 

终于有东东了,把结果转成JAVA BEAN

package com.liu.retrofit2demo.bean;    import com.google.gson.annotations.SerializedName;    /**     * @Description: 描述     * @AUTHOR 刘楠  Create By 2016/9/19 0019 18:10     */    public class Repo {        /**         * id : 68529654         * name : aidlDemo         * full_name : ln0491/aidlDemo         * owner : {"login":"ln0491","id":10574995,"avatar_url":"https://avatars.githubusercontent.com/u/10574995?v=3","gravatar_id":"","url":"https://api.github.com/users/ln0491","html_url":"https://github.com/ln0491","followers_url":"https://api.github.com/users/ln0491/followers","following_url":"https://api.github.com/users/ln0491/following{/other_user}","gists_url":"https://api.github.com/users/ln0491/gists{/gist_id}","starred_url":"https://api.github.com/users/ln0491/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ln0491/subscriptions","organizations_url":"https://api.github.com/users/ln0491/orgs","repos_url":"https://api.github.com/users/ln0491/repos","events_url":"https://api.github.com/users/ln0491/events{/privacy}","received_events_url":"https://api.github.com/users/ln0491/received_events","type":"User","site_admin":false}         * private : false         * html_url : https://github.com/ln0491/aidlDemo         * description : null         * fork : false         * url : https://api.github.com/repos/ln0491/aidlDemo         * forks_url : https://api.github.com/repos/ln0491/aidlDemo/forks         * keys_url : https://api.github.com/repos/ln0491/aidlDemo/keys{/key_id}         * collaborators_url : https://api.github.com/repos/ln0491/aidlDemo/collaborators{/collaborator}         * teams_url : https://api.github.com/repos/ln0491/aidlDemo/teams         * hooks_url : https://api.github.com/repos/ln0491/aidlDemo/hooks         * issue_events_url : https://api.github.com/repos/ln0491/aidlDemo/issues/events{/number}         * events_url : https://api.github.com/repos/ln0491/aidlDemo/events         * assignees_url : https://api.github.com/repos/ln0491/aidlDemo/assignees{/user}         * branches_url : https://api.github.com/repos/ln0491/aidlDemo/branches{/branch}         * tags_url : https://api.github.com/repos/ln0491/aidlDemo/tags         * blobs_url : https://api.github.com/repos/ln0491/aidlDemo/git/blobs{/sha}         * git_tags_url : https://api.github.com/repos/ln0491/aidlDemo/git/tags{/sha}         * git_refs_url : https://api.github.com/repos/ln0491/aidlDemo/git/refs{/sha}         * trees_url : https://api.github.com/repos/ln0491/aidlDemo/git/trees{/sha}         * statuses_url : https://api.github.com/repos/ln0491/aidlDemo/statuses/{sha}         * languages_url : https://api.github.com/repos/ln0491/aidlDemo/languages         * stargazers_url : https://api.github.com/repos/ln0491/aidlDemo/stargazers         * contributors_url : https://api.github.com/repos/ln0491/aidlDemo/contributors         * subscribers_url : https://api.github.com/repos/ln0491/aidlDemo/subscribers         * subscription_url : https://api.github.com/repos/ln0491/aidlDemo/subscription         * commits_url : https://api.github.com/repos/ln0491/aidlDemo/commits{/sha}         * git_commits_url : https://api.github.com/repos/ln0491/aidlDemo/git/commits{/sha}         * comments_url : https://api.github.com/repos/ln0491/aidlDemo/comments{/number}         * issue_comment_url : https://api.github.com/repos/ln0491/aidlDemo/issues/comments{/number}         * contents_url : https://api.github.com/repos/ln0491/aidlDemo/contents/{+path}         * compare_url : https://api.github.com/repos/ln0491/aidlDemo/compare/{base}...{head}         * merges_url : https://api.github.com/repos/ln0491/aidlDemo/merges         * archive_url : https://api.github.com/repos/ln0491/aidlDemo/{archive_format}{/ref}         * downloads_url : https://api.github.com/repos/ln0491/aidlDemo/downloads         * issues_url : https://api.github.com/repos/ln0491/aidlDemo/issues{/number}         * pulls_url : https://api.github.com/repos/ln0491/aidlDemo/pulls{/number}         * milestones_url : https://api.github.com/repos/ln0491/aidlDemo/milestones{/number}         * notifications_url : https://api.github.com/repos/ln0491/aidlDemo/notifications{?since,all,participating}         * labels_url : https://api.github.com/repos/ln0491/aidlDemo/labels{/name}         * releases_url : https://api.github.com/repos/ln0491/aidlDemo/releases{/id}         * deployments_url : https://api.github.com/repos/ln0491/aidlDemo/deployments         * created_at : 2016-09-18T15:24:32Z         * updated_at : 2016-09-18T15:29:01Z         * pushed_at : 2016-09-19T06:06:09Z         * git_url : git://github.com/ln0491/aidlDemo.git         * ssh_url : git@github.com:ln0491/aidlDemo.git         * clone_url : https://github.com/ln0491/aidlDemo.git         * svn_url : https://github.com/ln0491/aidlDemo         * homepage : null         * size : 229         * stargazers_count : 0         * watchers_count : 0         * language : Java         * has_issues : true         * has_downloads : true         * has_wiki : true         * has_pages : false         * forks_count : 0         * mirror_url : null         * open_issues_count : 0         * forks : 0         * open_issues : 0         * watchers : 0         * default_branch : master         */        public int id;        public String name;        public String full_name;        /**         * login : ln0491         * id : 10574995         * avatar_url : https://avatars.githubusercontent.com/u/10574995?v=3         * gravatar_id :         * url : https://api.github.com/users/ln0491         * html_url : https://github.com/ln0491         * followers_url : https://api.github.com/users/ln0491/followers         * following_url : https://api.github.com/users/ln0491/following{/other_user}         * gists_url : https://api.github.com/users/ln0491/gists{/gist_id}         * starred_url : https://api.github.com/users/ln0491/starred{/owner}{/repo}         * subscriptions_url : https://api.github.com/users/ln0491/subscriptions         * organizations_url : https://api.github.com/users/ln0491/orgs         * repos_url : https://api.github.com/users/ln0491/repos         * events_url : https://api.github.com/users/ln0491/events{/privacy}         * received_events_url : https://api.github.com/users/ln0491/received_events         * type : User         * site_admin : false         */        public OwnerEntity owner;        @SerializedName("private")        public boolean privateX;        public String  html_url;        public Object  description;        public boolean fork;        public String  url;        public String  forks_url;        public String  keys_url;        public String  collaborators_url;        public String  teams_url;        public String  hooks_url;        public String  issue_events_url;        public String  events_url;        public String  assignees_url;        public String  branches_url;        public String  tags_url;        public String  blobs_url;        public String  git_tags_url;        public String  git_refs_url;        public String  trees_url;        public String  statuses_url;        public String  languages_url;        public String  stargazers_url;        public String  contributors_url;        public String  subscribers_url;        public String  subscription_url;        public String  commits_url;        public String  git_commits_url;        public String  comments_url;        public String  issue_comment_url;        public String  contents_url;        public String  compare_url;        public String  merges_url;        public String  archive_url;        public String  downloads_url;        public String  issues_url;        public String  pulls_url;        public String  milestones_url;        public String  notifications_url;        public String  labels_url;        public String  releases_url;        public String  deployments_url;        public String  created_at;        public String  updated_at;        public String  pushed_at;        public String  git_url;        public String  ssh_url;        public String  clone_url;        public String  svn_url;        public Object  homepage;        public int     size;        public int     stargazers_count;        public int     watchers_count;        public String  language;        public boolean has_issues;        public boolean has_downloads;        public boolean has_wiki;        public boolean has_pages;        public int     forks_count;        public Object  mirror_url;        public int     open_issues_count;        public int     forks;        public int     open_issues;        public int     watchers;        public String  default_branch;        public static class OwnerEntity {            public String  login;            public int     id;            public String  avatar_url;            public String  gravatar_id;            public String  url;            public String  html_url;            public String  followers_url;            public String  following_url;            public String  gists_url;            public String  starred_url;            public String  subscriptions_url;            public String  organizations_url;            public String  repos_url;            public String  events_url;            public String  received_events_url;            public String  type;            public boolean site_admin;            @Override            public String toString() {                return "OwnerEntity{" +                        "login='" + login + '\'' +                        ", id=" + id +                        ", avatar_url='" + avatar_url + '\'' +                        ", gravatar_id='" + gravatar_id + '\'' +                        ", url='" + url + '\'' +                        ", html_url='" + html_url + '\'' +                        ", followers_url='" + followers_url + '\'' +                        ", following_url='" + following_url + '\'' +                        ", gists_url='" + gists_url + '\'' +                        ", starred_url='" + starred_url + '\'' +                        ", subscriptions_url='" + subscriptions_url + '\'' +                        ", organizations_url='" + organizations_url + '\'' +                        ", repos_url='" + repos_url + '\'' +                        ", events_url='" + events_url + '\'' +                        ", received_events_url='" + received_events_url + '\'' +                        ", type='" + type + '\'' +                        ", site_admin=" + site_admin +                        '}';            }        }        @Override        public String toString() {            return "Repo{" +                    "id=" + id +                    ", name='" + name + '\'' +                    ", full_name='" + full_name + '\'' +                    ", owner=" + owner +                    ", privateX=" + privateX +                    ", html_url='" + html_url + '\'' +                    ", description=" + description +                    ", fork=" + fork +                    ", url='" + url + '\'' +                    ", forks_url='" + forks_url + '\'' +                    ", keys_url='" + keys_url + '\'' +                    ", collaborators_url='" + collaborators_url + '\'' +                    ", teams_url='" + teams_url + '\'' +                    ", hooks_url='" + hooks_url + '\'' +                    ", issue_events_url='" + issue_events_url + '\'' +                    ", events_url='" + events_url + '\'' +                    ", assignees_url='" + assignees_url + '\'' +                    ", branches_url='" + branches_url + '\'' +                    ", tags_url='" + tags_url + '\'' +                    ", blobs_url='" + blobs_url + '\'' +                    ", git_tags_url='" + git_tags_url + '\'' +                    ", git_refs_url='" + git_refs_url + '\'' +                    ", trees_url='" + trees_url + '\'' +                    ", statuses_url='" + statuses_url + '\'' +                    ", languages_url='" + languages_url + '\'' +                    ", stargazers_url='" + stargazers_url + '\'' +                    ", contributors_url='" + contributors_url + '\'' +                    ", subscribers_url='" + subscribers_url + '\'' +                    ", subscription_url='" + subscription_url + '\'' +                    ", commits_url='" + commits_url + '\'' +                    ", git_commits_url='" + git_commits_url + '\'' +                    ", comments_url='" + comments_url + '\'' +                    ", issue_comment_url='" + issue_comment_url + '\'' +                    ", contents_url='" + contents_url + '\'' +                    ", compare_url='" + compare_url + '\'' +                    ", merges_url='" + merges_url + '\'' +                    ", archive_url='" + archive_url + '\'' +                    ", downloads_url='" + downloads_url + '\'' +                    ", issues_url='" + issues_url + '\'' +                    ", pulls_url='" + pulls_url + '\'' +                    ", milestones_url='" + milestones_url + '\'' +                    ", notifications_url='" + notifications_url + '\'' +                    ", labels_url='" + labels_url + '\'' +                    ", releases_url='" + releases_url + '\'' +                    ", deployments_url='" + deployments_url + '\'' +                    ", created_at='" + created_at + '\'' +                    ", updated_at='" + updated_at + '\'' +                    ", pushed_at='" + pushed_at + '\'' +                    ", git_url='" + git_url + '\'' +                    ", ssh_url='" + ssh_url + '\'' +                    ", clone_url='" + clone_url + '\'' +                    ", svn_url='" + svn_url + '\'' +                    ", homepage=" + homepage +                    ", size=" + size +                    ", stargazers_count=" + stargazers_count +                    ", watchers_count=" + watchers_count +                    ", language='" + language + '\'' +                    ", has_issues=" + has_issues +                    ", has_downloads=" + has_downloads +                    ", has_wiki=" + has_wiki +                    ", has_pages=" + has_pages +                    ", forks_count=" + forks_count +                    ", mirror_url=" + mirror_url +                    ", open_issues_count=" + open_issues_count +                    ", forks=" + forks +                    ", open_issues=" + open_issues +                    ", watchers=" + watchers +                    ", default_branch='" + default_branch + '\'' +                    '}';        }    }

 

使用

导入依赖

compile 'com.squareup.retrofit2:retrofit:2.1.0'    compile 'com.squareup.retrofit2:converter-gson:2.1.0'

 

建立Service

public interface GitHubService {    @GET("users/{user}/repos")    Call
> listRepos(@Path("user") String user);}

 

构造 Retrofit 使用单例

public class RetrofitWrapper {    private static RetrofitWrapper instance;    private        Retrofit        mRetrofit;    private RetrofitWrapper() {        //初始化 添加转换工厂        mRetrofit = new Retrofit.Builder().baseUrl(Constant.BASE_URL).addConverterFactory(GsonConverterFactory.create()).build();    }    public static RetrofitWrapper getInstance() {        if(instance == null) {            synchronized(RetrofitWrapper.class) {                if(instance == null) {                    instance = new RetrofitWrapper();                }            }        }        return instance;    }    /**     * 转换为对象的Service     * @param service     * @param 
* @return */ public
T create(Class
service){ return mRetrofit.create(service); } /** * 常量类 基本的URL */ public class Constant { //BASE_URL 可以自行替换 public static final String BASE_URL = "https://api.github.com/"; }}

 

在Activity中调用

添加网络权限

 

在点击事件时调用

private void getUserRepo() {        GitHubService gitHubService = RetrofitWrapper.getInstance().create(GitHubService.class);        Call
> call = gitHubService.listRepos("octocat"); call.enqueue(new Callback
>() { @Override public void onResponse(Call
> call, Response
> response) { //接收结果 List
list = response.body(); Log.d(TAG, "onResponse: " + list.size() + " " + list.toString()); Log.d(TAG, "onResponse:当前线程 "+Thread.currentThread().getName()); /** * 回调是在主线程可以更新UI */ mTv.setText(list.get(0).full_name); mPb.setProgress(50); } @Override public void onFailure(Call
> call, Throwable t) { Log.d(TAG, "onFailure: " + t.getMessage()); Log.d(TAG, "onFailure:当前线程 "+Thread.currentThread().getName()); } }); }

 

日志

onResponse: 7    [Repo{id=18221276, name='git-...太长省略onResponse:当前线程 main

 

不容易,终于成功了. 突然觉得请求接口就好像访问自家的方法 也看到了回调是在主线程中。可以做UI操作

接都走官方的API

BASE_URL

https://api.github.com/

 

API

http://square.github.io/retrofit/

 

public interface GitHubService {    @GET("users/{user}/repos")    Call
> listRepos(@Path("user") String user); @GET("users/list") Call
getUser();}

 

调用

private void getUser() {        GitHubService gitHubService = RetrofitWrapper.getInstance().create(GitHubService.class);        Call
userCall = gitHubService.getUser(); userCall.enqueue(new Callback
() { @Override public void onResponse(Call
call, Response
response) { User user = response.body(); Log.d(TAG, "getUser onResponse: "+user.toString()); Log.d(TAG, " getUser onResponse: "+response.code()+" "+response.isSuccessful()+" "+response.message()); mTv.setText(user.toString()); mPb.setProgress(100); } @Override public void onFailure(Call
call, Throwable t) { Log.d(TAG, "onFailure: "+t.getMessage()); } }); }

 

日志

getUser onResponse: User{login='list', id=1133421, avatar_url='https://avatars.githubusercontent.com/u/1133421?v=3',...省略  getUser onResponse: 200    true    OK

 

访问根路径

@GET("/")Call
getGitHubApi();

 

一定要有 ("/") 不然会报错

private void getGithubApi() {    GitHubService gitHubService = RetrofitWrapper.getInstance().create(GitHubService.class);    Call
apiBeanCall = gitHubService.getGitHubApi(); apiBeanCall.enqueue(new Callback
() { @Override public void onResponse(Call
call, Response
response) { Log.d(TAG, "getGithubApi onResponse: "+response.message()); GithubBean githubBean = response.body(); Log.d(TAG, "onResponse: "+githubBean.toString()); mTv.setText(githubBean.toString()); mPb.setProgress(78); } @Override public void onFailure(Call
call, Throwable t) { Log.d(TAG, "getGithubApi onFailure: "+t.getMessage()); } });}

 

带参数的get请求

Query
public interface MyServcie {@GET(AppUrl.GET_USE_HELP)Call
getUseHelp(@Query("sign")String sign,@Query("appKey") String appKey,@Query("osName")String osName);}

 

日志

getUseHelp onResponse: OKonResponse: UseHelpBean{info=InfoEntity{questList=[QuestListEntity{typeName='生活宝箱', reply='可以,选择你想加为好友的用户,点击“加好友”便可。', typeId=1002}, QuestListEntity{typeName='账户', reply='可以,点击用户...

 

QueryMap

@GET(AppUrl.GET_USE_HELP)Call
getUseHelp(@Query("sign")String sign,@Query("appKey") String appKey,@Query("osName")int osName);@GET(AppUrl.GET_USE_HELP)Call
getUseHelps(@QueryMap Map
params);

 

结果与上面一样

再看一个天气的

https://www.juhe.cn/docs/api/id/235

 

开放的API可以自己申请

BASE_URL

http://v.juhe.cn/weather/key:88ca9906a9ac5408ecd46b42c8e5324f

 

Service

public interface WeatherService {    @GET("index")    Call
getWeather(@Query("cityname") String cityname,@Query("key") String key,@Query("dtype") String dtype,@Query("format") int format); @GET("index") Call
getWeathers(@QueryMap Map
params);}

 

POST请求 --POST 提交表单Field & FieldMap

表单-参数Field

@FormUrlEncoded@POST("index")Call
getInfo(@Field("info")String info,@Field("key")String key);

 

表单 -多参数用FieldMap

@FormUrlEncoded@POST("index")Call
getInfos(@FieldMap Map
params);

 

源码:

转载于:https://www.cnblogs.com/liunanjava/p/5890757.html

你可能感兴趣的文章
利用AMPScript获取Uber用户数据的访问权限
查看>>
vagrant 同时设置多个同步目录
查看>>
python接口自动化28-requests-html爬虫框架
查看>>
生成随机数的模板
查看>>
hdu 2093
查看>>
Mysql 数据库操作
查看>>
转:linux终端常用快捷键
查看>>
009.栈实现队列
查看>>
A-Softmax的总结及与L-Softmax的对比——SphereFace
查看>>
关于软件盘覆盖住布局
查看>>
Unity3D 控制物体移动、旋转、缩放
查看>>
UVa 11059 最大乘积
查看>>
UVa 12545 比特变换器
查看>>
数组分割问题求两个子数组的和差值的小
查看>>
10个著名的思想实验1
查看>>
composer 报 zlib_decode(): data error
查看>>
linux下WPS的使用
查看>>
Web Api 利用 cors 实现跨域
查看>>
hdu 3938 并查集
查看>>
instanceof
查看>>