发表于: 2018-04-26 09:25:19
2 1005
写在前面的话:
昨天因为在忙别的事,只有晚上肝了一会儿代码,之前说要做的东西(任务三)就没来得及做了。不过正好,任务二昨天被师兄审核出了挺多问题的,我算是把他们逐个解决了。因为只是昨晚凌晨做的,所以今天也还没做什么。
昨天完成的事:
修复了挺多的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) {
@Overridepublic 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,因为我这边安装实际上是没有什么问题的…任务三的内容我也做了一点,麻烦师兄审核了。
评论