Android通过网络接口实现数据传递

自定义数据传递请参考链接:

https://blog.csdn.net/weixin_42230348/article/details/103069707

1、导入依赖

导入方式请参考链接:https://blog.csdn.net/weixin_42230348/article/details/103069707

implementation 'com.squareup.retrofit2:retrofit:2.6.2'
implementation 'com.squareup.retrofit2:converter-gson:2.6.2'

2、安装GsonFormat插件:File——>Settings…

在这里插入图片描述

3、新建network包,在下面定义一个接口(ApiDemoService)和数据数据实体类(Repo),具体实现如下:

(1)接口(ApiDemoService)

package com.wmc.loginapplication.network;

import java.util.List;

import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Path;

public interface ApiDemoService {

    @GET("users/{user}/repos") //拼接地址:https://api.github.com/users/user/repos
    Call<List<Repo>> listRepos(@Path("user") String user);

    @GET("users/{user}/repos")
    Call<List<Repo>> getRepos(@Path("user") String user);
}

(2)需要传递的数据实体Repo:下载接口数据;利用GsonFormat插件转换json数据为实体类
在这里插入图片描述
右击空白——>Generate…
在这里插入图片描述
在这里插入图片描述
再用同样的方式给Repo类添加一个toString()方法
ps:此处用一分钟的操作完成一个小时的工作,感受网络接口的强大吧~~~~~~

package com.wmc.loginapplication.network;

import com.google.gson.annotations.SerializedName;

public class Repo {

    /**
     * id : 64619295
     * node_id : MDEwOlJlcG9zaXRvcnk2NDYxOTI5NQ==
     * name : bitmap-fonts
     * full_name : user/bitmap-fonts
     * private : false
     * owner : {"login":"user","id":14959,"node_id":"MDQ6VXNlcjE0OTU5","avatar_url":"https://avatars2.githubusercontent.com/u/14959?v=4","gravatar_id":"","url":"https://api.github.com/users/user","html_url":"https://github.com/user","followers_url":"https://api.github.com/users/user/followers","following_url":"https://api.github.com/users/user/following{/other_user}","gists_url":"https://api.github.com/users/user/gists{/gist_id}","starred_url":"https://api.github.com/users/user/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/user/subscriptions","organizations_url":"https://api.github.com/users/user/orgs","repos_url":"https://api.github.com/users/user/repos","events_url":"https://api.github.com/users/user/events{/privacy}","received_events_url":"https://api.github.com/users/user/received_events","type":"User","site_admin":false}
     * html_url : https://github.com/user/bitmap-fonts
     * description : Monospaced bitmap fonts for X11, good for terminal use.
     * fork : true
     * url : https://api.github.com/repos/user/bitmap-fonts
     * forks_url : https://api.github.com/repos/user/bitmap-fonts/forks
     * keys_url : https://api.github.com/repos/user/bitmap-fonts/keys{/key_id}
     * collaborators_url : https://api.github.com/repos/user/bitmap-fonts/collaborators{/collaborator}
     * teams_url : https://api.github.com/repos/user/bitmap-fonts/teams
     * hooks_url : https://api.github.com/repos/user/bitmap-fonts/hooks
     * issue_events_url : https://api.github.com/repos/user/bitmap-fonts/issues/events{/number}
     * events_url : https://api.github.com/repos/user/bitmap-fonts/events
     * assignees_url : https://api.github.com/repos/user/bitmap-fonts/assignees{/user}
     * branches_url : https://api.github.com/repos/user/bitmap-fonts/branches{/branch}
     * tags_url : https://api.github.com/repos/user/bitmap-fonts/tags
     * blobs_url : https://api.github.com/repos/user/bitmap-fonts/git/blobs{/sha}
     * git_tags_url : https://api.github.com/repos/user/bitmap-fonts/git/tags{/sha}
     * git_refs_url : https://api.github.com/repos/user/bitmap-fonts/git/refs{/sha}
     * trees_url : https://api.github.com/repos/user/bitmap-fonts/git/trees{/sha}
     * statuses_url : https://api.github.com/repos/user/bitmap-fonts/statuses/{sha}
     * languages_url : https://api.github.com/repos/user/bitmap-fonts/languages
     * stargazers_url : https://api.github.com/repos/user/bitmap-fonts/stargazers
     * contributors_url : https://api.github.com/repos/user/bitmap-fonts/contributors
     * subscribers_url : https://api.github.com/repos/user/bitmap-fonts/subscribers
     * subscription_url : https://api.github.com/repos/user/bitmap-fonts/subscription
     * commits_url : https://api.github.com/repos/user/bitmap-fonts/commits{/sha}
     * git_commits_url : https://api.github.com/repos/user/bitmap-fonts/git/commits{/sha}
     * comments_url : https://api.github.com/repos/user/bitmap-fonts/comments{/number}
     * issue_comment_url : https://api.github.com/repos/user/bitmap-fonts/issues/comments{/number}
     * contents_url : https://api.github.com/repos/user/bitmap-fonts/contents/{+path}
     * compare_url : https://api.github.com/repos/user/bitmap-fonts/compare/{base}...{head}
     * merges_url : https://api.github.com/repos/user/bitmap-fonts/merges
     * archive_url : https://api.github.com/repos/user/bitmap-fonts/{archive_format}{/ref}
     * downloads_url : https://api.github.com/repos/user/bitmap-fonts/downloads
     * issues_url : https://api.github.com/repos/user/bitmap-fonts/issues{/number}
     * pulls_url : https://api.github.com/repos/user/bitmap-fonts/pulls{/number}
     * milestones_url : https://api.github.com/repos/user/bitmap-fonts/milestones{/number}
     * notifications_url : https://api.github.com/repos/user/bitmap-fonts/notifications{?since,all,participating}
     * labels_url : https://api.github.com/repos/user/bitmap-fonts/labels{/name}
     * releases_url : https://api.github.com/repos/user/bitmap-fonts/releases{/id}
     * deployments_url : https://api.github.com/repos/user/bitmap-fonts/deployments
     * created_at : 2016-07-31T22:40:11Z
     * updated_at : 2016-07-31T22:40:23Z
     * pushed_at : 2016-03-13T17:25:23Z
     * git_url : git://github.com/user/bitmap-fonts.git
     * ssh_url : git@github.com:user/bitmap-fonts.git
     * clone_url : https://github.com/user/bitmap-fonts.git
     * svn_url : https://github.com/user/bitmap-fonts
     * homepage : null
     * size : 21727
     * stargazers_count : 0
     * watchers_count : 0
     * language : Shell
     * has_issues : false
     * has_projects : true
     * has_downloads : true
     * has_wiki : true
     * has_pages : false
     * forks_count : 0
     * mirror_url : null
     * archived : false
     * disabled : false
     * open_issues_count : 0
     * license : null
     * forks : 0
     * open_issues : 0
     * watchers : 0
     * default_branch : master
     */

    private int id;
    private String node_id;
    private String name;
    private String full_name;
    @SerializedName("private")
    private boolean privateX;
    private OwnerBean owner;
    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 Object 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 boolean archived;
    private boolean disabled;
    private int open_issues_count;
    private Object license;
    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 getNode_id() {
        return node_id;
    }

    public void setNode_id(String node_id) {
        this.node_id = node_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 boolean isPrivateX() {
        return privateX;
    }

    public void setPrivateX(boolean privateX) {
        this.privateX = privateX;
    }

    public OwnerBean getOwner() {
        return owner;
    }

    public void setOwner(OwnerBean owner) {
        this.owner = owner;
    }

    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 Object getHomepage() {
        return homepage;
    }

    public void setHomepage(Object 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 boolean isArchived() {
        return archived;
    }

    public void setArchived(boolean archived) {
        this.archived = archived;
    }

    public boolean isDisabled() {
        return disabled;
    }

    public void setDisabled(boolean disabled) {
        this.disabled = disabled;
    }

    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 Object getLicense() {
        return license;
    }

    public void setLicense(Object license) {
        this.license = license;
    }

    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 {
        /**
         * login : user
         * id : 14959
         * node_id : MDQ6VXNlcjE0OTU5
         * avatar_url : https://avatars2.githubusercontent.com/u/14959?v=4
         * gravatar_id :
         * url : https://api.github.com/users/user
         * html_url : https://github.com/user
         * followers_url : https://api.github.com/users/user/followers
         * following_url : https://api.github.com/users/user/following{/other_user}
         * gists_url : https://api.github.com/users/user/gists{/gist_id}
         * starred_url : https://api.github.com/users/user/starred{/owner}{/repo}
         * subscriptions_url : https://api.github.com/users/user/subscriptions
         * organizations_url : https://api.github.com/users/user/orgs
         * repos_url : https://api.github.com/users/user/repos
         * events_url : https://api.github.com/users/user/events{/privacy}
         * received_events_url : https://api.github.com/users/user/received_events
         * type : User
         * site_admin : false
         */

        private String login;
        private int id;
        private String node_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 getNode_id() {
            return node_id;
        }

        public void setNode_id(String node_id) {
            this.node_id = node_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;
        }
    }
}

3、因为适配器中的实体为Entity,所以这里要自定义一个实体类

package com.wmc.loginapplication;

import android.os.Parcel;
import android.os.Parcelable;

public class Entity implements Parcelable
{

    private int count;

    private String msg;

    public Entity(int count)
    {
        this.count = count;
    }

    public Entity(int count, String msg)
    {
        this.count = count;
        this.msg = msg;
    }

    public Entity(String msg)
    {
        this.msg = msg;
    }

    public int getCount()
    {
        return count;
    }

    public void setCount(int count)
    {
        this.count = count;
    }

    public String getMsg()
    {
        return msg;
    }

    public void setMsg(String msg)
    {
        this.msg = msg;
    }

    @Override
    public int describeContents() { return 0; }

    @Override
    public void writeToParcel(Parcel dest, int flags)
    {
        dest.writeInt(this.count);
        dest.writeString(this.msg);
    }

    protected Entity(Parcel in)
    {
        this.count = in.readInt();
        this.msg = in.readString();
    }

    public static final Parcelable.Creator<Entity> CREATOR = new Parcelable.Creator<Entity>()
    {
        @Override
        public Entity createFromParcel(Parcel source) {return new Entity(source);}

        @Override
        public Entity[] newArray(int size) {return new Entity[size];}
    };
}

4、主活动相应RefreshActivity相应实现:注释得很详细!认真理解。

package com.wmc.loginapplication;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.os.Bundle;
import android.util.Log;

import com.scwang.smartrefresh.layout.SmartRefreshLayout;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.constant.SpinnerStyle;
import com.scwang.smartrefresh.layout.footer.BallPulseFooter;
import com.scwang.smartrefresh.layout.footer.ClassicsFooter;
import com.scwang.smartrefresh.layout.header.BezierRadarHeader;
import com.scwang.smartrefresh.layout.header.ClassicsHeader;
import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener;
import com.scwang.smartrefresh.layout.listener.OnRefreshListener;
import com.wmc.loginapplication.network.ApiDemoService;
import com.wmc.loginapplication.network.Repo;

import java.util.ArrayList;
import java.util.List;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

public class RefreshActivity extends AppCompatActivity {

    private SmartRefreshLayout refreshLayout ;//刷新布局

    private RecyclerView recyclerView ;//列表布局

    private RecyclerViewListDemoAdapter adapter ;//适配器

    private List<Entity> data ;//要设置的数据
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_refresh);

        recyclerView = findViewById(R.id.recyclerView) ;

        refreshLayout = findViewById(R.id.refreshLayout);

        //设置布局管理器
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        //设置适配器
        adapter = new RecyclerViewListDemoAdapter(this);
        recyclerView.setAdapter(adapter);

        //下拉刷新
        refreshLayout.setRefreshHeader(new ClassicsHeader(this));
        //上拉加载
        refreshLayout.setRefreshFooter(new ClassicsFooter(this));
        //为下来刷新添加事件
        refreshLayout.setOnRefreshListener(new OnRefreshListener() {
            @Override
            public void onRefresh(RefreshLayout refreshlayout) {
                initData();
                refreshlayout.finishRefresh(2000/*,false*/);//传入false表示刷新失败
            }
        });
        //为上拉下载添加事件
        refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {
            @Override
            public void onLoadMore(RefreshLayout refreshlayout) {
                initData();
                refreshlayout.finishLoadMore(2000/*,false*/);//传入false表示加载失败
            }
        });
    }
   
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://api.github.com/")
                .addConverterFactory(GsonConverterFactory.create())//将通过网络地址请求到的json内容添加进来
                .build();


        ApiDemoService service = retrofit.create(ApiDemoService.class) ;//反射机制实例化ApiDemoService接口
        Call<List<Repo>> call = service.listRepos("octocat");//实现接口中的方法

        call.enqueue(new Callback<List<Repo>>() {
            @Override
            public void onResponse(Call<List<Repo>> call, Response<List<Repo>> response) {
                Log.e("----response---" , response.toString()) ;

                List<Repo> repos = response.body() ;//将网络请求的json数据保存到body

                //遍历body区的数据
                for(Repo repo:repos)
                    Entity entity = new Entity(repo.toString()) ;
                    if(data == null){
                        data = new ArrayList<>() ;
                    }
                    data.add(entity) ;
                }
                adapter.addData(data);
            }

            @Override
            public void onFailure(Call<List<Repo>> call, Throwable t) {
                Log.e("---onFailure---", t.getMessage());
            }
        });
    }
}

5、定义适配器RecyclerViewListDemoAdapter实现数据的配置和展示

package com.wmc.loginapplication;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;
import java.util.List;

//自定义适配器
public class RecyclerViewListDemoAdapter extends RecyclerView.Adapter<RecyclerViewListDemoAdapter.ListViewHolder> {
    private List<Entity> data;

    private  Context context ;

    private RecyclerViewActivity.OnItemClickListener onItemClickListener;

    public RecyclerViewListDemoAdapter(Context context)
    {
        this.context = context;
    }

    public void setOnItemClickListener(RecyclerViewActivity.OnItemClickListener onItemClickListener)
    {
        this.onItemClickListener = onItemClickListener;
    }

    public RecyclerViewListDemoAdapter(List<Entity> data)
    {
        this.data = data;
    }


    public void setData(List<Entity> data)
    {
        this.data = data;
        // 刷新数据
        notifyDataSetChanged();
    }
    //为相应逻辑添加数据
    public void addData(List<Entity> entities)
    {
        if (data == null)
        {
            data = new ArrayList<>();
        }
        this.data.addAll(entities);
        notifyDataSetChanged();
    }

    /**
     *创建一个viewHolder并返回
     * @param parent 相当于Item存放的容器
     * @param viewType 指定布局文件的类型
     * @return 返回viewHolder对象
     */
    @NonNull
    @Override
    public ListViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        //指定对应的布局文件
       View view =  LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list_demo,parent,false);
        return new ListViewHolder(view);

    }

    /**
     * 将数据加载到布局文件的控件上
     * @param holder 需要绑定数据的viewHolder
     * @param position 列表数据的下标
     */
    @Override
    public void onBindViewHolder(@NonNull RecyclerViewListDemoAdapter.ListViewHolder holder, final int position) {
        Entity entity = data.get(position);
        holder.textView.setText(entity.getMsg());
        //将绑定的布局设置点击事件
        holder.textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               if(onItemClickListener!=null){
                    onItemClickListener.itemClick(position,v);
               }
            }
        });
    }
    /**
     *返回数据的大小
     * @return
     */
    @Override
    public int getItemCount() {
        return data == null ? 0 : data.size();
    }
    //为了系统复用控件
    static class ListViewHolder extends RecyclerView.ViewHolder
    {
        TextView textView;

        public ListViewHolder(@NonNull View itemView)
        {
            super(itemView);
            // 实例化该控件
            textView = itemView.findViewById(R.id.tv_text);
        }
    }
}

5、主活动布局activity_refresh和数据布局item_list_demo

<?xml version="1.0" encoding="utf-8"?>
<com.scwang.smartrefresh.layout.SmartRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/refreshLayout"
    tools:context=".RefreshActivity">


    <androidx.recyclerview.widget.RecyclerView

        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:overScrollMode="never"
        android:background="#fff" />

</com.scwang.smartrefresh.layout.SmartRefreshLayout>
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <!-- android:lines="5" 每個佈局最多展示5行-->
    <TextView
        android:id="@+id/tv_text"
        android:layout_width="0dp"
        android:lines="5"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:padding="30dp"
        android:textSize="18sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:text="TextView"
        tools:textColor="@color/colorPrimary"
        tools:textSize="30sp" />

    <View
        android:id="@+id/textView7"
        android:layout_width="0dp"
        android:layout_height="2dp"
        android:layout_marginBottom="4dp"
        android:background="#4E0B0B"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/tv_text" />


</androidx.constraintlayout.widget.ConstraintLayout>

OK,代码写完!跑起来看看!
大功告成~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值