发表于: 2018-04-26 09:25:19

2 852


写在前面的话:

昨天因为在忙别的事,只有晚上肝了一会儿代码,之前说要做的东西(任务三)就没来得及做了。不过正好,任务二昨天被师兄审核出了挺多问题的,我算是把他们逐个解决了。因为只是昨晚凌晨做的,所以今天也还没做什么。

昨天完成的事:

修复了挺多的BUG

1.  获取不到短信:

发现原因是出在代码出现混乱修复过后好了。

case R.id.btn_check:
    String userphone = et_signphone.getText().toString().trim();
    if (!TextUtils.isEmpty(userphone)) {
        btn_check.onClicked();
        BmobSMS.requestSMSCode(userphone, "Bmob验证码", new QueryListener<Integer>() {
            @Override
            public void done(Integer smsId, BmobException ex) {
                if (ex == null) {//验证码发送成功
                    Log.i("smile", "短信id:" + smsId);//用于查询本次短信发送详情
                } else {
                    Toast.makeText(SignActivity.this, "信息发送异常" + ex, Toast.LENGTH_SHORT).show();
                }
            }
        });
    } else
        Toast.makeText(this, "手机号不能为空", Toast.LENGTH_SHORT).show();
    break;

 

2.验证码按钮倒计时

一开始不清楚要实现这一功能,自己调查了一番实现方法,参照了这个帖子

https://blog.csdn.net/zhimingshangyan/article/details/52998344

里面方法有三种

1.Handler 2.自制Button控件内置Handler  3.CountDownTimer


Handler的实现容易导致内存泄漏,而且复杂,所以在这里我选择了CountDownTimer,但是我又不想照抄别人的,所以自己第一次试着自定义包装控件。

public class CountDownButton extends android.support.v7.widget.AppCompatButton{

    CountDownTimer downTimer;
    boolean runningFlag = false;

    public CountDownButton(Context context) {
        super(context);
    }

    public CountDownButton(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CountDownButton(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public void onClicked() {

        //不在倒数时
        if (!runningFlag) {
            runningFlag = true;
            downTimer = new CountDownTimer(60 * 1000, 1000) {
                @Override

                public void onTick(long l){

     CountDownButton.this.setText(String.format(getResources().getString(R.string.countdown_time), l / 1000));

  }

 
                @Override
                public void onFinish() {
                    runningFlag = false;
                    CountDownButton.this.setClickable(true);
                    CountDownButton.this.setText("重新发送");
                }
            };
            downTimer.start();
        }
        CountDownButton.this.setClickable(!runningFlag);
    }
}

 

其中遇到的问题:

1.     如何解决倒计时进行时不可以使用按钮:

设置一个Flag,根据不同倒计时进行状态来进行给该控件setClickable


2.     如何解决setText中含单位计算时的Do not concatenate text displayed with setText.警告:

使用规范格式(%d%f)的字符串来代替,在strings.xml中进行声明,再使用String.format

<string name="countdown_time">%1$d 秒</string>


3.     自定义控件的android.view.InflateException错误:

自定义控件继承的父类的构造方法需全部导入,否则引用的时候就会报错。


3.Toolbar布局的修整

预览:

经过修整后我给Toolbar设置了一个Navigation,剩下部分用LinearLayout进行包装,就不会出现之前那样的布局混乱的问题了。

4.手机号码的正则表达式验证

在师兄提出了这个问题后我加上了一个Util工具类来解决这个问题,也顺带解决了密码的格式验证问题,得知这种处理方法实在是受益匪浅:

(手机号的验证只进行了国内手机的验证,结构为联通/移动/电信开头+任意8个数字)

public class CheckUtils {
    private CheckUtils() {}
    public static boolean isPhone(String phone){
        String regex = "((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,2-3,7-8]))\\d{8}$";
        return phone.trim().matches(regex);
    }

    public static boolean isPassword(String pwd){
        String regex = ".{6,18}";
        return pwd.trim().matches(regex);
    }
}

 

今天要做的事:

首页布局(任务三)的基本实现。

其他:

今天也把文件放整齐一点了,基本上BUG是没什么了吧?不过我不知道师兄为什么安装不了项目展示的apk,因为我这边安装实际上是没有什么问题的任务三的内容我也做了一点,麻烦师兄审核了。


返回列表 返回列表
评论

    分享到