领券联盟-定义首页相关接口
前面我们编写了首页的布局
但是呢,分类这些东西还没有数据
我们需要去获取分类数据回来。
我们的应用架构采用了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插件自动生成
填写内容可以参考文档里的返回样例
okay,到这里的话,我们把首页相关的接口定义好了。