Android 常用工具类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gdutxiaoxu/article/details/78033964

Android 常用工具类

Github 地址 CSDN 博客地址

前言

在 Android 开发中,我们经常需要用到各种工具类,比如 SPUills,ListUtils,TimeUtils,StringUtils,ToastUtisl ,FragmentUtils 等等。今天,这篇博客主要介绍我平时在开发中常用到的工具类,希望能给大家带来一点点帮助,后续会不断更新,欢迎大家加入一起维护。

完全退出

写在基类 BaseActivity,然后每个Activity都去继承

public class BaseActivity extends AppCompatActivity {
    public ActivityManagerUtil activityManagerUtil;
    public Activity mActivity;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(getLayoutId() );
        mActivity = this;
        activityManagerUtil = ActivityManagerUtil.getInstance();
        activityManagerUtil.pushOneActivity(this);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //结束Activity&从栈中移除该Activity
        activityManagerUtil.popOneActivity(this);
    }

    protected abstract int getLayoutId();

}

需要完全退出

activityManagerUtil.appExit();

全局异常捕获

只要在Application 初始化即可

public class AndroidUtilsApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        //崩溃处理
        CrashHandlerUtil crashHandlerUtil = CrashHandlerUtil.getInstance();
        crashHandlerUtil.init(this);
        crashHandlerUtil.setCrashTip("很抱歉,程序出现异常,即将退出!");
    }
}

FragmentUtils

  • addFragment
  • hideAddFragment
  • removeFragment
  • replaceFragment
  • popFragment
  • showFragment
  • dispatchBackPress

让 Fragment 处理 Back 事件,“高内聚,低耦合”,一直是我们追求的目标,而这完美地体现了这一点


Utils

  • void init(@NonNull final Application app)

在 Application 初始化的时候调用

  • Application getApp()

获取 Application 对象

该工具类的主要作用是为我们提供一个 Application 对象,而 Application 是 Context 的实现类。这样,我们在写很多工具类的时候,就不需要传入 Context 对象了。比如 ToastUtils,SPUtils 等,方便用快捷


SPUtils

  • get
  • put
  • getLong
  • getInt
  • getString
  • getFloat
  • getShort
  • putInt
  • putString

在该工具里面,它依赖于 Utils getApp() 方法,因此,我们在调用相应方法的时候不需要每次都传入 Context 。方便又快捷


ToastUtils

  • showLongSafe
  • showShortSafe
  • showShort
  • showLong

showLongSafe 方法与 showLong 方法的区别在于 showLongSafe 是安全地,它可以直接在子线程中调用


IntentUtils

  • Intent openFile(String filePath)

用来产生打开各种类型文件的 Intent,包括 图片,音频文件,视频文件,APK,ppt,xls,doc,chm,txt 等文件


DensityUtil

  • dip2px
  • px2dip
  • px2sp
  • sp2px

主要用来处理 dp 与 px 的互转,sp 与 px 的互转等。


AppUtil

  • String getAppVersionName(Context context)

获取app版本名

  • int getAppVersionCode(Context context)

获取app版本号


获取网络状态

NetStateUtils

  • boolean is3G(Context context)

判断是否是 3G 网络

  • isWifi(Context context)

判断是否是 wifi 网络

  • is2G(Context context)

判断是否是 2G 网络

  • boolean isWifiEnabled(Context context)

判断 WiFi 是否打开

  • isNetworkConnected(Context context)

判断是否有网络连接

  • boolean isMobileConnected(Context context)

判断当前是否是移动网络,并且网络是否可用

  • getAPNType(Context context)

获取当前的网络状态:(该方法是自定义的) :没有网络-0:WIFI网络1:4G网络-4:3G网络-3:2G网络-2

  • String getHostIp()

获取本地的 IP 地址

  • boolean isGPSEnabled(Context context)

判断 GPS 是否开启

更多方法,请参考该类,这里不一一说明了。

监听网络变化

android 监听网络状态的变化及实际应用

监听网络变化的,主要有三个广播

<action android:name="android.NET.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.Net.wifi.WIFI_STATE_CHANGED" />
<action android:name="android.net.wifi.STATE_CHANGE" />

需要注意的 android.NET.conn.CONNECTIVITY_CHANGE 这个广播,从 Android 7.0 开始,如果是静态注册的,将无法收到广播。

更多行为变更请查看官网地址


KeyBoardUtil

  • KeyBoardUtil getInstance(Activity activity)

获取实例对象

  • show()

显示输入法

  • hide()

隐藏输入法


StringUtils

  • isEmpty(CharSequence str)

判断是否是空字符串

  • String getStr(String str,String defStr)

获取字符串的值,如果是 null,返回 defStr。当然你也可以调用 getStr(String str) 方法,为 null 的话,返回 “”。

好处:如果字符串为空,则会包空指针异常。调用该方法,我们可以不必每次判断字符串是否为空。

  • length(CharSequence str)

获取字符串的长度。平时我们如果调用 String.length ,如果字符串为空,则会包空指针异常。调用该方法,我们可以不必每次判断字符串是否为空。

  • String capitalizeFirstLetter(String str)

该方法是将字符串的首字母变为大小写

    /**
     * capitalize first letter
     *
     * <pre>
     * capitalizeFirstLetter(null)     =   null;
     * capitalizeFirstLetter("")       =   "";
     * capitalizeFirstLetter("2ab")    =   "2ab"
     * capitalizeFirstLetter("a")      =   "A"
     * capitalizeFirstLetter("ab")     =   "Ab"
     * capitalizeFirstLetter("Abc")    =   "Abc"
     * </pre>
     *
     * @param str
     * @return
     */

ListUtils

在 Android 开发中,对 List 的操作也是非常常见的。

  • getSize(List sourceList)

获取 List 的数量。该方法相比传统的方法,不需要每一次都去判空。

if(sourceList==null){
    return 0;
}else{
    sourceList.size();
}

// 或者 相当于以下代码
sourceList == null ? 0 : sourceList.size()
  • isEmpty(List sourceList)

判断 List 是否为空

  • boolean isEquals(List actual, List expected)

判断两个链表是否相等

  • addDistinctEntry(List sourceList, V entry)

if entry already exist in sourceList, return false, else add it and return true.

  • addDistinctList(List sourceList, List entryList)

add all distinct entry to list1 from list2

  • distinctList(List sourceList)

remove duplicate entries in list

  • getNext(List sourceList, V value)

ArrayUtils

ArrayUtils 里面的方法与 ListUtils 基本是一一对应的,这里就不再一一阐述了


RexUtils

  • checkIdCard(String idCard)

验证身份证号码

  • checkMobile(String mobile)

验证手机号码(支持国际格式,+86135xxxx…(中国内地),+00852137xxxx…(中国香港))

  • boolean checkPhone(String phone)
  • checkEmail

检验是否是电子邮箱。格式是数字,字母,下划线,但不含有 -。

  • checkDigit

验证是否是整数

  • checkDecimals

验证整数和浮点数

  • checkBlankSpace

检验是否是空白字符

  • checkChinese

检验是否是中文

  • checkBirthday

验证日期(日期,格式:1992-09-03,或1992.09.03)

  • 验证 URL 地址

格式:http://blog.csdn.net/gdutxiaoxu/article/details/71732642http://www.csdn.net:80

  • checkIpAddress

匹配 IP 地址

  • phoneNoHide

手机号码,中间4位星号替换

  • cardIdHide

银行卡号,保留最后4位,其他星号替换

关于更多正则表达式的,可以参考我的这一篇博客。 Android 常用正则表达式


DateUtils

  • String getCurrentDate()

获取当前的日期 ,格式为 yyyy-MM-dd

  • String getWeekOfDate(Date date) 获取指定日期是星期几,参数为null时表示获取当前日期是星期日
    • String getWeekOfDate(long timeMiss)

根据毫秒数获取当前是星期几

  • getCurrentDateAndTime

获取当前时间和日期,yyyy-MM-dd HH:mm:ss。


FileUtils

  • File getFileByPath(final String filePath)
  • isFileExists
  • rename
  • isDir
  • isFile
  • createOrExistsDir
  • createOrExistsFile
  • copyOrMoveDir

ZipUtils

  • boolean zipFiles(final Collection resFiles, final String zipFilePath) throws IOException
  • boolean zipFiles(final Collection resFiles, final String zipFilePath, final String comment)
  • boolean unzipFiles(final Collection zipFiles, final String destDirPath) throws IOException

-


题外话

到目前为止,工具类的收集大概这么多,有一些本地还没同步的,后续会不断更新。

Github 地址 CSDN 博客地址

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏开发技术

spring-boot-2.0.3不一样系列之源码篇 - springboot源码一,绝对有值得你看的地方

  上篇:spring-boot-2.0.3不一样系列之shiro - 搭建篇,实现了spring-boot与shiro的整合,效果大家也看到了,工程确实集成了...

55420
来自专栏阿杜的世界

Spring Bean的生命周期管理

Spring Bean存活于容器之中,一般情况下spring bean对context的情况并不了解,如果希望某个bean知道自己在context中的代号:be...

10520
来自专栏java工会

Spring Bean的生命周期管理

14640
来自专栏IT杂记

TThreadedSelectorServer介绍及Direct Memory OOM分析

一、TThreadedSelectorServer线程模型: 该服务会启动1个AcceptThread, 2个SelectorThread(默认为2个,可设置)...

29480
来自专栏菩提树下的杨过

rpc框架之 thrift 学习 2 - 基本概念

thrift的基本构架: ? 上图源自:http://jnb.ociweb.com/jnb/jnbJun2009.html 底层Underlying I/O以上...

27670
来自专栏pangguoming

Android Data Binding(数据绑定)用户指南

1)介绍 这篇文章介绍了如何使用Data Binding库来写声明的layouts文件,并且用最少的代码来绑定你的app逻辑和layouts文件。 Data B...

43480
来自专栏Spark生态圈

[Spark SQL] 源码解析之Analyzer

Analyzer模块将Unresolved LogicalPlan结合元数据catalog进行绑定,最终转化为Resolved LogicalPlan。跟着代码...

13920
来自专栏Android相关

Android中的Proguard使用

之前介绍了如何使用命令行将Jar包根据配置文件进行ProGuard,以及ProGuard的过程,会遇到的问题等。接下来会介绍常用的ProGuard如何配置参数。...

14430
来自专栏上善若水

048android初级篇之定时器Timer和TimerTask的详细使用

Timer是jdk中提供的一个定时器工具,使用的时候会在主线程之外起一个单独的线程执行指定的计划任务,可以指定执行一次或者反复执行多次。

43420
来自专栏技术点滴

策略模式(Strategy)

策略模式(Strategy) 策略模式(Strategy)[Policy] 意图:定义一系列算法,把他们封装起来,并且使他们可以相互替换,使算法可以独立于使用它...

19990

扫码关注云+社区

领取腾讯云代金券