智能管家项目总结(1)

       寒假在慕课网(www.imooc.com)买了一门安卓实战课,老师是“刘某人”,讲的比较基础,但很适合Android新手,表示对基础能力提升还是很有帮助的。假期因为一些原因,加上自己的懒惰,花了差不多一个寒假才学完,明天我的大二下学期就开始正式上课了,想想还有点激动呢,哈哈。自己也要认识到,大二啦!专科生的我马上就要实习啦,马上就要成为大三老学长了,╮() 。。。。。。

废话不多说,既然学完了,是时候做个总结的时候了,这160块钱的课可不能白花。就从功能实现的角度进行总结吧。

       先来看下项目的文件结构:

       智能管家项目总结(1)_第1张图片

      

       分别是adapter application entity fragment reciverservice ui utils view,还有一个独立出来的MainActivityMainActivity就是软件的主界面,adapter里面各种自定义适配器,applicationBaseApplication负责整个软件的管理,entity里存储各种实体类,fragment里是装在ViewPager里的四个Fragmentreciver里是自定义广播接收器,service里短信服务,ui存储软件中的很多界面逻辑,utils是项目的工具文件夹,view里自定义布局。此外,项目中还用到一个开源的二维码库。

      



软件主体框架 

TabLayout + ViewPager + Fragment

关键就是下面的代码了

//给ViewPage设置Adapter
mViewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
    @Override
    public Fragment getItem(int position) {
        return mFragments.get(position); //返回需要的对应的Fragment
    }

    @Override
    public int getCount() {
        return mFragments.size();//返回Fragment的数量,也就是ViewPager的数量
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mTitles.get(position);//返回ViewPager的标题
    }
});
mTablayout.setupWithViewPager(mViewPager);//设置Tablayout的点击与ViewPager同步

就是这么简单,就实现了很常见的软件界面。之前还用过很多方法实现类似界面,实现的具体细节早就忘了,看来不总结还是不行的啊,有机会还得再回过头查查。

登录与注册

登录模块使用的是BMOB后端云服务器,很强大的服务器,配置也很简单,只需使用固定的代码将用户名和密码传送给服务器,服务器返回数据进行判断即可。注册也是类似。

private void login() {
    String name = et_name.getText().toString().trim();//用户名
    String password = et_pass.getText().toString().trim();//密码
    if (!TextUtils.isEmpty(name) && !TextUtils.isEmpty(password)) {
        dialog.show();
        user = new BmobUser();
        user.setUsername(name);
        user.setPassword(password);
        user.login(new SaveListener() {
            @Override
            public void done(MyUser myUser, BmobException e) {
                dialog.dismiss();
                if (e == null) {//账号密码正确
                    if (!user.getEmailVerified()) {//账号存在但未在邮箱进行验证
                        Toast.makeText(LoginActivity.this, "请前往邮箱验证", Toast.LENGTH_LONG).show();
                    } else {
                        startActivity(new Intent(LoginActivity.this, MainActivity.class));
                        finish();
                    }
                } else {
                    Toast.makeText(LoginActivity.this, "登录失败:" + e, Toast.LENGTH_LONG).show();
                }
            }
        });
    } else {
        Toast.makeText(this, "输入框不能为空", Toast.LENGTH_LONG).show();
    }
}
注册
if (!TextUtils.isEmpty(name) && !TextUtils.isEmpty(pass) && !TextUtils.isEmpty(password) && !TextUtils.isEmpty(email)
        && !TextUtils.isEmpty(age)) {
    if (pass.equals(password)) {
        MyUser user = new MyUser();
        user.setUsername(name);
        user.setSex(isGender);
        user.setAge(Integer.parseInt(age));
        if (!TextUtils.isEmpty(desc)) {
            user.setIntroduce(desc);
        } else {
            user.setIntroduce("这个人很懒,什么都没有留下!");
        }
        user.setPassword(password);
        user.setEmail(email);
        user.signUp(new SaveListener() {
            @Override
            public void done(MyUser myUser, BmobException e) {
                if (e == null) {
                    finish();
                    L.i("userid:" + myUser.getObjectId());
                    Toast.makeText(RegisteredActivity.this, "注册成功,请前往邮箱验证", Toast.LENGTH_LONG).show();
                } else {
                    Toast.makeText(RegisteredActivity.this, "注册失败:" + e, Toast.LENGTH_LONG).show();
                }
            }
        });
    } else {
        Toast.makeText(this, "两次输入不相同", Toast.LENGTH_LONG).show();
    }
} else {
    Toast.makeText(this, "输入框不能为空", Toast.LENGTH_LONG).show();
}

Bmob的使用真的如此简单,简单到不能再简单。

自定义Dialog

public class CustomDialog extends Dialog {

    /**
     * 标准
     *
     * @param context 上下文
     * @param layout  布局
     * @param style   主题
     */
    public CustomDialog(Context context, int layout, int style) {
        this(context, WindowManager.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.WRAP_CONTENT, layout, style,
                Gravity.CENTER);
    }
    
    /**
     * 有动画
     *
     * @param context 上下文
     * @param width   宽
     * @param height  高
     * @param layout  布局
     * @param style   主题
     * @param gravity 方位
     * @param anim    动画
     */
    public CustomDialog(Context context, int width, int height, int layout,
                        int style, int gravity, int anim) {
        super(context, style);

        setContentView(layout);
        Window window = getWindow();
        WindowManager.LayoutParams params = window.getAttributes();
        params.width = WindowManager.LayoutParams.MATCH_PARENT;
        params.height = WindowManager.LayoutParams.WRAP_CONTENT;
        params.gravity = gravity;
        window.setAttributes(params);
        window.setWindowAnimations(anim);
    }

    /**
     * 无动画
     *
     * @param context 上下文
     * @param width   宽
     * @param height  高
     * @param layout  布局
     * @param style   主题
     * @param gravity 方位
     */
    public CustomDialog(Context context, int width, int height, int layout,
                        int style, int gravity) {
        this(context, width, height, layout, style, gravity,
                R.style.pop_anim_style);
    }
}

然后在代码中dialog.setCancelable(BOOLEAN)里使用true/false控制dialog的显示和隐藏 。

     软件github下载地址:https://github.com/SunnyGZY/SmartButler




你可能感兴趣的:(android)