常用工具类,java函数糖,安卓函数糖
没整到jcenter上,暂时就用aar包吧,也挺省劲:下载地址
下载下来文件名是:ayo-lang.aar,拷到libs目录里
然后在build.gradle里引入:
repositories {
flatDir {
dirs 'libs'
}
}
compile(name:'ayo-lang', ext:'aar')
- 第三方依赖:
- fastjson:compile 'com.alibaba:fastjson:1.2.8',请注意版本
初始化在Application.onCreate()里
package com.cowthan.sample;
import android.app.Application;
import org.ayo.Ayo;
public class App extends Application{
public static Application app;
@Override
public void onCreate() {
super.onCreate();
app = this;
//初始化AyoSDK
Ayo.init(this, "ayo", true, true);
}
}
要访问全局上下文,可以使用App.app
或Ayo.context
- 常用工具类
- Lang
- 集合工具类 Lists
- 字符串工具类 Strings
- 安卓系统Intent
- 手机信息访问
- App信息访问
- 日期工具类
- IP地址
java语法糖,函数糖,一般都在org.ayo.lang中
Lang.isEmpty(String)
Lang.isEmpty(Collection<?>)
Lang.isNull(Object)
还有对应的isNotEmpty, isNotNull
Lang.count(List或者数组,或者String)
Lang.equals(o1, o2)
Lang.toString(o1)
Lang.equalsIgnoreCase(String, String)
String s = Lang.snull("可能为null的字符串", "如果为null,则返回这个");
//数组和List的创建
String[] ss = Lang.array("A","B","C");
List<Object> list = Lang.list("true", "23", "ABC");
List<Object> list = Lists.newArrayList("true", "23", "ABC");
Set<Object> set= Lang.set("true", "23", "ABC");
//contains
contains:针对数组和List,Set,数组
containsKey和containsValue:针对map
//元素访问,无则给null
Object ele = Lists.lastElement(list); //最后一个元素
Object ele = Lists.firstElement(list); //第一个元素
//元素筛选
List<T> list = Lists.killTraitors(List<T> ours, List<T> traitors); //从ours中删掉traitor包含的元素,基于contains和equals方法
//列表合并
List<T> list = Lists.combine(List<T> list1, List<T> list2); //list1和list2合并为一个list
//遍历
Lists.each(list, new OnWalk<String>() {
@Override
public boolean process(int index, String s, int total) {
//index是下标, s是当前元素,total是一共几个
}
});
//克隆:返回一个新list,但元素还是相同的引用
List<T> list = Lists.combine(List<T> list1)
List<T> list = Lists.combine(T[] arr)
//遍历并删除元素:删除为null的字符串
//注意,内部实现是复制了一份list,然后遍历新list,在原list基础上做remove
List<Object> list = Lang.list("true", "23", "ABC", null);
Lists.remove(list, new OnWalk<String>() {
@Override
public boolean process(int index, String s, int total) {
if(s == null) return true;
return false;
}
});
//类型转换,如果出现异常,则返回对应类型的0
int i = Lang.toInt("23");
long l = Lang.toLong("23")
double d = Lang.toDouble("23.3");
//日期
String date = Lang.toDate("yyyy-MM-dd", "1547232323"); //参数2是秒数,String类型
String date = Lang.toDate("yyyy-MM-dd", 1547232323); //参数2是秒数,long类型
String date = Lang.toDate("yyyy-MM-dd", new Date());
//时间戳:当前毫秒
long timestamp = Lang.getTimeStamp();
//读取输入流
String s = Lang.fromStream(InputStream inputStream);
//拼接
List<String> list = Lang.list("true", "23", "ABC", null);
String s = fromList(list, ",", true); //返回true, 23, abc
s = fromList(list, ",", false); // 返回true, 23, abc, ,
fromArray, fromSet也是一个道理
//炸裂
String[] arr = Strings.split(src, delemeter); //按分隔符炸
List<String> list = String.split(较长字符串, 一个元素最长多少); //按长度炸
//比较常用的字符串格式判断
//中英文相关
//全角半角相关
Phone类代表当前手机,提供了对手机的访问
Phone.isEmulator(); //是否模拟器
Phone.getPhoneNumber(); //得到手机号,一般得不到
Phone.getCpuInfo(); //得到当前cpu信息
Phone.getDeviceId(); //综合多种方式得到一个唯一的设备ID
Phone.getAccesstype(); //得到当前联网方式
Phone.getMac(); //得到Mac地址,需要权限:ACCESS_WIFI_STATE
Phone.getLocAddress(); //得到当前IP地址,可能不是真正的网卡IP
TheApp类代表当前应用,提供了对应用的访问
TheApp.getAppVersionName(); //得到版本名
TheApp.getAppVersionCode(); //得到版本号
TheApp.isServiceRunning(Service的class); //查看指定service是否在运行
怎么知道当前app是否进入了后台?
本来看到一个库,说是五种方法判断程序进入前台还是后台,但试了试,怎么这么卡呢 https://github.com/wenmingvs/AndroidProcess
具体代码没看,但鉴于并没有一个receiver机制可以知道这个信息,所以估计是做了大循环, 为了不做大循环,初步估计得记录所有Activity的当前状态才行
这个工作如果要做,就在TheApp里做
基于FastJson,注意,没有用type或者TypeToken相关的,怕接口不友好
List<Bean> list = JsonUtils.getBeanList(json, Bean.class);
Bean bean = JsonUtils.getBean(json, Bean.class);
###11 安卓提供的Intent和Content,Receiver等: SystemIntent和OS类
打开相机,打开设置,打电话,打开浏览器等,暂时不整理了,因为: 这个类是要是删除的,因为现在对外接口不够友好,但因为之前代码还有用,所以暂时留着
要作为代替的类是:OS,表示当前系统,请优先使用这个
//震动
Lang.i_am_cold();
//读取异常
String s = Lang.readThrowable(throwable);
提供了解析图片的基本方法
Observable和Observer,以组件形式提供,而非基类形式
///发布者
protected Observable observable = new Observable();
public Observable getObservable(){
return observable;
}
///通知订阅者
getObservable().notifyDataChanged(this, 任意数据);
///订阅者
v.getObservable().addObserver(new Observer() {
@Override
public void update(Observable observable, Object src, Object data) {
setNotify(data.toString());
}
});
Lang.log系列
Lang.raise
基于fastjson:compile 'com.alibaba:fastjson:1.2.8'
Md5Utils
DES