GreenDao学习笔记(建数据库操作MVP模式)

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();
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值