mvp模式相信大家都很熟悉了,如果有不熟悉的同学可以在网上搜索,一搜一大把..........
UML图:
基类
IModle类
public interface IModle {
}
IView类
public interface IView {
/**
* 显示进度条
* @param msg 进度条加载内容
*/
void showLoding(String msg);
/**
* 隐藏进度条
*/
void hideLoding();
}
IPresenter类
public interface IPresenter <V extends IView>{
/**
* presenter和对应的view绑定
* @param mvpView 目标view
*/
void attachView(V mvpView);
/**
* presenter与view解绑
*/
void detachView();
}
回调监听CallBack
public interface CallBack <T> {
void onSuccessful(T t);//成功了就回调这个方法,可以传递任何形式的数据给调用者
void onFaild(String errorMsg);//失败了就调用这个方法,可以传递错误的请求消息给调用者
}
定义契约类
关于数据库操作的M层、V层、P层的接口放入契约类中方便管理。
public class SqlTestContract {
public interface ISqlModle extends IModle {
//定义数据库操作方法
//增加
void insertUser (Long id , String name, String age,String sex, String salary);
//查询
//根据名字查询
void queryUserByName(String name , OnHttpCallBack<List<User>> callBack);
//查询所有
void queryAllUser(OnHttpCallBack<List<User>> callBack);
//修改
void updataUser(Long id,String name, String age,String sex, String salary);
//删除
void deleteUser(Long id);
}
public interface ISqlView extends IView {
void showData(List<User> users);
void showInfo(String info);
String getUserName();
String getAge();
Long getUserId();
}
public interface ISqlPresenter{
void insterUser();
void queryUser();
void queryUserByName();
void updataUser();
void deleteUser();
}
}
mvp实现
M层的实现
public class SqlTestModle implements SqlTestContract.ISqlModle {
UserDao dao = GreenDaoManager.getInstance().getDaoSession().getUserDao();
//增加
@Override
public void insertUser(Long id, String name, String age) {
User mUser = new User(id,name,age);
dao.insert(mUser);
}
@Override
public void queryUserByName(String name, OnHttpCallBack<List<User>> callBack) {
List<User> users = dao.queryBuilder().where(UserDao.Properties.Name.eq(name)).build().list();
if (users != null && users.size()>0){
callBack.onSuccessful(users);
}else {
callBack.onFaild("无数据");
}
}
@Override
public void queryAllUser(OnHttpCallBack<List<User>> callBack) {
List<User> users = dao.loadAll();
if (users != null && users.size()>0){
callBack.onSuccessful(users);
}else {
callBack.onFaild("无数据");
}
}
@Override
public void updataUser(Long id,String name, String age) {
User user = dao.queryBuilder().where(UserDao.Properties.Id.eq(id)).build().unique();
if (user!=null){
user.setName(name);
user.setAge(age);
dao.update(user);
}
}
@Override
public void deleteUser(Long id) {
User user = dao.queryBuilder().where(UserDao.Properties.Id.eq(id)).build().unique();
if (user != null){
dao.delete(user);
}
}
}
P层实现
public class SqlTestPresenter extends BasePresenter<SqlTestContract.ISqlView> implements SqlTestContract.ISqlPresenter {
private SqlTestModle sqlTestModle;
private SqlTestContract.ISqlView sqlView = getMvpView();
public SqlTestPresenter(SqlTestModle modle){
this.sqlTestModle = modle;
}
@Override
public void insterUser() {
checkViewAttach();
sqlTestModle.insertUser(null,sqlView.getUserName(),sqlView.getAge());
}
@Override
public void queryUser() {
sqlView.showLoding("正在查询.....");
sqlTestModle.queryAllUser(new OnHttpCallBack<List<User>>() {
@Override
public void onSuccessful(List<User> users) {
sqlView.showData(users);
sqlView.hideLoding();
}
@Override
public void onFaild(String errorMsg) {
sqlView.showInfo(errorMsg);
sqlView.hideLoding();
}
});
}
@Override
public void queryUserByName() {
sqlView.showLoding("正在查询.....");
sqlTestModle.queryUserByName(sqlView.getUserName(), new OnHttpCallBack<List<User>>() {
@Override
public void onSuccessful(List<User> users) {
sqlView.showData(users);
sqlView.hideLoding();
}
@Override
public void onFaild(String errorMsg) {
sqlView.showInfo(errorMsg);
sqlView.hideLoding();
}
});
}
@Override
public void updataUser() {
//sqlView.showLoding("正在查询.....");
sqlTestModle.updataUser(sqlView.getUserId(),sqlView.getUserName(),sqlView.getAge());
}
@Override
public void deleteUser() {
sqlTestModle.deleteUser(sqlView.getUserId());
}
}
在activity中使用
public class SqlTestActivity extends AppCompatActivity implements SqlTestContract.ISqlView {
@BindView(R.id.insert)
Button insert;
private ProgressDialog mProgressDialog;
private SqlTestPresenter sqlTestPresenter;
private String userName;
private String userAge;
private Long userId;
private String TAG = "SqlTestActivity";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sql);
ButterKnife.bind(this);
initView();
}
private void initView(){
sqlTestPresenter = new SqlTestPresenter(new SqlTestModle());
//绑定view
sqlTestPresenter.attachView(this);
//调用方法
sqlTestPresenter.queryUser();
}
@Override
protected void onDestroy() {
super.onDestroy();
//解除绑定
sqlTestPresenter.detachView();
}
@Override
public void showData(List<User> users) {
String names = "";
for (int i = 0; i< users.size();i++){
names = names+users.get(i).getName()+",";
}
Log.e(TAG, "showData: "+names);
}
@Override
public void showInfo(String info) {
Toast.makeText(this,"消息:"+info,Toast.LENGTH_LONG);
}
@Override
public String getUserName() {
return userName;
}
@Override
public String getAge() {
return userAge;
}
@Override
public Long getUserId() {
return userId;
}
@Override
public void showLoding(String msg) {
mProgressDialog = ProgressDialog.show(this, "提示", "正在获取中,请稍后...");
}
@Override
public void hideLoding() {
mProgressDialog.hide();
}
@OnClick(R.id.insert)
public void onViewClicked() {
userNameStr = "name"+Math.random()*50;
userAgeStr = "22";
sqlTestPresenter.insterUser();
}
}