![timg (1).jpg](http://upload-images.jianshu.io/upload_images/3512921-53a62098bf5d5e90.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
我们在进行项目开发的时候可能会遇到一些获取屏幕宽度,dp px的相互转换等问题,我们当然不能每用一次就复制粘贴一次。这时候就需要一个利器-工具类。
这个工具类包含了我们一些公用的方法,只需要一句话我们就可以拿到想要的结果,既精简了我们的代码又省下了我们宝贵的时间。同时,一个好的软件工程师,万能的工具类便是他的护身法宝。
和上一篇文章一样 我只拿出几个特殊比较难理解的方法去讲解其余的我会贴在git上,如果有不懂得可以和我交流,我会把讲解贴到这篇文章里。
Github:https://github.com/EspressoToast/BaseTest
**以下工具类包括:请求权限帮助类,校验帮助类,通用工具类,拼接文字,图片帮助类,MD5加密帮助类,String格式化帮助类,软键盘帮助类等**
##校验
大多数的app都会带有登陆注册功能,所以手机号和密码的校验是我们无法绕过的。
**手机号码校验**
我们先去建立一个枚举类对应几种校验的结果.
```
public enum PhoneNumberCheck{
/**校验通过**/
CHECK_SUCCESS,
/**号码为空**/
NUMBER_IS_NULL,
/**长度不足11位**/
NUMBER_TOO_SHORT,
/**电话号码首位不为1**/
NUMBER_START_NOT_ONE,
/**电话号码不全是数字组成**/
NUMBER_IS_NOT_NUMBER
}
```
接下来是方法.
```
/**
* 手机号码有效性校验
*/
public static PhoneNumberCheck checkPhoneNumber(String phoneNumber){
if(null == phoneNumber || phoneNumber.length() == 0){//号码为空
return PhoneNumberCheck.NUMBER_IS_NULL;
}else if(phoneNumber.length() != 11){//长度不足11位
return PhoneNumberCheck.NUMBER_TOO_SHORT;
}else if(!phoneNumber.startsWith("1")){//首位不为1
return PhoneNumberCheck.NUMBER_START_NOT_ONE;
}else if(!checkIsNumber(phoneNumber)){//不是全数字组成
return PhoneNumberCheck.NUMBER_IS_NOT_NUMBER;
}
return PhoneNumberCheck.CHECK_SUCCESS;
}
```
然后我们就可以通过去调用这个方法根据他的返回值来输出我们的结果了.
**密码校验**
只提供一个正则便可以达到我们想要的效果。
```
//密码正则 必须包含字母,数字,特殊字符三种中的两种组合,并且长度在6-16位
private static final String PWD_REGEX = "(?!^\\d+$)(?!^[a-zA-Z]+$)(?!^[~!@#$%^&*()_+-=]+$).{6,16}";
/**
* 密码正则校验
*
*/
public static boolean checkPwdRegex(String str){
return null != str && str.matches(PWD_REGEX);
}
```
##log工具类
一个合格的项目缺少不了日志管理工具,有了日志管理工具我们可以更加方便的去调试程序。
```
public class Logger {
/**
* Wrapper API for logging
*/
protected final static String TAG = "YourProjectName"; // /< LOG TAG
protected final static int LOG_OUTPUT_MAX_LENGTH = 300;
public static void output(String msg) {
wrapperMsg(msg);
}
/**
* Wrapper the message
*
* @param msg : The message to wrapper
*/
protected static void wrapperMsg(String msg) {
if (null == msg || !isDebugMode()) {
return;
}
while (msg.length() > LOG_OUTPUT_MAX_LENGTH) {
final String tempMsg = msg.substring(0, LOG_OUTPUT_MAX_LENGTH);
msg = msg.substring(LOG_OUTPUT_MAX_LENGTH, msg.length());
Log.d(TAG, tempMsg);
}
StackTraceElement elem = new Throwable().fillInStackTrace()
.getStackTrace()[2];
Log.d(TAG, msg + "(" + elem.getFileName() + " : " + elem.getLineNumber() + ")");
}
public s
我们在进行项目开发的时候可能会遇到一些获取屏幕宽度,dp px的相互转换等问题,我们当然不能每用一次就复制粘贴一次。这时候就需要一个利器-工具类。
这个工具类包含了我们一些公用的方法,只需要一句话我们就可以拿到想要的结果,既精简了我们的代码又省下了我们宝贵的时间。同时,一个好的软件工程师,万能的工具类便是他的护身法宝。
和上一篇文章一样 我只拿出几个特殊比较难理解的方法去讲解其余的我会贴在git上,如果有不懂得可以和我交流,我会把讲解贴到这篇文章里。
Github:https://github.com/EspressoToast/BaseTest
**以下工具类包括:请求权限帮助类,校验帮助类,通用工具类,拼接文字,图片帮助类,MD5加密帮助类,String格式化帮助类,软键盘帮助类等**
##校验
大多数的app都会带有登陆注册功能,所以手机号和密码的校验是我们无法绕过的。
**手机号码校验**
我们先去建立一个枚举类对应几种校验的结果.
```
public enum PhoneNumberCheck{
/**校验通过**/
CHECK_SUCCESS,
/**号码为空**/
NUMBER_IS_NULL,
/**长度不足11位**/
NUMBER_TOO_SHORT,
/**电话号码首位不为1**/
NUMBER_START_NOT_ONE,
/**电话号码不全是数字组成**/
NUMBER_IS_NOT_NUMBER
}
```
接下来是方法.
```
/**
* 手机号码有效性校验
*/
public static PhoneNumberCheck checkPhoneNumber(String phoneNumber){
if(null == phoneNumber || phoneNumber.length() == 0){//号码为空
return PhoneNumberCheck.NUMBER_IS_NULL;
}else if(phoneNumber.length() != 11){//长度不足11位
return PhoneNumberCheck.NUMBER_TOO_SHORT;
}else if(!phoneNumber.startsWith("1")){//首位不为1
return PhoneNumberCheck.NUMBER_START_NOT_ONE;
}else if(!checkIsNumber(phoneNumber)){//不是全数字组成
return PhoneNumberCheck.NUMBER_IS_NOT_NUMBER;
}
return PhoneNumberCheck.CHECK_SUCCESS;
}
```
然后我们就可以通过去调用这个方法根据他的返回值来输出我们的结果了.
**密码校验**
只提供一个正则便可以达到我们想要的效果。
```
//密码正则 必须包含字母,数字,特殊字符三种中的两种组合,并且长度在6-16位
private static final String PWD_REGEX = "(?!^\\d+$)(?!^[a-zA-Z]+$)(?!^[~!@#$%^&*()_+-=]+$).{6,16}";
/**
* 密码正则校验
*
*/
public static boolean checkPwdRegex(String str){
return null != str && str.matches(PWD_REGEX);
}
```
##log工具类
一个合格的项目缺少不了日志管理工具,有了日志管理工具我们可以更加方便的去调试程序。
```
public class Logger {
/**
* Wrapper API for logging
*/
protected final static String TAG = "YourProjectName"; // /< LOG TAG
protected final static int LOG_OUTPUT_MAX_LENGTH = 300;
public static void output(String msg) {
wrapperMsg(msg);
}
/**
* Wrapper the message
*
* @param msg : The message to wrapper
*/
protected static void wrapperMsg(String msg) {
if (null == msg || !isDebugMode()) {
return;
}
while (msg.length() > LOG_OUTPUT_MAX_LENGTH) {
final String tempMsg = msg.substring(0, LOG_OUTPUT_MAX_LENGTH);
msg = msg.substring(LOG_OUTPUT_MAX_LENGTH, msg.length());
Log.d(TAG, tempMsg);
}
StackTraceElement elem = new Throwable().fillInStackTrace()
.getStackTrace()[2];
Log.d(TAG, msg + "(" + elem.getFileName() + " : " + elem.getLineNumber() + ")");
}
public s