public class CommonUtil {
public static void showInfoDialog(Context context, String message) {
showInfoDialog(context, message, "提示", "确定", null);
}
public static void showInfoDialog(Context context, String message,
String titleStr, String positiveStr,
DialogInterface.OnClickListener onClickListener) {
AlertDialog.Builder localBuilder = new AlertDialog.Builder(context);
localBuilder.setTitle(titleStr);
localBuilder.setMessage(message);
if (onClickListener == null)
onClickListener = new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
};
localBuilder.setPositiveButton(positiveStr, onClickListener);
localBuilder.show();
}
public static String md5(String paramString) {
String returnStr;
try {
MessageDigest localMessageDigest = MessageDigest.getInstance("MD5");
localMessageDigest.update(paramString.getBytes());
returnStr = byteToHexString(localMessageDigest.digest());
return returnStr;
} catch (Exception e) {
return paramString;
}
}
/**
* 将指定byte数组转换成16进制字符串
*
* @param b
* @return
*/
public static String byteToHexString(byte[] b) {
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < b.length; i++) {
String hex = Integer.toHexString(b[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
hexString.append(hex.toUpperCase());
}
return hexString.toString();
}
//判断是否有网络
public static boolean isNetWork(Context context){
//得到网络的管理者
ConnectivityManager manager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = manager.getActiveNetworkInfo();
if(info!=null){
return true;
}else{
return false;
}
}
/**
* 判断当前是否有可用的网络以及网络类型 0:无网络 1:WIFI 2:CMWAP 3:CMNET
*
* @param context
* @return
*/
public static int isNetworkAvailable(Context context) {
ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity == null) {
return 0;
} else {
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i].getState() == NetworkInfo.State.CONNECTED) {
NetworkInfo netWorkInfo = info[i];
if (netWorkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
return 1;
} else if (netWorkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
String extraInfo = netWorkInfo.getExtraInfo();
if ("cmwap".equalsIgnoreCase(extraInfo) || "cmwap:gsm".equalsIgnoreCase(extraInfo)) {
return 2;
}
return 3;
}
}
}
}
}
return 0;
}
/**
* 获取现在时间
*
* @return 返回短时间字符串格式yyyy-MM-dd HH:mm:ss
*/
public static String getStringDate() {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(currentTime);
return dateString;
}
/**
* 根据手机的分辨率从 dp 的单位 转成为 px(像素)
*/
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
/**
* 根据手机的分辨率从 px(像素) 的单位 转成为 dp
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
public static int getScreenPicHeight(int screenWidth, Bitmap bitmap) {
int picWidth = bitmap.getWidth();
int picHeight = bitmap.getHeight();
int picScreenHeight = 0;
picScreenHeight = (screenWidth * picHeight) / picWidth;
return picScreenHeight;
}
/**
*
* @param context
* @param button
* @param nornalImageFileName
* @param pressedImageFileName
* @throws Exception
*/
public static void bindViewSelector(Context context, final View view, String nornalImageurl, final String pressedImageUrl) {
final StateListDrawable stateListDrawable = new StateListDrawable();
final BitmapUtils utils = new BitmapUtils(context);
utils.display(view, nornalImageurl, new BitmapLoadCallBack<View>() {
@Override
public void onLoadCompleted(View container, String uri,
Bitmap bitmap, BitmapDisplayConfig config,
BitmapLoadFrom from) {
Drawable normalDrawable = new BitmapDrawable(bitmap);
stateListDrawable.addState(
new int[] { android.R.attr.state_active },
normalDrawable);
stateListDrawable.addState(new int[] {
android.R.attr.state_focused,
android.R.attr.state_enabled }, normalDrawable);
stateListDrawable.addState(
new int[] { android.R.attr.state_enabled },
normalDrawable);
utils.display(container, pressedImageUrl,
new BitmapLoadCallBack<View>() {
@Override
public void onLoadCompleted(View container,
String uri, Bitmap bitmap,
BitmapDisplayConfig config,
BitmapLoadFrom from) {
stateListDrawable.addState(new int[] {
android.R.attr.state_pressed,
android.R.attr.state_enabled },
new BitmapDrawable(bitmap));
view.setBackgroundDrawable(stateListDrawable);
}
@Override
public void onLoadFailed(View container,
String uri, Drawable drawable) {
// TODO Auto-generated method stub
}
});
}
@Override
public void onLoadFailed(View container, String uri,
Drawable drawable) {
}
});
}
private static Drawable createDrawable(Drawable d, Paint p) {
BitmapDrawable bd = (BitmapDrawable) d;
Bitmap b = bd.getBitmap();
Bitmap bitmap = Bitmap.createBitmap(bd.getIntrinsicWidth(),
bd.getIntrinsicHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
canvas.drawBitmap(b, 0, 0, p); // 关键代码,使用新的Paint画原图,
return new BitmapDrawable(bitmap);
}
/** 设置Selector。 本次只增加点击变暗的效果,注释的代码为更多的效果 */
public static StateListDrawable createSLD(Context context, Drawable drawable) {
StateListDrawable bg = new StateListDrawable();
int brightness = 50 - 127;
ColorMatrix cMatrix = new ColorMatrix();
cMatrix.set(new float[] { 1, 0, 0, 0, brightness, 0, 1, 0, 0,
brightness,// 改变亮度
0, 0, 1, 0, brightness, 0, 0, 0, 1, 0 });
Paint paint = new Paint();
paint.setColorFilter(new ColorMatrixColorFilter(cMatrix));
Drawable normal = drawable;
Drawable pressed = createDrawable(drawable, paint);
bg.addState(new int[] { android.R.attr.state_pressed, }, pressed);
bg.addState(new int[] { android.R.attr.state_focused, }, pressed);
bg.addState(new int[] { android.R.attr.state_selected }, pressed);
bg.addState(new int[] {}, normal);
return bg;
}
public static Bitmap getImageFromAssetsFile(Context ct, String fileName) {
Bitmap image = null;
AssetManager am = ct.getAssets();
try {
InputStream is = am.open(fileName);
image = BitmapFactory.decodeStream(is);
is.close();
} catch (IOException e) {
e.printStackTrace();
}
return image;
}
// public static <Params, Progress, Result> void executeAsyncTask(
// AsyncTask<Params, Progress, Result> task, Params... params) {
// if (Build.VERSION.SDK_INT >= 11) {
// task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
// } else {
// task.execute(params);
// }
// }
public static String getUploadtime(long created) {
StringBuffer when = new StringBuffer();
int difference_seconds;
int difference_minutes;
int difference_hours;
int difference_days;
int difference_months;
long curTime = System.currentTimeMillis();
difference_months = (int) (((curTime / 2592000) % 12) - ((created / 2592000) % 12));
if (difference_months > 0) {
when.append(difference_months + "月");
}
difference_days = (int) (((curTime / 86400) % 30) - ((created / 86400) % 30));
if (difference_days > 0) {
when.append(difference_days + "天");
}
difference_hours = (int) (((curTime / 3600) % 24) - ((created / 3600) % 24));
if (difference_hours > 0) {
when.append(difference_hours + "小时");
}
difference_minutes = (int) (((curTime / 60) % 60) - ((created / 60) % 60));
if (difference_minutes > 0) {
when.append(difference_minutes + "分钟");
}
difference_seconds = (int) ((curTime % 60) - (created % 60));
if (difference_seconds > 0) {
when.append(difference_seconds + "秒");
}
return when.append("前").toString();
}
// public static boolean hasToken(Context ct) {
// String token = SharePrefUtil.getString(ct, "token", "");
// if (TextUtils.isEmpty(token)) {
// return false;
// } else {
// return true;
// }
// }
public static void setListViewHeightBasedOnChildren(ListView listView) {
// 获取ListView对应的Adapter
if (listView == null) {
return;
}
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
return;
}
int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); i++) { // listAdapter.getCount()返回数据项的数目
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0); // 计算子项View 的宽高
totalHeight += listItem.getMeasuredHeight(); // 统计所有子项的总高度
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
// listView.getDividerHeight()获取子项间分隔符占用的高度
// params.height最后得到整个ListView完整显示需要的高度
listView.setLayoutParams(params);
}
public static String formatDate() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
return sdf.format(new Date());
}
}
2 获取时间
public class DateTime {
public static String getDate(){
Calendar calendar=Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);//获得年份
int month = calendar.get(Calendar.MONTH)+1;//获取月份
int day = calendar.get(Calendar.DATE);//获取天数
return year + "年" + month + "月" + day + "日" ;
}
public static String getTime() {
Calendar calendar=Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
return hour + "时" + minute + "分" + second + "秒";
}
public static String getDate_Time(){
Calendar calendar=Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);//获得年份
int month = calendar.get(Calendar.MONTH)+1;//获取月份
int day = calendar.get(Calendar.DATE);//获取天数
int hour = calendar.get(Calendar.HOUR);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
return year + "年" + month + "月" + day + "日"
+hour + "时" + minute + "分" + second + "秒";
}
3 日志工具
/**
* LogUtils工具说明:
* 1 只输出等级大于等于LEVEL的日志
* 所以在开发和产品发布后通过修改LEVEL来选择性输出日志.
* 当LEVEL=NOTHING则屏蔽了所有的日志.
* 2 v,d,i,w,e均对应两个方法.
* 若不设置TAG或者TAG为空则为设置默认TAG
*
*/
public class LogUtils {
public static final int VERBOSE = 1;
public static final int DEBUG = 2;
public static final int INFO = 3;
public static final int WARN = 4;
public static final int ERROR = 5;
public static final int NOTHING = 6;
public static final int LEVEL = NOTHING;
public static final String SEPARATOR = ",";
public static void v(String message) {
if (LEVEL <= VERBOSE) {
StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];
String tag = getDefaultTag(stackTraceElement);
Log.v(tag, getLogInfo(stackTraceElement) + message);
}
}
public static void v(String tag, String message) {
if (LEVEL <= VERBOSE) {
StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];
if (TextUtils.isEmpty(tag)) {
tag = getDefaultTag(stackTraceElement);
}
Log.v(tag, getLogInfo(stackTraceElement) + message);
}
}
public static void d(String message) {
if (LEVEL <= DEBUG) {
StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];
String tag = getDefaultTag(stackTraceElement);
Log.d(tag, getLogInfo(stackTraceElement) + message);
}
}
public static void d(String tag, String message) {
if (LEVEL <= DEBUG) {
StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];
if (TextUtils.isEmpty(tag)) {
tag = getDefaultTag(stackTraceElement);
}
Log.d(tag, getLogInfo(stackTraceElement) + message);
}
}
public static void i(String message) {
if (LEVEL <= INFO) {
StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];
String tag = getDefaultTag(stackTraceElement);
Log.i(tag, getLogInfo(stackTraceElement) + message);
}
}
public static void i(String tag, String message) {
if (LEVEL <= INFO) {
StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];
if (TextUtils.isEmpty(tag)) {
tag = getDefaultTag(stackTraceElement);
}
Log.i(tag, getLogInfo(stackTraceElement) + message);
}
}
public static void w(String message) {
if (LEVEL <= WARN) {
StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];
String tag = getDefaultTag(stackTraceElement);
Log.w(tag, getLogInfo(stackTraceElement) + message);
}
}
public static void w(String tag, String message) {
if (LEVEL <= WARN) {
StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];
if (TextUtils.isEmpty(tag)) {
tag = getDefaultTag(stackTraceElement);
}
Log.w(tag, getLogInfo(stackTraceElement) + message);
}
}
public static void e(String tag, String message) {
if (LEVEL <= ERROR) {
StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];
if (TextUtils.isEmpty(tag)) {
tag = getDefaultTag(stackTraceElement);
}
// Log.e(tag,message+" "+getLogInfo(stackTraceElement) );
Log.e(tag,message);
}
}
/**
* 获取默认的TAG名称.
* 比如在MainActivity.java中调用了日志输出.
* 则TAG为MainActivity
*/
public static String getDefaultTag(StackTraceElement stackTraceElement) {
String fileName = stackTraceElement.getFileName();
String stringArray[] = fileName.split("\\.");
String tag = stringArray[0];
return tag;
}
/**
* 输出日志所包含的信息
*/
public static String getLogInfo(StackTraceElement stackTraceElement) {
StringBuilder logInfoStringBuilder = new StringBuilder();
// 获取线程名
String threadName = Thread.currentThread().getName();
// 获取线程ID
long threadID = Thread.currentThread().getId();
// 获取文件名.即xxx.java
String fileName = stackTraceElement.getFileName();
// 获取类名.即包名+类名
String className = stackTraceElement.getClassName();
// 获取方法名称
String methodName = stackTraceElement.getMethodName();
// 获取生日输出行数
int lineNumber = stackTraceElement.getLineNumber();
logInfoStringBuilder.append("[ ");
logInfoStringBuilder.append("threadID=" + threadID).append(SEPARATOR);
logInfoStringBuilder.append("threadName=" + threadName).append(SEPARATOR);
logInfoStringBuilder.append("fileName=" + fileName).append(SEPARATOR);
logInfoStringBuilder.append("className=" + className).append(SEPARATOR);
logInfoStringBuilder.append("methodName=" + methodName).append(SEPARATOR);
logInfoStringBuilder.append("lineNumber=" + lineNumber);
logInfoStringBuilder.append(" ] ");
return logInfoStringBuilder.toString();
}
}
4 MD5加密
public class Md5Utils {
public static final String encodeBy32BitMD5(String source) {
return encrypt(source, false);
}
private static final String encrypt(String source, boolean is16bit) {
if (TextUtils.isEmpty(source)) {
return null;
}
String encryptedStr = null;
try {
MessageDigest digester = MessageDigest.getInstance("MD5");
encryptedStr = convertToHexString(digester.digest(source
.getBytes("utf-8")));
if (is16bit) {
encryptedStr = encryptedStr.substring(8, 24);
}
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return encryptedStr;
}
private static final String convertToHexString(byte data[]) {
int i;
StringBuffer buf = new StringBuffer();
for (int offset = 0; offset < data.length; offset++) {
i = data[offset];
if (i < 0) {
i += 256;
}
if (i < 16) {
buf.append("0");
}
buf.append(Integer.toHexString(i));
}
return buf.toString();
}
}
5 线程池工具
public class ThreadPoolUtils {
private ThreadPoolUtils(){
};
// 定义核心线程数,并行线程数
private static int CORE_POOL_SIZE = 3;
// 线程池最大线程数:除了正在运行的线程额外保存多少个线程
private static int MAX_POOL_SIZE = 200;
// 额外线程空闲状态生存时间
private static int KEEP_ALIVE_TIME = 5000;
// 阻塞队列。当核心线程队列满了放入的
// 初始化一个大小为10的泛型为Runnable的队列
private static BlockingQueue<Runnable> workQueue = new ArrayBlockingQueue<Runnable>(
10);
// 线程工厂,把传递进来的runnable对象生成一个Thread
private static ThreadFactory threadFactory = new ThreadFactory() {
// 原子型的integer变量生成的integer值不会重复
private final AtomicInteger ineger = new AtomicInteger();
@Override
public Thread newThread(Runnable arg0) {
return new Thread(arg0, "MyThreadPool thread:"
+ ineger.getAndIncrement());
}
};
// 当线程池发生异常的时候回调进入
private static RejectedExecutionHandler handler = new RejectedExecutionHandler() {
@Override
public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
// 进行重启操作
}
};
// 线程池ThreadPoolExecutor java自带的线程池
private static ThreadPoolExecutor threadpool;
// 静态代码块,在类被加载的时候进入
static {
threadpool = new ThreadPoolExecutor(CORE_POOL_SIZE, MAX_POOL_SIZE,
KEEP_ALIVE_TIME, TimeUnit.SECONDS, workQueue, threadFactory,
handler);
}
public static void execute(Runnable runnable) {
threadpool.execute(runnable);
}
}