Retrofit基础之:GET与POST请求

来源:互联网 发布:杭州华智软件 编辑:程序博客网 时间:2024/06/05 14:12
 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"/>
0 0
原创粉丝点击