Retrofit是大名鼎鼎的Square公司搞出来的一个网络请求框架。其本身是对okhttp做了一层封装,网络请求都交给给了Okhttp。
Retrofit只需要通过简单的配置就能进行网络请求。开源地址:http://square.github.io/retrofit/
开始学点最简单地GET及POST请求,直接上代码,文字表达见注释:
第一步:首先定义接口类:
/**
* description:接口定义,定义网络请求的路径
* 作者:ldm
* 时间:20172017/4/28 09:58
* 邮箱:1786911211@qq.com
*/
public interface RetrofitApi {
//GET方式请求,对应的注解是@GET
@GET("users/{user}/repos")
Call<List<GithubModel>> getUserInfo(@Path("user") String user);
//GET方式请求,对应的注解是@POST
@POST("mobile/login.json")
Call<ResponseModel<String>> login(@Body UserModel userModel);//POST请求方式,@Body中则是传入的参数,会转成json格式传到服务器
}
第二步:确实接口请求参数及返回数据格式,定义实体类:
1,示例中GET方式返回数据对应 实体类,有点长,太长
/**
* description:
* 作者:ldm
* 时间:20172017/4/28 09:59
* 邮箱:1786911211@qq.com
*/
public class GithubModel {
private int id;
private String name;
private String full_name;
private OwnerBean owner;
@SerializedName("private")
private boolean privateX;
private String html_url;
private String description;
private boolean fork;
private String url;
private String forks_url;
private String keys_url;
private String collaborators_url;
private String teams_url;
private String hooks_url;
private String issue_events_url;
private String events_url;
private String assignees_url;
private String branches_url;
private String tags_url;
private String blobs_url;
private String git_tags_url;
private String git_refs_url;
private String trees_url;
private String statuses_url;
private String languages_url;
private String stargazers_url;
private String contributors_url;
private String subscribers_url;
private String subscription_url;
private String commits_url;
private String git_commits_url;
private String comments_url;
private String issue_comment_url;
private String contents_url;
private String compare_url;
private String merges_url;
private String archive_url;
private String downloads_url;
private String issues_url;
private String pulls_url;
private String milestones_url;
private String notifications_url;
private String labels_url;
private String releases_url;
private String deployments_url;
private String created_at;
private String updated_at;
private String pushed_at;
private String git_url;
private String ssh_url;
private String clone_url;
private String svn_url;
private String homepage;
private int size;
private int stargazers_count;
private int watchers_count;
private String language;
private boolean has_issues;
private boolean has_projects;
private boolean has_downloads;
private boolean has_wiki;
private boolean has_pages;
private int forks_count;
private Object mirror_url;
private int open_issues_count;
private int forks;
private int open_issues;
private int watchers;
private String default_branch;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getFull_name() {
return full_name;
}
public void setFull_name(String full_name) {
this.full_name = full_name;
}
public OwnerBean getOwner() {
return owner;
}
public void setOwner(OwnerBean owner) {
this.owner = owner;
}
public boolean isPrivateX() {
return privateX;
}
public void setPrivateX(boolean privateX) {
this.privateX = privateX;
}
public String getHtml_url() {
return html_url;
}
public void setHtml_url(String html_url) {
this.html_url = html_url;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public boolean isFork() {
return fork;
}
public void setFork(boolean fork) {
this.fork = fork;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getForks_url() {
return forks_url;
}
public void setForks_url(String forks_url) {
this.forks_url = forks_url;
}
public String getKeys_url() {
return keys_url;
}
public void setKeys_url(String keys_url) {
this.keys_url = keys_url;
}
public String getCollaborators_url() {
return collaborators_url;
}
public void setCollaborators_url(String collaborators_url) {
this.collaborators_url = collaborators_url;
}
public String getTeams_url() {
return teams_url;
}
public void setTeams_url(String teams_url) {
this.teams_url = teams_url;
}
public String getHooks_url() {
return hooks_url;
}
public void setHooks_url(String hooks_url) {
this.hooks_url = hooks_url;
}
public String getIssue_events_url() {
return issue_events_url;
}
public void setIssue_events_url(String issue_events_url) {
this.issue_events_url = issue_events_url;
}
public String getEvents_url() {
return events_url;
}
public void setEvents_url(String events_url) {
this.events_url = events_url;
}
public String getAssignees_url() {
return assignees_url;
}
public void setAssignees_url(String assignees_url) {
this.assignees_url = assignees_url;
}
public String getBranches_url() {
return branches_url;
}
public void setBranches_url(String branches_url) {
this.branches_url = branches_url;
}
public String getTags_url() {
return tags_url;
}
public void setTags_url(String tags_url) {
this.tags_url = tags_url;
}
public String getBlobs_url() {
return blobs_url;
}
public void setBlobs_url(String blobs_url) {
this.blobs_url = blobs_url;
}
public String getGit_tags_url() {
return git_tags_url;
}
public void setGit_tags_url(String git_tags_url) {
this.git_tags_url = git_tags_url;
}
public String getGit_refs_url() {
return git_refs_url;
}
public void setGit_refs_url(String git_refs_url) {
this.git_refs_url = git_refs_url;
}
public String getTrees_url() {
return trees_url;
}
public void setTrees_url(String trees_url) {
this.trees_url = trees_url;
}
public String getStatuses_url() {
return statuses_url;
}
public void setStatuses_url(String statuses_url) {
this.statuses_url = statuses_url;
}
public String getLanguages_url() {
return languages_url;
}
public void setLanguages_url(String languages_url) {
this.languages_url = languages_url;
}
public String getStargazers_url() {
return stargazers_url;
}
public void setStargazers_url(String stargazers_url) {
this.stargazers_url = stargazers_url;
}
public String getContributors_url() {
return contributors_url;
}
public void setContributors_url(String contributors_url) {
this.contributors_url = contributors_url;
}
public String getSubscribers_url() {
return subscribers_url;
}
public void setSubscribers_url(String subscribers_url) {
this.subscribers_url = subscribers_url;
}
public String getSubscription_url() {
return subscription_url;
}
public void setSubscription_url(String subscription_url) {
this.subscription_url = subscription_url;
}
public String getCommits_url() {
return commits_url;
}
public void setCommits_url(String commits_url) {
this.commits_url = commits_url;
}
public String getGit_commits_url() {
return git_commits_url;
}
public void setGit_commits_url(String git_commits_url) {
this.git_commits_url = git_commits_url;
}
public String getComments_url() {
return comments_url;
}
public void setComments_url(String comments_url) {
this.comments_url = comments_url;
}
public String getIssue_comment_url() {
return issue_comment_url;
}
public void setIssue_comment_url(String issue_comment_url) {
this.issue_comment_url = issue_comment_url;
}
public String getContents_url() {
return contents_url;
}
public void setContents_url(String contents_url) {
this.contents_url = contents_url;
}
public String getCompare_url() {
return compare_url;
}
public void setCompare_url(String compare_url) {
this.compare_url = compare_url;
}
public String getMerges_url() {
return merges_url;
}
public void setMerges_url(String merges_url) {
this.merges_url = merges_url;
}
public String getArchive_url() {
return archive_url;
}
public void setArchive_url(String archive_url) {
this.archive_url = archive_url;
}
public String getDownloads_url() {
return downloads_url;
}
public void setDownloads_url(String downloads_url) {
this.downloads_url = downloads_url;
}
public String getIssues_url() {
return issues_url;
}
public void setIssues_url(String issues_url) {
this.issues_url = issues_url;
}
public String getPulls_url() {
return pulls_url;
}
public void setPulls_url(String pulls_url) {
this.pulls_url = pulls_url;
}
public String getMilestones_url() {
return milestones_url;
}
public void setMilestones_url(String milestones_url) {
this.milestones_url = milestones_url;
}
public String getNotifications_url() {
return notifications_url;
}
public void setNotifications_url(String notifications_url) {
this.notifications_url = notifications_url;
}
public String getLabels_url() {
return labels_url;
}
public void setLabels_url(String labels_url) {
this.labels_url = labels_url;
}
public String getReleases_url() {
return releases_url;
}
public void setReleases_url(String releases_url) {
this.releases_url = releases_url;
}
public String getDeployments_url() {
return deployments_url;
}
public void setDeployments_url(String deployments_url) {
this.deployments_url = deployments_url;
}
public String getCreated_at() {
return created_at;
}
public void setCreated_at(String created_at) {
this.created_at = created_at;
}
public String getUpdated_at() {
return updated_at;
}
public void setUpdated_at(String updated_at) {
this.updated_at = updated_at;
}
public String getPushed_at() {
return pushed_at;
}
public void setPushed_at(String pushed_at) {
this.pushed_at = pushed_at;
}
public String getGit_url() {
return git_url;
}
public void setGit_url(String git_url) {
this.git_url = git_url;
}
public String getSsh_url() {
return ssh_url;
}
public void setSsh_url(String ssh_url) {
this.ssh_url = ssh_url;
}
public String getClone_url() {
return clone_url;
}
public void setClone_url(String clone_url) {
this.clone_url = clone_url;
}
public String getSvn_url() {
return svn_url;
}
public void setSvn_url(String svn_url) {
this.svn_url = svn_url;
}
public String getHomepage() {
return homepage;
}
public void setHomepage(String homepage) {
this.homepage = homepage;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public int getStargazers_count() {
return stargazers_count;
}
public void setStargazers_count(int stargazers_count) {
this.stargazers_count = stargazers_count;
}
public int getWatchers_count() {
return watchers_count;
}
public void setWatchers_count(int watchers_count) {
this.watchers_count = watchers_count;
}
public String getLanguage() {
return language;
}
public void setLanguage(String language) {
this.language = language;
}
public boolean isHas_issues() {
return has_issues;
}
public void setHas_issues(boolean has_issues) {
this.has_issues = has_issues;
}
public boolean isHas_projects() {
return has_projects;
}
public void setHas_projects(boolean has_projects) {
this.has_projects = has_projects;
}
public boolean isHas_downloads() {
return has_downloads;
}
public void setHas_downloads(boolean has_downloads) {
this.has_downloads = has_downloads;
}
public boolean isHas_wiki() {
return has_wiki;
}
public void setHas_wiki(boolean has_wiki) {
this.has_wiki = has_wiki;
}
public boolean isHas_pages() {
return has_pages;
}
public void setHas_pages(boolean has_pages) {
this.has_pages = has_pages;
}
public int getForks_count() {
return forks_count;
}
public void setForks_count(int forks_count) {
this.forks_count = forks_count;
}
public Object getMirror_url() {
return mirror_url;
}
public void setMirror_url(Object mirror_url) {
this.mirror_url = mirror_url;
}
public int getOpen_issues_count() {
return open_issues_count;
}
public void setOpen_issues_count(int open_issues_count) {
this.open_issues_count = open_issues_count;
}
public int getForks() {
return forks;
}
public void setForks(int forks) {
this.forks = forks;
}
public int getOpen_issues() {
return open_issues;
}
public void setOpen_issues(int open_issues) {
this.open_issues = open_issues;
}
public int getWatchers() {
return watchers;
}
public void setWatchers(int watchers) {
this.watchers = watchers;
}
public String getDefault_branch() {
return default_branch;
}
public void setDefault_branch(String default_branch) {
this.default_branch = default_branch;
}
public static class OwnerBean {
private String login;
private int id;
private String avatar_url;
private String gravatar_id;
private String url;
private String html_url;
private String followers_url;
private String following_url;
private String gists_url;
private String starred_url;
private String subscriptions_url;
private String organizations_url;
private String repos_url;
private String events_url;
private String received_events_url;
private String type;
private boolean site_admin;
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getAvatar_url() {
return avatar_url;
}
public void setAvatar_url(String avatar_url) {
this.avatar_url = avatar_url;
}
public String getGravatar_id() {
return gravatar_id;
}
public void setGravatar_id(String gravatar_id) {
this.gravatar_id = gravatar_id;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getHtml_url() {
return html_url;
}
public void setHtml_url(String html_url) {
this.html_url = html_url;
}
public String getFollowers_url() {
return followers_url;
}
public void setFollowers_url(String followers_url) {
this.followers_url = followers_url;
}
public String getFollowing_url() {
return following_url;
}
public void setFollowing_url(String following_url) {
this.following_url = following_url;
}
public String getGists_url() {
return gists_url;
}
public void setGists_url(String gists_url) {
this.gists_url = gists_url;
}
public String getStarred_url() {
return starred_url;
}
public void setStarred_url(String starred_url) {
this.starred_url = starred_url;
}
public String getSubscriptions_url() {
return subscriptions_url;
}
public void setSubscriptions_url(String subscriptions_url) {
this.subscriptions_url = subscriptions_url;
}
public String getOrganizations_url() {
return organizations_url;
}
public void setOrganizations_url(String organizations_url) {
this.organizations_url = organizations_url;
}
public String getRepos_url() {
return repos_url;
}
public void setRepos_url(String repos_url) {
this.repos_url = repos_url;
}
public String getEvents_url() {
return events_url;
}
public void setEvents_url(String events_url) {
this.events_url = events_url;
}
public String getReceived_events_url() {
return received_events_url;
}
public void setReceived_events_url(String received_events_url) {
this.received_events_url = received_events_url;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public boolean isSite_admin() {
return site_admin;
}
public void setSite_admin(boolean site_admin) {
this.site_admin = site_admin;
}
}
}
2,POST请求参数及响应实体类:
public class UserModel {
private String userName;
private String userPwd;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPwd() {
return userPwd;
}
public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
}
}
public class ResponseModel<T> implements Serializable {
//请求结果响应码:0表示服务器返回成功,其它表示失败
private int code;
//信息提示,如成功则提示操作成功,失败则提示失败原因
private String message;
//服务器返回的数据
private T result;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public T getResult() {
return result;
}
public void setResult(T result) {
this.result = result;
}
}
第三步:在代码中实现网络请求:
public class RetrofitActivity extends AppCompatActivity implements View.OnClickListener {
private Button retrofit_get;
private Button retrofit_post;
private TextView result_tv;
private static final String GET_BASE_URL = "https://api.github.com/";
private static final String POST_BASE_URL = "http://192.168.2.13:8083/";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_retrofit);
initViews();
}
private void initViews() {
this.result_tv = (TextView) findViewById(R.id.result_tv);
this.retrofit_get = (Button) findViewById(R.id.retrofit_get);
this.retrofit_post = (Button) findViewById(R.id.retrofit_post);
this.retrofit_get.setOnClickListener(this);
this.retrofit_post.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.retrofit_get:
requestByGET("ldm520");
break;
case R.id.retrofit_post:
UserModel model = new UserModel();
model.setUserName("admin");
model.setUserPwd("123456");
requestByPOST(model);
break;
}
}
/**
* @description 通过GET方法进行网络请求
* @author ldm
* @time 2017/4/28 10:38
*/
private void requestByGET(String user) {
//获取实例
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(GET_BASE_URL)//设置baseUrl
.addConverterFactory(GsonConverterFactory.create())//添加JSON对应转换器
.build();
//通过Retrofit.create()方法获取api
RetrofitApi api = retrofit.create(RetrofitApi.class);
//完整的get请求地址就是:https://api.github.com/users/ldm520/repos
Call<List<GithubModel>> responseCall = api.getUserInfo(user);
//采用异步请求
responseCall.enqueue(new Callback<List<GithubModel>>() {
@Override
public void onResponse(Call<List<GithubModel>> call, Response<List<GithubModel>> response) {
//获取响应结果
List<GithubModel> result = response.body();
if (result.size() > 0) {
result_tv.setText("共获取到" + result.size() + "条数据,第一条数据部分内容是:" + "\n blob_url:" + result.get(0).getBlobs_url()
+ "\n description:" + result.get(0).getDescription() + "...");
}
}
@Override
public void onFailure(Call<List<GithubModel>> call, Throwable t) {
Toast.makeText(RetrofitActivity.this, "请求失败", Toast.LENGTH_LONG).show();
}
});
}
/**
* @description 通过POST方法进行网络请求
* @author ldm
* @time 2017/4/28 10:39
*/
private void requestByPOST(UserModel model) {
//获取实例
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(POST_BASE_URL)//设置baseUrl
.addConverterFactory(GsonConverterFactory.create())//添加JSON对应转换器
.build();
//通过Retrofit.create()方法获取api
RetrofitApi api = retrofit.create(RetrofitApi.class);
//完整的get请求地址就是:http://192.168.2.13:8083/mobile/login.json
api.login(model).enqueue(new Callback<ResponseModel<String>>() {
@Override
public void onResponse(Call<ResponseModel<String>> call, Response<ResponseModel<String>> response) {
if (response.body().getCode() == 0) {
Toast.makeText(RetrofitActivity.this, "登录成功", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(RetrofitActivity.this, "登录失败", Toast.LENGTH_LONG).show();
}
}
@Override
public void onFailure(Call<ResponseModel<String>> call, Throwable t) {
Toast.makeText(RetrofitActivity.this, "登录失败", Toast.LENGTH_LONG).show();
}
});
}
}
把简单地布局文件也贴下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp">
<Button
android:id="@+id/retrofit_get"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Retrofit之GET请求"/>
<Button
android:id="@+id/retrofit_post"
android:layout_width="match_parent"
android:layout_marginTop="15dp"
android:layout_height="wrap_content"
android:text="Retrofit之POST请求"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/result_tv"
android:layout_marginTop="10dp"/>
</LinearLayout>
刚开始学习Retrofit,代码潦草,有待优化,继续学习中….。对了,不要忘记在AndroidManifest.xml中添加
<uses-permission android:name="android.permission.INTERNET"/>