跳至主要內容

定义首页相关接口


领券联盟-定义首页相关接口

前面我们编写了首页的布局

领券联盟-编写首页布局open in new window

但是呢,分类这些东西还没有数据

我们需要去获取分类数据回来。

我们的应用架构采用了mvp架构

图片描述
图片描述

presenter通过接口更新view

比如说,View层向presenter层发起一个获取分类的调用,Presenter去处理 ,通过api获取到数据,那怎么通知UI更新呢?通过UI注册过来的接口即可。

接下来我们定义一下接口

接口分析

对于Presenter我们也定义相关的接口,在创建的时候返回接口,这样子就不用暴露实现方式了。而View层直接通过Presenter的接口就可以调用它相关的实现内容了。

对于首页来说,只有一个功能,就是获取分类。

有同学会说,那下面的内容怎么获取呢?

我们下面的具体内容,会根据特定的分类获取,而交给特定页面的presenter,分开来。

当然啦,也可以写到一起。就看你怎么去理解,就像画素描一样,你怎么理解结构。每个人的看法不一定一样,但是画出来的效果是一样的,因为理论是一样的。

除了获取分类以外,还要注册View的回调接口呀,要不怎么通知UI呢,对吧!

对于首页的Persenter,我们叫Homepreseter,接口就叫IHomePresenter。

分析完了 Presenter的接口,我们看看通知View更新的接口

命名:IHomeCallback

接口以I开头,这个I则是interface的意思,也就是接口的意思。

对于获取分类,有这些状态

  • 获取成功
  • 获取失败(一般是网络原因)
  • 内容为空
  • 加载中

所以,我们需要定义这些方法

代码

IHomePresenter.java

public interface IHomePresenter  {
    /**
     * 获取商品分类
     */
    void getCategories();

    /**
     * 注册UI通知接口
     *
     * @param callback
     */
    void registerViewCallback(IHomeCallback callback);

    /**
     * 取消UI通知的接口
     *
     * @param callback
     */
    void unregisterViewCallback(IHomeCallback callback);
    
}

UI回调接口

IHomeCallback.java


public interface IHomeCallback  {

    void onCategoriesLoaded(Categories categories);

    void onNetworkError();

    void onLoading();

    void onEmpty();
    
}

这里的Categories

是一个bean类,如下:

package com.sunofbeaches.taobaounion.model.domain;

import java.util.List;

public class Categories {


    /**
     * success : true
     * code : 10000
     * message : 获取分类成功.
     * data : [{"id":9660,"title":"推荐"},{"id":9649,"title":"食品"}]
     */

    private boolean success;
    private int code;
    private String message;
    private List<DataBean> data;

    public boolean isSuccess() {
        return success;
    }

    public void setSuccess(boolean success) {
        this.success = success;
    }

    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 List<DataBean> getData() {
        return data;
    }

    public void setData(List<DataBean> data) {
        this.data = data;
    }

    public static class DataBean {
        /**
         * id : 9660
         * title : 推荐
         */

        private int id;
        private String title;

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }

        @Override
        public String toString() {
            return "DataBean{" +
                    "id=" + id +
                    ", title='" + title + '\'' +
                    '}';
        }
    }

    @Override
    public String toString() {
        return "Categories{" +
                "success=" + success +
                ", code=" + code +
                ", message='" + message + '\'' +
                ", data=" + data +
                '}';
    }
}

可以通过GsonFormat插件自动生成

填写内容可以参考文档里的返回样例

阳光沙滩商城的API文档open in new window

okay,到这里的话,我们把首页相关的接口定义好了。