Android开发常用的工具类

在日常的工作中整理了一些常用的代码,把它们封装成了一个工具方便调用。

1.将一个实体对象反射成一个Map集合,比如说一个接口要传递的参数非常多,而这些参数本身就封装在一个实体对象里面,上传的参数又往往是使用一个Map集合来拼接接口,这样使用实体类转Map就显得方便了许多。

public class BeanUtils {

    public static Map<String,String> beanToMap(Object object){
        Class c=object.getClass();
        Field[] fields=c.getDeclaredFields();
        Map<String,String> map=new HashMap<>();
        for (Field field : fields) {
            String name=field.getName();
            String value=getValue(object,name)+"";
            map.put(name,value);
        }
        return map;
    }
    public static Object getValue(Object object,String key) {
        String name="get"+key.substring(0,1).toUpperCase()+key.substring(1);
        try {
            Method method = object.getClass().getDeclaredMethod(name, new Class[0]);
            return method.invoke(object, new Object[]{});
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

2.图片相关的工具类

package com.lianjiu.b.common.utils;

import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.BitmapFactory.Options;
import android.graphics.BlurMaskFilter;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Shader;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.View;
import android.view.WindowManager;

import com.lianjiu.b.base.Constant;

import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.util.Calendar;
import java.util.Date;

public class BitmapUtil {
    private final static String TAG = BitmapUtil.class.getSimpleName();
    public static Uri uri;
    public static String fileName = "";

    /**
     * 计算缩放比例
     *
     * filename 图片路径 maxWidth 目标宽度 maxHeight 目标高度
     */
    public static Bitmap scalePicture(String filename, int maxWidth, int maxHeight) {
        Bitmap bitmap = null;
        try {
            Options opts = new Options();
            opts.inJustDecodeBounds = true;
            BitmapFactory.decodeFile(filename, opts);
            int srcWidth = opts.outWidth;
            int srcHeight = opts.outHeight;
            int desWidth = 0;
            int desHeight = 0;

            // 缩放比例
            double ratio = 0.0;

            if (srcWidth > srcHeight) {
                ratio = srcWidth / maxWidth;
                desWidth = maxWidth;
                desHeight = (int) (srcHeight / ratio);
            } else {
                ratio = srcHeight / maxHeight;
                desHeight = maxHeight;
                desWidth = (int) (srcWidth / ratio);
            }
            // 设置输出宽度、高度
            Options newOpts = new Options();
            newOpts.inSampleSize = (int) (ratio) + 1;
            newOpts.inJustDecodeBounds = false;
            newOpts.outWidth = desWidth;
            newOpts.outHeight = desHeight;
            bitmap = BitmapFactory.decodeFile(filename, newOpts);

        } catch (Throwable e) {
            e.printStackTrace();
        }
        return bitmap;
    }

    /**
     * 计算缩放比例
     *
     * srcBitmap 原图 目标宽度 目标高度
     */
    public static Bitmap scalePicture(Bitmap srcBitmap, int maxWidth, int maxHeight) {
        try {
            Bitmap bitmap = null;
            int srcWidth = srcBitmap.getWidth();
            int srcHeight = srcBitmap.getHeight();
            // 计算缩放率,新尺寸除原始尺寸
            float scaleWidth = ((float) maxWidth) / srcWidth;
            float scaleHeight = ((float) maxHeight) / srcHeight;

            // 创建操作图片用的matrix对象
            Matrix matrix = new Matrix();
            // 缩放图片动作
            matrix.postScale(scaleWidth, scaleHeight);
            // 创建新的图片
            bitmap = Bitmap.createBitmap(srcBitmap, 0, 0, srcWidth, srcHeight, matrix, true);
            return bitmap;
        } catch (Throwable t) {
            t.printStackTrace();
            System.gc();
        }
        return srcBitmap;
    }

    public static Bitmap createBitmap(String bmPath, Options opt) {
        try {
            opt.inPreferredConfig = Config.RGB_565;
            opt.inPurgeable = true;
            opt.inInputShareable = true;
            FileInputStream fis = new FileInputStream(bmPath);
            return BitmapFactory.decodeStream(fis, null, opt);
        } catch (Throwable t) {
            LogUtil.log(t);
        }
        return null;
    }

    public static Bitmap createBitmap(Context context, int resId) {
        Bitmap bmp;
        Resources res = context.getResources();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            bmp = BitmapFactory.decodeResource(res, resId);
        } else {
            Options opt = new Options();
            opt.inPreferredConfig = Config.RGB_565;
            /**
             * 如果 inPurgeable 设为True的话表示使用BitmapFactory创建的Bitmap 用于存储Pixel的内存空间在系统内存不足时可以被回收,
             * 在应用需要再次访问Bitmap的Pixel时(如绘制Bitmap或是调用getPixel), 系统会再次调用BitmapFactory decoder重新生成Bitmap的Pixel数组。
             * 为了能够重新解码图像,bitmap要能够访问存储Bitmap的原始数据。
             *
             * 在inPurgeable为false时表示创建的Bitmap的Pixel内存空间不能被回收, 这样BitmapFactory在不停decodeByteArray创建新的Bitmap对象,
             * 不同设备的内存不同,因此能够同时创建的Bitmap个数可能有所不同, 200个bitmap足以使大部分的设备重新OutOfMemory错误。 当isPurgable设为true时,系统中内存不足时,
             * 可以回收部分Bitmap占据的内存空间,这时一般不会出现OutOfMemory 错误。
             * API 21 时被忽略
             */
            opt.inPurgeable = true;
            /**
             * 配合inPurgeable使用,决定bitmap是否可以共享加载图片数据的引用,如果是false重新创建时会使用深层拷贝
             */
            opt.inInputShareable = true;
            bmp = BitmapFactory.decodeResource(res, resId, opt);
        }
        return bmp;
    }

    public static Bitmap createBitmap(Bitmap oriBm) {
        try {
            return Bitmap.createBitmap(oriBm);
        } catch (OutOfMemoryError e) {
            System.gc();
            LogUtil.log(e);
            try {
                LogUtil.e("System.out", "try to creat the bitmap again");
                return Bitmap.createBitmap(oriBm);
            } catch (Throwable t) {
                LogUtil.log(t);
            }
        } catch (Throwable t) {
            LogUtil.log(t);
        } finally {
            System.gc();
        }
        return null;
    }

    public static Bitmap createBitmap(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter) {
        try {
            return Bitmap.createBitmap(source, x, y, width, height, m, filter);
        } catch (OutOfMemoryError e) {
            System.gc();
            LogUtil.log(e);
            try {
                LogUtil.e("System.out", "try to creat the bitmap again");
                return Bitmap.createBitmap(source, x, y, width, height, m, filter);
            } catch (Throwable t) {
                LogUtil.log(t);
            }
        } catch (Throwable t) {
            LogUtil.log(t);
        } finally {
            System.gc();
        }
        return null;
    }

    public static Bitmap createBitmap(int width, int height, Config config) {
        try {
            return Bitmap.createBitmap(width, height, config);
        } catch (OutOfMemoryError e) {
            System.gc();
            LogUtil.log(e);
            try {
                LogUtil.e("System.out", "try to creat the bitmap again");
                return Bitmap.createBitmap(width, height, config);
            } catch (Throwable t) {
                LogUtil.log(t);
            }
        } catch (Throwable t) {
            LogUtil.log(t);
        } finally {
            System.gc();
        }
        return null;
    }

    public static Bitmap createBitmap(Bitmap source, int x, int y, int width, int height) {
        try {
            return Bitmap.createBitmap(source, x, y, width, height);
        } catch (OutOfMemoryError e) {
            System.gc();
            LogUtil.log(e);
            try {
                LogUtil.e("System.out", "try to creat the bitmap again");
                return Bitmap.createBitmap(source, x, y, width, height);
            } catch (Throwable t) {
                LogUtil.log(t);
            }
        } catch (Throwable t) {
            LogUtil.log(t);
        } finally {
            System.gc();
        }
        return null;
    }

    public static Bitmap createBitmap(InputStream is) {
        Options opt = new Options();
        opt.inPreferredConfig = Config.RGB_565;
        opt.inPurgeable = true;
        opt.inInputShareable = true;
        // opt.inSampleSize = 2;
        return BitmapFactory.decodeStream(is, null, opt);
    }

    /** 使用c层代码早图片 */
    public static Bitmap createBitmap(String path) {
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(path);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return createBitmap(fis);
    }

    /** 回收不使用的bitmap */
    public static void recyledBitmap(Bitmap bitmap) {
        try {
            if (bitmap != null) {
                if (!bitmap.isRecycled()) {
                    bitmap.recycle();
                    bitmap = null;
                }
            }
            System.gc();
        } catch (Throwable e) {
            e.printStackTrace();
        }
    }

    /** 获取指定View的截图 */
    public static Bitmap captureView(View view) throws Throwable {
        view.setDrawingCacheEnabled(true);
        view.buildDrawingCache();
        Bitmap bmShare = view.getDrawingCache();
        if (bmShare == null) {
            // 使用反射,强制将mViewFlags设置为正确的数值
            Field mViewFlagsField = View.class.getDeclaredField("mViewFlags");
            mViewFlagsField.setAccessible(true);
            mViewFlagsField.set(view, Integer.valueOf(402685952));
            bmShare = view.getDrawingCache();
        }
        return bmShare;
    }

    /** 获取屏幕的截图 */
    public static String captureView(Context context, String filename) {
        String path = Constant.TEMPORARY_FILE_PATH + filename;
        try {

            WindowManager windowManager = ((Activity) context).getWindowManager();

            Display display = windowManager.getDefaultDisplay();

            int w = display.getWidth();

            int h = display.getHeight();

            Bitmap bmShare = Bitmap.createBitmap(w, h, Config.ARGB_8888);

            // 2.获取屏幕

            View decorview = ((Activity) context).getWindow().getDecorView();

            decorview.setDrawingCacheEnabled(true);

            bmShare = decorview.getDrawingCache();
            CompressFormat format = CompressFormat.JPEG;
            OutputStream stream = new FileOutputStream(path);
            bmShare.compress(format, 100, stream);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return path;
    }

    /**
     * 创建指定bitmap的倒影bitmap
     *
     * @param bitmap
     *            原始的图片
     * @param refMargin
     *            倒影和原图之间的距离
     * @param refLeng
     *            倒影的长度
     */
    public static Bitmap getInvertedImage(Bitmap bitmap, int refMargin, int refLeng) {
        int width = bitmap.getWidth();
        int bmHeight = bitmap.getHeight();
        int height = bmHeight + refMargin + refLeng;
        Bitmap bm = Bitmap.createBitmap(width, height, Config.ARGB_8888);

        Canvas canvas = new Canvas();
        canvas.setBitmap(bm);
        Paint paint = new Paint();
        canvas.drawBitmap(bitmap, 0, 0, paint);

        if (refLeng > 0) {
            Matrix matrix = new Matrix();
            matrix.preScale(1, -1);
            Bitmap refBm = Bitmap.createBitmap(bitmap, 0, bmHeight - refLeng, width, refLeng, matrix, false);
            canvas.drawBitmap(refBm, 0, bmHeight + refMargin, paint);
            refBm.recycle();

            paint.setAntiAlias(true);
            LinearGradient gradient = new LinearGradient(0, bmHeight + refMargin, 0, height, 0xff000000, 0x0000000, Shader.TileMode.CLAMP);
            paint.setShader(gradient);
            paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
            canvas.drawRect(0, bmHeight + refMargin, width, height, paint);
        }

        return bm;
    }

    public static Bitmap getImageReflectionPart(Bitmap bitmap, int refLeng) {
        int width = bitmap.getWidth();
        int bmHeight = bitmap.getHeight();

        Bitmap bm = Bitmap.createBitmap(width, refLeng, Config.ARGB_8888);
        Canvas canvas = new Canvas();
        canvas.setBitmap(bm);
        Paint paint = new Paint();

        Matrix matrix = new Matrix();
        matrix.preScale(1, -1);
        Bitmap refBm = createBitmap(bitmap, 0, 0, width, bmHeight, matrix, true);
        canvas.drawBitmap(refBm, 0, 0, paint);
        refBm.recycle();

        paint.setAntiAlias(true);
        LinearGradient gradient = new LinearGradient(0, 0, 0, refLeng, 0xc0000000, 0x00000000, Shader.TileMode.CLAMP);
        paint.setShader(gradient);
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
        canvas.drawRect(0, 0, width, refLeng, paint);

        return bm;
    }

    /**
     * 生成阴影
     *
     * @param bitmap
     * @param shadow
     * @return
     */
    public static Bitmap getShadowBitmap(Bitmap bitmap, int shadow) {
        if (shadow <= 0) {
            return bitmap;
        }

        BlurMaskFilter filter = new BlurMaskFilter(shadow, BlurMaskFilter.Blur.OUTER);
        Paint shadowPaint = new Paint();
        shadowPaint.setMaskFilter(filter);

        int[] offsetXY = new int[] { shadow, shadow };
        return bitmap.extractAlpha(shadowPaint, offsetXY);
    }

    /**
     * 获取图片的分辨率
     *
     * @param path
     * @return
     * @throws Throwable
     */
    public static int[] getBitmapSize(String path) throws Throwable {
        Options opt = new Options();
        opt.inJustDecodeBounds = true;
        opt.inPreferredConfig = Config.RGB_565;
        opt.inPurgeable = true;
        opt.inInputShareable = true;
        FileInputStream fis = new FileInputStream(path);
        BitmapFactory.decodeStream(fis, null, opt);
        int[] size = new int[] { opt.outWidth, opt.outHeight };
        return size;
    }

    /**
     * TODO 图片按比例大小压缩方法(根据路径获取图片并压缩)
     *
     * @param srcPath
     *            SD卡路径
     * @param reqWidth
     *            需要的宽度
     * @param reqHeight
     *            需要的高度
     * @return Bitmap
     */
    public static Bitmap CompressImageByPath(String srcPath, int reqWidth, int reqHeight) {
        Options op = new Options();
        op.inJustDecodeBounds = true;// 只是读图片的属性
        BitmapFactory.decodeFile(srcPath, op);
        if (reqWidth == 0 && reqHeight == 0) {
            reqWidth = op.outWidth;
            reqHeight = op.outHeight;
        }
        op.inSampleSize = computeSampleSize(op, -1, reqWidth * reqHeight);// 设置缩放比例
        op.inJustDecodeBounds = false;
        op.inPreferredConfig = Config.RGB_565;
        return compressImage(BitmapFactory.decodeFile(srcPath, op), 80);// 压缩好比例大小后再进行质量压缩

    }

    /**
     * 动态计算图片缩放大小的方法
     *
     * @param options
     * @param minSideLength
     * @param maxNumOfPixels
     * @return
     */
    public static int computeSampleSize(Options options, int minSideLength, int maxNumOfPixels) {
        int initialSize = computeInitialSampleSize(options, minSideLength, maxNumOfPixels);

        int roundedSize;
        if (initialSize <= 8) {
            roundedSize = 1;
            while (roundedSize < initialSize) {
                roundedSize <<= 1;
            }
        } else {
            roundedSize = (initialSize + 7) / 8 * 8;
        }

        return roundedSize;
    }

    private static int computeInitialSampleSize(Options options, int minSideLength, int maxNumOfPixels) {
        double w = options.outWidth;
        double h = options.outHeight;

        int lowerBound = (maxNumOfPixels == -1) ? 1 : (int) Math.ceil(Math.sqrt(w * h / maxNumOfPixels));
        int upperBound = (minSideLength == -1) ? 128 : (int) Math.min(Math.floor(w / minSideLength), Math.floor(h / minSideLength));

        if (upperBound < lowerBound) {
            // return the larger one when there is no overlapping zone.
            return lowerBound;
        }

        if ((maxNumOfPixels == -1) && (minSideLength == -1)) {
            return 1;
        } else if (minSideLength == -1) {
            return lowerBound;
        } else {
            return upperBound;
        }
    }

    /**
     *
     * 质量压缩方法
     *
     * bitmap源 options开始压缩的质量 《=100
     *
     * @return 压缩之后的bitmap
     */
    public static Bitmap compressImage(Bitmap bitmap, int options) {
        Bitmap bit = null;
        try {
            if (null == bitmap) {
                return bit;
            }
            ByteArrayOutputStream bout = new ByteArrayOutputStream();
            bitmap.compress(CompressFormat.JPEG, options, bout);// 质量压缩
                                                                        // 100
                                                                        // 表示不压缩
            System.out.println("*****************大少****************:" + bout.toByteArray().length / 1024);
            ByteArrayInputStream isBm = new ByteArrayInputStream(bout.toByteArray());// 把压缩后的数据baos存放到ByteArrayInputStream中
            bit = BitmapFactory.decodeStream(isBm, null, null);// 把ByteArrayInputStream数据生成图片
            bout.flush();
            bout.close();
            isBm.close();

            if (!bitmap.isRecycled()) {
                bitmap.recycle();// 记得释放资源,否则会内存溢出
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return bit;
    }

    public static boolean storageState() {
        String status = Environment.getExternalStorageState();
        if (status.equals(Environment.MEDIA_MOUNTED)) {
            return true;
        } else {
            return false;
        }
    }

    // 压缩并获得流用于上传
    public static InputStream getISByBitmap(Bitmap bitmap) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        // 得到输出流
        bitmap.compress(CompressFormat.PNG, 100, baos);
        // 转输入流
        InputStream isBm = new ByteArrayInputStream(baos.toByteArray());
        return isBm;
    }

    // 根据时间创建名字
    public static String callTime() {

        long backTime = new Date().getTime();

        Calendar cal = Calendar.getInstance();

        cal.setTime(new Date(backTime));

        int year = cal.get(Calendar.YEAR);

        int month = cal.get(Calendar.MONTH) + 1;

        int date = cal.get(Calendar.DAY_OF_MONTH);

        int hour = cal.get(Calendar.HOUR_OF_DAY);

        int minute = cal.get(Calendar.MINUTE);

        int second = cal.get(Calendar.SECOND);

        String time = "" + year + month + date + hour + minute + second;

        return time;

    }

    public static Bitmap getScreenBitmap(View v) {
        View view = v.getRootView();
        view.setDrawingCacheEnabled(true);
        view.buildDrawingCache();
        Bitmap bitmap = view.getDrawingCache();
        bitmap = compressImage(bitmap);
        return bitmap;
    }

    /**
     * 将Bitmap压缩到一定程度
     *
     * @param image
     * @return
     */
    public static Bitmap compressImage(Bitmap image) {
        Bitmap bitmap;
        try {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            image.compress(CompressFormat.JPEG, 100, baos);// 质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
            int options = 100;
            while (baos.toByteArray().length / 1024 > 100) { // 循环判断如果压缩后图片是否大于100kb,大于继续压缩
                baos.reset();// 重置baos即清空baos
                image.compress(CompressFormat.JPEG, options, baos);// 这里压缩options%,把压缩后的数据存放到baos中
                options -= 10;// 每次都减少10
            }
            ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());// 把压缩后的数据baos存放到ByteArrayInputStream中
            bitmap = BitmapFactory.decodeStream(isBm, null, null);// 把ByteArrayInputStream数据生成图片
            isBm.reset();
            isBm.close();
        } catch (Exception e) {
            bitmap = image;
        }

        return bitmap;
    }

    /**
     * 截图功能
     *
     * View v 返回byte[]
     */
    public static byte[] shotScreen(View v) {
        byte[] buff = null;
        Bitmap bitmap = getScreenBitmap(v);
        if (bitmap != null) {
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            bitmap.compress(CompressFormat.JPEG, 100, stream);// (0 -
                                                                        // 100)压缩文件
            buff = stream.toByteArray();
            System.out.println("bitmap got!");
            return buff;
        } else {
            return null;
        }

    }

    public static byte[] bmpToByteArray(final Bitmap bmp, final boolean needRecycle) {
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        bmp.compress(CompressFormat.PNG, 100, output);
        if (needRecycle) {
            bmp.recycle();
        }

        byte[] result = output.toByteArray();
        try {
            output.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

        return result;
    }

    // byte(字节)根据长度转成kb(千字节)和mb(兆字节)
    public static int bytes2kb(long bytes) {
        BigDecimal filesize = new BigDecimal(bytes);
        BigDecimal megabyte = new BigDecimal(1024 * 1024);
        float returnValue = filesize.divide(megabyte, 2, BigDecimal.ROUND_UP).floatValue();
        if (returnValue > 2) {
            return 8;
        } else if (returnValue > 1) {
            return 6;
        }
        BigDecimal kilobyte = new BigDecimal(1024);
        returnValue = filesize.divide(kilobyte, 2, BigDecimal.ROUND_UP).floatValue();
        if (returnValue >= 700) {
            return 4;
        } else if (returnValue >= 500) {
            return 3;
        } else if (returnValue >= 300) {
            return 2;
        } else {
            return 1;
        }
    }

    public static Bitmap compressImage(Bitmap image, int reqWidth, int reqHeight) {

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        image.compress(CompressFormat.JPEG, 100, baos);
        if (baos.toByteArray().length / 1024 > 1024) {// 判断如果图片大于1M,进行压缩避免在生成图片(BitmapFactory.decodeStream)时溢出
            baos.reset();// 重置baos即清空baos
            image.compress(CompressFormat.JPEG, 50, baos);// 这里压缩50%,把压缩后的数据存放到baos中
        }
        ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());
        Options newOpts = new Options();
        // 开始读入图片,此时把options.inJustDecodeBounds 设回true了
        newOpts.inJustDecodeBounds = true;
        Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);
        newOpts.inJustDecodeBounds = false;
        int w = newOpts.outWidth;
        int h = newOpts.outHeight;
        // 现在主流手机比较多是800*480分辨率,所以高和宽我们设置为
        float hh = reqHeight;// 这里设置高度为800f
        float ww = reqWidth;// 这里设置宽度为480f
        // 缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可
        int be = 1;// be=1表示不缩放
        if (w > h && w > ww) {// 如果宽度大的话根据宽度固定大小缩放
            be = (int) (newOpts.outWidth / ww);
        } else if (w < h && h > hh) {// 如果高度高的话根据宽度固定大小缩放
            be = (int) (newOpts.outHeight / hh);
        }
        if (be <= 0)
            be = 1;
        newOpts.inSampleSize = be;// 设置缩放比例
        // 重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了
        isBm = new ByteArrayInputStream(baos.toByteArray());
        bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);
        return compressImage(bitmap);// 压缩好比例大小后再进行质量压缩
    }

    // 写到sdcard中
    public static void write(Bitmap bm) throws IOException {
        if (bm == null) {
            return;
        }
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bm.compress(CompressFormat.PNG, 100, baos);// png类型
        FileOutputStream out = new FileOutputStream(new File(Environment.getExternalStorageDirectory() + File.separator + "tesstttt.png"));
        out.write(baos.toByteArray());
        out.flush();
        out.close();
    }

    /**
     *
     * @param x
     *            图像的宽度
     * @param y
     *            图像的高度
     * @param image
     *            源图片
     * @param outerRadiusRat
     *            圆角的大小
     * @return 圆角图片
     */
    public static Bitmap createFramedPhoto(int x, int y, Bitmap image, float outerRadiusRat) {
        // 根据源文件新建一个darwable对象
        Drawable imageDrawable = new BitmapDrawable(image);

        // 新建一个新的输出图片
        Bitmap output = Bitmap.createBitmap(x, y, Config.ARGB_8888);
        Canvas canvas = new Canvas(output);

        // 新建一个矩形
        RectF outerRect = new RectF(0, 0, x, y);

        // 产生一个红色的圆角矩形
        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setColor(Color.RED);
        canvas.drawRoundRect(outerRect, outerRadiusRat, outerRadiusRat, paint);

        // 将源图片绘制到这个圆角矩形上
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
        imageDrawable.setBounds(0, 0, x, y);
        canvas.saveLayer(outerRect, paint, Canvas.ALL_SAVE_FLAG);
        imageDrawable.draw(canvas);
        canvas.restore();

        return output;
    }

    public static Bitmap revitionImageSize(String path) throws IOException {
        BufferedInputStream in = new BufferedInputStream(new FileInputStream(new File(path)));

        Options options = new Options();
        options.inJustDecodeBounds = true;
        // Bitmap btBitmap=BitmapFactory.decodeFile(path);
        // System.out.println("原尺寸高度:"+btBitmap.getHeight());
        // System.out.println("原尺寸宽度:"+btBitmap.getWidth());
        BitmapFactory.decodeStream(in, null, options);
        in.close();
        int i = 0;
        Bitmap bitmap = null;
        while (true) {
            if ((options.outWidth >> i <= 800) && (options.outHeight >> i <= 800)) {
                in = new BufferedInputStream(new FileInputStream(new File(path)));
                options.inSampleSize = (int) Math.pow(2.0D, i);
                options.inJustDecodeBounds = false;
                bitmap = BitmapFactory.decodeStream(in, null, options);
                break;
            }
            i += 1;
        }
        // 当机型为三星时图片翻转
        // bitmap = Photo.photoAdapter(path, bitmap);
        // System.out.println("-----压缩后尺寸高度:" + bitmap.getHeight());
        // System.out.println("-----压缩后尺寸宽度度:" + bitmap.getWidth());
        return bitmap;
    }

    public static Bitmap getLoacalBitmap(String url) {
        try {
            FileInputStream fis = new FileInputStream(url);
            return BitmapFactory.decodeStream(fis); // /把流转化为Bitmap图片

        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return null;
        }
    }

    /** 手机截屏 */
    public static Bitmap takeScreenShot(Activity activity) {
        // View是你需要截图的View
        View view = activity.getWindow().getDecorView();
        view.setDrawingCacheEnabled(true);
        view.buildDrawingCache();
        Bitmap b1 = view.getDrawingCache();
        // 获取状态栏高度
        Rect frame = new Rect();
        activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
        int statusBarHeight = frame.top;
        System.out.println(statusBarHeight);// 获取屏幕长和高
        int width = activity.getWindowManager().getDefaultDisplay().getWidth();
        int height = activity.getWindowManager().getDefaultDisplay().getHeight();// 去掉标题栏
        // Bitmap b = Bitmap.createBitmap(b1, 0, 25, 320, 455);
        Bitmap b = Bitmap.createBitmap(b1, 0, statusBarHeight, width, height - statusBarHeight);
        view.destroyDrawingCache();
        return b;
    }

    /**
     * @param context
     * @return
     */
    public static int getScreenHeight(Context context) {
        if (null == context) {
            return 0;
        }
        DisplayMetrics dm = new DisplayMetrics();
        dm = context.getApplicationContext().getResources().getDisplayMetrics();
        return dm.heightPixels;
    }



    //api4.2以上才能使用的毛玻璃效果图
        /*private void blur(Context context,Bitmap bkg, View view, float radius) {
            Bitmap overlay = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888);  
            Canvas canvas = new Canvas(overlay);  
            canvas.drawBitmap(bkg, -view.getLeft(), -view.getTop(), null);  
            RenderScript rs = RenderScript.create(context);  
            Allocation overlayAlloc = Allocation.createFromBitmap(rs, overlay);  
            ScriptIntrinsicBlur blur = ScriptIntrinsicBlur.create(rs, overlayAlloc.getElement());  
            blur.setInput(overlayAlloc);  
            blur.setRadius(radius);  
            blur.forEach(overlayAlloc);  
            overlayAlloc.copyTo(overlay);  
            view.setBackground(new BitmapDrawable(context.getResources(), overlay));  
            rs.destroy();  
        }  */

        /**毛玻璃效果图*/
        public static Bitmap fastblur(Bitmap sentBitmap, int radius) {

            // Stack Blur v1.0 from
            // http://www.quasimondo.com/StackBlurForCanvas/StackBlurDemo.html
            //
            // Java Author: Mario Klingemann <mario at quasimondo.com>
            // http://incubator.quasimondo.com
            // created Feburary 29, 2004
            // Android port : Yahel Bouaziz <yahel at kayenko.com>
            // http://www.kayenko.com
            // ported april 5th, 2012

            // This is a compromise between Gaussian Blur and Box blur
            // It creates much better looking blurs than Box Blur, but is
            // 7x faster than my Gaussian Blur implementation.
            //
            // I called it Stack Blur because this describes best how this
            // filter works internally: it creates a kind of moving stack
            // of colors whilst scanning through the image. Thereby it
            // just has to add one new block of color to the right side
            // of the stack and remove the leftmost color. The remaining
            // colors on the topmost layer of the stack are either added on
            // or reduced by one, depending on if they are on the right or
            // on the left side of the stack.
            //
            // If you are using this algorithm in your code please add
            // the following line:
            //
            // Stack Blur Algorithm by Mario Klingemann <mario@quasimondo.com>

            Bitmap bitmap = sentBitmap.copy(sentBitmap.getConfig(), true);

            if (radius < 1) {
                return (null);
            }

            int w = bitmap.getWidth();
            int h = bitmap.getHeight();

            int[] pix = new int[w * h];
            bitmap.getPixels(pix, 0, w, 0, 0, w, h);

            int wm = w - 1;
            int hm = h - 1;
            int wh = w * h;
            int div = radius + radius + 1;

            int r[] = new int[wh];
            int g[] = new int[wh];
            int b[] = new int[wh];
            int rsum, gsum, bsum, x, y, i, p, yp, yi, yw;
            int vmin[] = new int[Math.max(w, h)];

            int divsum = (div + 1) >> 1;
            divsum *= divsum;
            int dv[] = new int[256 * divsum];
            for (i = 0; i < 256 * divsum; i++) {
                dv[i] = (i / divsum);
            }

            yw = yi = 0;

            int[][] stack = new int[div][3];
            int stackpointer;
            int stackstart;
            int[] sir;
            int rbs;
            int r1 = radius + 1;
            int routsum, goutsum, boutsum;
            int rinsum, ginsum, binsum;

            for (y = 0; y < h; y++) {
                rinsum = ginsum = binsum = routsum = goutsum = boutsum = rsum = gsum = bsum = 0;
                for (i = -radius; i <= radius; i++) {
                    p = pix[yi + Math.min(wm, Math.max(i, 0))];
                    sir = stack[i + radius];
                    sir[0] = (p & 0xff0000) >> 16;
                    sir[1] = (p & 0x00ff00) >> 8;
                    sir[2] = (p & 0x0000ff);
                    rbs = r1 - Math.abs(i);
                    rsum += sir[0] * rbs;
                    gsum += sir[1] * rbs;
                    bsum += sir[2] * rbs;
                    if (i > 0) {
                        rinsum += sir[0];
                        ginsum += sir[1];
                        binsum += sir[2];
                    } else {
                        routsum += sir[0];
                        goutsum += sir[1];
                        boutsum += sir[2];
                    }
                }
                stackpointer = radius;

                for (x = 0; x < w; x++) {

                    r[yi] = dv[rsum];
                    g[yi] = dv[gsum];
                    b[yi] = dv[bsum];

                    rsum -= routsum;
                    gsum -= goutsum;
                    bsum -= boutsum;

                    stackstart = stackpointer - radius + div;
                    sir = stack[stackstart % div];

                    routsum -= sir[0];
                    goutsum -= sir[1];
                    boutsum -= sir[2];

                    if (y == 0) {
                        vmin[x] = Math.min(x + radius + 1, wm);
                    }
                    p = pix[yw + vmin[x]];

                    sir[0] = (p & 0xff0000) >> 16;
                    sir[1] = (p & 0x00ff00) >> 8;
                    sir[2] = (p & 0x0000ff);

                    rinsum += sir[0];
                    ginsum += sir[1];
                    binsum += sir[2];

                    rsum += rinsum;
                    gsum += ginsum;
                    bsum += binsum;

                    stackpointer = (stackpointer + 1) % div;
                    sir = stack[(stackpointer) % div];

                    routsum += sir[0];
                    goutsum += sir[1];
                    boutsum += sir[2];

                    rinsum -= sir[0];
                    ginsum -= sir[1];
                    binsum -= sir[2];

                    yi++;
                }
                yw += w;
            }
            for (x = 0; x < w; x++) {
                rinsum = ginsum = binsum = routsum = goutsum = boutsum = rsum = gsum = bsum = 0;
                yp = -radius * w;
                for (i = -radius; i <= radius; i++) {
                    yi = Math.max(0, yp) + x;

                    sir = stack[i + radius];

                    sir[0] = r[yi];
                    sir[1] = g[yi];
                    sir[2] = b[yi];

                    rbs = r1 - Math.abs(i);

                    rsum += r[yi] * rbs;
                    gsum += g[yi] * rbs;
                    bsum += b[yi] * rbs;

                    if (i > 0) {
                        rinsum += sir[0];
                        ginsum += sir[1];
                        binsum += sir[2];
                    } else {
                        routsum += sir[0];
                        goutsum += sir[1];
                        boutsum += sir[2];
                    }

                    if (i < hm) {
                        yp += w;
                    }
                }
                yi = x;
                stackpointer = radius;
                for (y = 0; y < h; y++) {
                    // Preserve alpha channel: ( 0xff000000 & pix[yi] )
                    pix[yi] = ( 0xff000000 & pix[yi] ) | ( dv[rsum] << 16 ) | ( dv[gsum] << 8 ) | dv[bsum];

                    rsum -= routsum;
                    gsum -= goutsum;
                    bsum -= boutsum;

                    stackstart = stackpointer - radius + div;
                    sir = stack[stackstart % div];

                    routsum -= sir[0];
                    goutsum -= sir[1];
                    boutsum -= sir[2];

                    if (x == 0) {
                        vmin[y] = Math.min(y + r1, hm) * w;
                    }
                    p = x + vmin[y];

                    sir[0] = r[p];
                    sir[1] = g[p];
                    sir[2] = b[p];

                    rinsum += sir[0];
                    ginsum += sir[1];
                    binsum += sir[2];

                    rsum += rinsum;
                    gsum += ginsum;
                    bsum += binsum;

                    stackpointer = (stackpointer + 1) % div;
                    sir = stack[stackpointer];

                    routsum += sir[0];
                    goutsum += sir[1];
                    boutsum += sir[2];

                    rinsum -= sir[0];
                    ginsum -= sir[1];
                    binsum -= sir[2];

                    yi += w;
                }
            }

            bitmap.setPixels(pix, 0, w, 0, 0, w, h);

            return (bitmap);
        }
        /**将制定的Bitmap保存到文件*/
        public  static void savePic(Bitmap b, String strFileName){
            FileOutputStream fos = null;
            try {
                fos = new FileOutputStream(strFileName);
                if (null != fos)
                {
                    b.compress(CompressFormat.PNG, 90, fos);
                    fos.flush();
                    fos.close();
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

}

3.数据相关的工具类

package com.lianjiu.b.common.utils;

import java.math.BigDecimal;
import java.math.RoundingMode;

public class DecimalUtil {

    /**
     * 金钱乘法
     *
     * @param v1
     * @param v2
     * @return
     */
    public static String add(String v1, String v2) {
        BigDecimal b1 = new BigDecimal(v1);
        BigDecimal b2 = new BigDecimal(v2);

        return b1.add(b2).toString();
    }

    /**
     * 金钱乘法
     *
     * @param v1
     * @param v2
     * @return
     */
    public static String multiply(String v1, String v2) {
        BigDecimal b1 = new BigDecimal(v1);
        BigDecimal b2 = new BigDecimal(v2);

        return b1.multiply(b2).toString();
    }

    /**
     * 乘法
     *
     * @param v1    乘数
     * @param v2    被乘数
     * @param scale 小数点保留位数
     * @return
     */
    public static String multiplyWithScale(String v1, String v2, int scale) {
        BigDecimal b1 = new BigDecimal(v1);
        BigDecimal b2 = new BigDecimal(v2);
        BigDecimal result = b1.multiply(b2);
        result = result.setScale(scale);
        return result.toString();
    }

    /**
     * 金钱除法
     *
     * @param v1
     * @param v2
     * @return
     */
    public static String divide(String v1, String v2) {
        BigDecimal b1 = new BigDecimal(v1);
        BigDecimal b2 = new BigDecimal(v2);

        return b1.divide(b2).toString();
    }

    /**
     * 如果除不断,产生无限循环小数,那么就会抛出异常,解决方法就是对小数点后的位数做限制
     *
     * @param v1
     * @param v2 小数模式 ,DOWN,表示直接不做四舍五入,参考{@link RoundingMode}
     * @return
     */
    public static String divideWithRoundingDown(String v1, String v2) {
        return divideWithRoundingMode(v1, v2, RoundingMode.DOWN);
    }

    /** 选择小数部分处理方式 */
    public static String divideWithRoundingMode(String v1, String v2,
                                                RoundingMode roundingMode) {
        return divideWithRoundingModeAndScale(v1, v2, RoundingMode.DOWN, 0);
    }

    /**
     * 选择小数点后部分处理方式,以及保留几位小数
     *
     * @param v1           除数
     * @param v2           被除数
     * @param roundingMode 小数处理模式
     * @param scale        保留几位
     * @return
     */
    public static String divideWithRoundingModeAndScale(String v1, String v2,
                                                        RoundingMode roundingMode, int scale) {
        BigDecimal b1 = new BigDecimal(v1);
        BigDecimal b2 = new BigDecimal(v2);
        return b1.divide(b2, scale, roundingMode).toString();
    }

    /**
     * 金钱减法
     *
     * @param v1
     * @param v2
     * @return
     */
    public static String subtract(String v1, String v2) {
        BigDecimal b1 = new BigDecimal(v1);
        BigDecimal b2 = new BigDecimal(v2);

        return b1.subtract(b2).toString();
    }


}

4.文件相关的工具类

package com.lianjiu.b.common.utils;

import android.annotation.TargetApi;
import android.app.Activity;
import android.content.ContentUris;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Environment;
import android.provider.DocumentsContract;
import android.provider.MediaStore;

import com.lianjiu.b.base.AppApplication;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.DecimalFormat;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.zip.GZIPInputStream;


public class FileUtils {
    private static String SDPATH = Environment.getExternalStorageDirectory() + "/";;

    public static String getSDPATH() {
        return SDPATH;
    }

    /**
     * yckx图片存储的路径
     * */
    public static String FILEPAHT="/sdcard/yckx/";
    /**
     * yckx截屏临时文件
     * */
    public static String SHARE_FILEName="yckx_screen_temp";

    /**
     * 在SD卡上创建文件
     */
    public File creatSDFile(String fileName) throws IOException {
        File file = new File(SDPATH + fileName);
        file.createNewFile();
        return file;
    }

    /**
     * 在SD卡上创建目录
     */
    public static File creatSDDir(String dirName) {
        File dir = new File(SDPATH + dirName);
        dir.mkdir();
        return dir;
    }

    /**
     * 判断SD卡上的文件夹是否存在
     */
    public static boolean isFileExist(String fileName) {
        File file = new File(fileName);
        return file.exists();
    }

    /** 删除目录 */
    public static boolean deleteDirectory(File dir) {
        File[] bookFiles = dir.listFiles();
        for (File bookFile : bookFiles) {
            if (bookFile.isDirectory())
                deleteDirectory(bookFile);
            bookFile.delete();
        }
        return dir.delete();
    }

    /** 删除文件 */
    public static boolean deleteFileByPath(String filePath) {
        if (!StringUtils.isEmpty(filePath)) {
            File delFile = new File(filePath);
            if (delFile.exists()) {
                return delFile.delete();
            }
        }

        return false;
    }

    /**
     * 删除某一目录
     * 
     * @param path
     *            路径
     */
    public static boolean deleteFolder(String path) {
        File file = new File(path);
        return deleteFolder(file);
    }

    /**
     * 删除某一目录
     * 
     * @param folder
     *            删除的路径文件
     */
    public static boolean deleteFolder(File folder) {
        boolean result = false;
        try {

            String childs[] = folder.list();
            if (childs == null || childs.length <= 0) {
                if (folder.delete()) {
                    result = true;
                }
            } else {
                for (int i = 0; i < childs.length; i++) {
                    String childName = childs[i];
                    String childPath = folder.getPath() + File.separator + childName;
                    File filePath = new File(childPath);
                    if (filePath.exists() && filePath.isFile()) {
                        if (filePath.delete()) {
                            result = true;
                        } else {
                            result = false;
                            break;
                        }
                    } else if (filePath.exists() && filePath.isDirectory()) {
                        if (deleteFolder(filePath)) {
                            result = true;
                        } else {
                            result = false;
                            break;
                        }
                    }
                }
                folder.delete();
            }
        } catch (Exception e) {
            e.printStackTrace();
            result = false;
        }
        return result;
    }

    /**
     * 将一个InputStream里面的数据写入到SD卡中
     */
    public File write2SDFromInput(String path, String fileName, InputStream input) {
        File file = null;
        OutputStream output = null;
        try// InputStream里面的数据写入到SD卡中的固定方法
        {
            creatSDDir(path);
            file = creatSDFile(path + fileName);
            output = new FileOutputStream(file);
            byte buffer[] = new byte[4 * 1024];
            while ((input.read(buffer)) != -1) {
                output.write(buffer);
            }
            output.flush();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                output.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return file;
    }

    public static String getSizeKBString(int f) {
        DecimalFormat fmt = new DecimalFormat("0.#");
        String s = fmt.format(f) + "KB";
        float f2 = f;
        if (f2 > 1024) {
            f2 = f / 1024.0f;
            s = fmt.format(f2) + "MB";
        }
        return s;
    }

    public static String getSizeString(long f) {
        DecimalFormat fmt = new DecimalFormat("0.#");
        float f1 = 1;
        if (f >= 1024) {
            f1 = f / 1024.0f;
        }
        String s = fmt.format(f1) + "KB";
        float f2 = 1;
        if (f1 >= 1024) {
            f2 = f1 / 1024.0f;
            s = fmt.format(f2) + "MB";
        }
        return s;
    }

    public static boolean untieGzip(String GzipPath, String filePath) {
        boolean mk = false;
        try {
            GZIPInputStream in = new GZIPInputStream(new FileInputStream(GzipPath));
            OutputStream out = new FileOutputStream(filePath);
            byte[] buf = new byte[1024];
            int len;
            while ((len = in.read(buf)) > 0) {
                out.write(buf, 0, len);
            }
            in.close();
            out.close();
            mk = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return mk;
    }

    /**
     * 获取常用文件储存路径
     * 
     * @return
     */
    public static String getSavePath() {
        return getPath(false);
    }

    /**
     * 获取临时储存路径
     * 
     * @return
     */
    public static String getTemporarySavePath() {
        return getPath(true);
    }

    /**
     * 获取储存路径
     * 
     * @param isTemporary
     *            //是否是临时文件
     * @return
     */
    public static String getPath(boolean isTemporary) {
        String sdDir = "";
        String childDir = isTemporary == true ? "/yckx/pro/" : "/yckx/";
        boolean sdCardExist = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED); // 判断sd卡是否存在
        if (sdCardExist) {
            sdDir = Environment.getExternalStorageDirectory() + childDir;// 获取跟目录
        } else {
            sdDir = AppApplication.getInstance().getFilesDir().getAbsolutePath() + childDir;
        }
        File file = new File(sdDir);
        if (!file.exists()) {
            file.mkdir();
        }
        return sdDir;
    }

    /**
     * 获取系统的总内存(单位Byte)
     * 
     * @return
     */
    public static long getTotalMemory() {
        try {
            FileReader localFileReader = new FileReader("/proc/meminfo");
            BufferedReader localBufferedReader = new BufferedReader(localFileReader);
            String memTotal = localBufferedReader.readLine();
            localFileReader.close();

            String regEx = "\\d{1,}";
            Pattern p = Pattern.compile(regEx);
            Matcher m = p.matcher(memTotal);
            if (m.find()) {
                return (Long.parseLong(m.group(0)) * 1024);
            }
        } catch (Throwable e) {
            LogUtil.log(e);
        }
        return -1;
    }

    public static void writeFileToSD(InputStream is, String pathName, String fileName) {
        String sdStatus = Environment.getExternalStorageState();
        if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) {
            LogUtil.d("XXTIMG", "SD card is not avaiable/writeable right now.");
            return;
        }
        try {
            File path = new File(pathName);
            File file = new File(pathName + fileName);
            if (!path.exists()) {
                LogUtil.d("XXTIMG", "Create the path:" + pathName);
                path.mkdir();
            }
            if (!file.exists()) {
                LogUtil.d("XXTIMG", "Create the file:" + fileName);
                file.createNewFile();
            }
        } catch (Exception e) {
            LogUtil.e("XXTIMG", "Error on writeFilToSD.");
            e.printStackTrace();
        }
    }


    /**
     * 根据文件路径,将图片文件存储到sdcard中
     *
     * */
    public static void saveFileToSDcard(String filePath, Bitmap saveBitmap){
        try {
            FileOutputStream b = null;
            File yckx_tempFile = new File("/sdcard/yckx/");
            if (!yckx_tempFile.exists()) {
                yckx_tempFile.mkdirs();// 创建文件夹
            }
            File file = new File("/sdcard/yckx/" + filePath);
            b = new FileOutputStream(file);//写到存储卡
            saveBitmap.compress(Bitmap.CompressFormat.JPEG, 100, b);// 把数据写入文件
        }catch (FileNotFoundException e){
              e.printStackTrace();
        }

    }


    /*
  * 根据Uri获取图片绝对路径,解决Android4.4以上版本Uri转换
  * @param activity
  * @param imageUri
  * @author yaoxing
  * @date 2014-10-12
          */
    @TargetApi(19)
    public static String getImageAbsolutePath(Activity context, Uri imageUri) {
        if (context == null || imageUri == null)
            return null;
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT && DocumentsContract.isDocumentUri(context, imageUri)) {
            if (isExternalStorageDocument(imageUri)) {
                String docId = DocumentsContract.getDocumentId(imageUri);
                String[] split = docId.split(":");
                String type = split[0];
                if ("primary".equalsIgnoreCase(type)) {
                    return Environment.getExternalStorageDirectory() + "/" + split[1];
                }
            } else if (isDownloadsDocument(imageUri)) {
                String id = DocumentsContract.getDocumentId(imageUri);
                Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
                return getDataColumn(context,contentUri, null, null);
            } else if (isMediaDocument(imageUri)) {
                String docId = DocumentsContract.getDocumentId(imageUri);
                String[] split = docId.split(":");
                String type = split[0];
                Uri contentUri = null;
                if ("image".equals(type)) {
                    contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
                } else if ("video".equals(type)) {
                    contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
                } else if ("audio".equals(type)) {
                    contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
                }
                String selection = MediaStore.Images.Media._ID + "=?";
                String[] selectionArgs = new String[] { split[1] };
                return getDataColumn(context, contentUri, selection, selectionArgs);
            }
        } // MediaStore (and general)
        else if ("content".equalsIgnoreCase(imageUri.getScheme())) {
            // Return the remote address
            if (isGooglePhotosUri(imageUri))
                return imageUri.getLastPathSegment();
            return getDataColumn(context, imageUri, null, null);
        }
        // File
        else if ("file".equalsIgnoreCase(imageUri.getScheme())) {
            return imageUri.getPath();
        }
        return null;
    }

    public static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) {
        Cursor cursor = null;
        String column = MediaStore.Images.Media.DATA;
        String[] projection = { column };
        try {
            cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null);
            if (cursor != null && cursor.moveToFirst()) {
                int index = cursor.getColumnIndexOrThrow(column);
                return cursor.getString(index);
            }
        } finally {
            if (cursor != null)
                cursor.close();
        }
        return null;
    }

    /**
     * @param uri The Uri to check.
     * @return Whether the Uri authority is ExternalStorageProvider.
     */
    public static boolean isExternalStorageDocument(Uri uri) {
        return "com.android.externalstorage.documents".equals(uri.getAuthority());
    }

    /**
     * @param uri The Uri to check.
     * @return Whether the Uri authority is DownloadsProvider.
     */
    public static boolean isDownloadsDocument(Uri uri) {
        return "com.android.providers.downloads.documents".equals(uri.getAuthority());
    }

    /**
     * @param uri The Uri to check.
     * @return Whether the Uri authority is MediaProvider.
     */
    public static boolean isMediaDocument(Uri uri) {
        return "com.android.providers.media.documents".equals(uri.getAuthority());
    }

    /**
     * @param uri The Uri to check.
     * @return Whether the Uri authority is Google Photos.
     */
    public static boolean isGooglePhotosUri(Uri uri) {
        return "com.google.android.apps.photos.content".equals(uri.getAuthority());
    }


}

5.图片相关工具类(压缩)

package com.lianjiu.b.common.utils;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;

import com.lianjiu.b.base.Constant;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class ImageCompress {

    public static File scal(String path) {
        File outputFile = new File(path);
        if (outputFile.exists()) {
            long fileSize = outputFile.length();
            final long fileMaxSize = 200 * 1024;
            if (fileSize >= fileMaxSize) {
                BitmapFactory.Options options = new BitmapFactory.Options();
                options.inJustDecodeBounds = true;
                BitmapFactory.decodeFile(path, options);
                int height = options.outHeight;
                int width = options.outWidth;

                double scale = Math.sqrt((float) fileSize / fileMaxSize);
                options.outHeight = (int) (height / scale);
                options.outWidth = (int) (width / scale);
                options.inSampleSize = (int) (scale + 0.5);
                options.inJustDecodeBounds = false;

                Bitmap bitmap = BitmapFactory.decodeFile(path, options);
                outputFile = new File(Constant.TEMPORARY_FILE_PATH + "/" + System.currentTimeMillis() + ".jpg");
                FileOutputStream fos = null;
                try {
                    fos = new FileOutputStream(outputFile);
                    bitmap.compress(Bitmap.CompressFormat.JPEG, 50, fos);
                    fos.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                Log.d("", "sss ok " + outputFile.length());
                if (!bitmap.isRecycled()) {
                    bitmap.recycle();
                }
            }
        }
        return outputFile;
    }
}

6.Json解析相关工具类(需要用到Gson的jar包)

package com.lianjiu.b.common.utils;

import com.google.gson.Gson;

import org.json.JSONException;
import org.json.JSONObject;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;

public class JsonReponseHandler
{

    /** listKey=pageEntity */
    public static <T> List<T> getListFromJsonWithPageEntity(Object response, Type type)
    {
        return getListFromJson(response, type, "pageEntity");
    }

    /**
     * 将服务器返回的JSON转化为List,两层,
     * 
     * @param response
     *            服务器的HTTP响应,JSON数据,之所以用object,是希望将msg.obj直接传送过来
     * @param type
     *            List的数据类型,如List<Comment>
     * @
     *            更新ListView的适配器
     *
     *            进度对话框
     * @author 陈福荣, 吴格非
     */
    public static <T> List<T> getListFromJson(Object response, Type type, String listKey)
    {
        if (response == null)
        {
            return null;
        }
        JSONObject jo = null;
        if (response instanceof JSONObject)
        {
            jo = (JSONObject) response;
        } else if (response instanceof String)
        {
            try
            {
                jo = new JSONObject(response.toString());
            } catch (JSONException e)
            {
                e.printStackTrace();
            }
        }

        List<T> list = null;
        try
        {
            // 取list
            if (jo != null && !jo.equals(""))
            {
                String json = String.valueOf(jo.getJSONArray(listKey));
                Gson gson = new Gson();
                if (!"null".equals(json))
                {// 服务端可能返回null
                    list = gson.fromJson(json, type);
                }
                if (list == null)
                {
                    list = new ArrayList<T>();
                }
            }

        } catch (JSONException e)
        {
            e.printStackTrace();
        }
        return list;
    }

}

7.数据相关工具类

package com.lianjiu.b.common.utils;

import java.math.BigDecimal;
import java.text.NumberFormat;

/**
 * @Description  专门对数据进行数量
 * @Author Created by LinXZ on 2016/8/31 00:08.
 */
public class NumberUtils {




    /***
     * double 数据保存小数操作
     *
     * */
   public static double scaleNumber(double targetNumber,int scale){
       BigDecimal b1 = new BigDecimal(targetNumber);
       return b1.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
   }


    /**
     *
     * double 数据保留小数操作
     * */
    public static String sacleNumber2(double targetNumber, int scale ){
        NumberFormat ddf1 = NumberFormat.getNumberInstance();
        ddf1.setMaximumFractionDigits(scale);
       return ddf1.format(targetNumber);
    }

    /**格式化距离*/
    public static String formatNumberofDistance(float distance){
        if(distance<1000){
            return sacleNumber2(distance,1)+"m";
        }else{
            return sacleNumber2(distance/1000,2)+"km";
        }
    }

    /**数量格式化*/
    public static String forNumberCount(int count){
        if (count>1000){
            Double temp=Double.parseDouble(count+"");
            return temp/10000+"万";
        }
        return count+"";
    }

    /***********************************高德地图与百度地图的经纬度转换*****************************/

    /**
     *
     * http://blog.csdn.net/meegomeego/article/details/39927017
     *
     * 高德地图使用的是火星系坐标:GCJ-02
     * 百度地图使用的是百度坐标:在GCJ-02的基础上进行BD-09加密
     *
     * */

    private static double x_pi = 3.14159265358979324 * 3000.0 / 180.0;
    /**
     * 将 GCJ-02 坐标转换成 BD-09 坐标
     * GoogleMap和高德map用的是同一个坐标系GCJ-02(高德地图装成为百度地图)
     * */
    public static double[] bd_encrypt(double gg_lat, double gg_lon) {
        double bd_lat = 0.0;
        double bd_lon = 0.0;
        double location[] = new double[2];
        double x = gg_lon, y = gg_lat;
        double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);
        double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);
        bd_lon = z * Math.cos(theta) + 0.0065;
        bd_lat = z * Math.sin(theta) + 0.006;
        location[0] = bd_lat;
        location[1] = bd_lon;
        return location;
    }

    /**
     * 将 BD-09 坐标转换成 GCJ-02 坐标
     * GoogleMap和高德map用的是同一个坐标系GCJ-02(百度地图转换高德地图)
     * */
    public static double[] bd_decrypt(double bd_lat, double bd_lon) {
        double gg_lat = 0.0;
        double gg_lon = 0.0;
        double location[] = new double[2];
        double x = bd_lon - 0.0065, y = bd_lat - 0.006;
        double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
        double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);
        gg_lon = z * Math.cos(theta);
        gg_lat = z * Math.sin(theta);
        location[0] = gg_lat;
        location[1] = gg_lon;
        return location;
    }
}

8.手机应用相关的工具类

package com.lianjiu.b.common.utils;

import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.os.Build;
import android.os.Environment;
import android.telephony.TelephonyManager;
import android.text.InputType;
import android.view.ViewTreeObserver;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.RelativeLayout;

import com.lianjiu.b.base.AppApplication;

import java.io.File;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;


/**
 * 手机基本信息
 *
 * @author Linxz
 */
public class PhoneUtil {
    private TelephonyManager telephonyManager;
    private Context context;
    static PhoneUtil phoneinfo;
    private Map<String, Object> infoMap;

    public PhoneUtil(Context context) {
        telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        this.context = context;
        infoMap = new HashMap<String, Object>();
    }

    public static PhoneUtil getInstance(Context context) {
        if (phoneinfo == null) {
            phoneinfo = new PhoneUtil(context);
        }
        return phoneinfo;
    }

    /**
     * 手机型号
     *
     * @return
     * @time 2011-6-1 下午03:20:14
     * @author:linyg
     */
    public String getModel() {
        String model = "";
        if (infoMap.containsKey("get_model")) {
            model = (String) infoMap.get("get_model");
        } else {
            model = Build.MODEL;
            infoMap.put("get_model", model);
        }
        return model;
    }


    /**
     * 获取设备唯一码
     *
     * @param
     * @return
     */
    public String getIMEI() {
        boolean invalidDeviceID = false;
        // 获取imei号
        String deviceID = telephonyManager.getDeviceId();
        LogUtil.i("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", deviceID);
        if (deviceID == null) {
            invalidDeviceID = true;
        } else if (deviceID.length() == 0 || deviceID.startsWith("000000") || deviceID.equals
                ("0") || deviceID.startsWith("111111")
                || deviceID.startsWith("222222") || deviceID.startsWith("333333") || deviceID
                .startsWith("333333")
                || deviceID.startsWith("444444") || deviceID.startsWith("555555") || deviceID
                .startsWith("666666")
                || deviceID.startsWith("777777") || deviceID.startsWith("888888") || deviceID
                .startsWith("999999")
                || deviceID.startsWith("123456") || deviceID.startsWith("abcdef") || deviceID
                .equals("unknown")) {
            invalidDeviceID = true;
        }

        // 如果未获取到 2.2以上的系统才能使用
        if (invalidDeviceID && Integer.parseInt(Build.VERSION.SDK) >= 9) {
            try {
                Class<?> c = Class.forName("android.os.SystemProperties");
                Method get = c.getMethod("get", String.class, String.class);
                deviceID = (String) (get.invoke(c, "ro.serialno", "unknown"));
            } catch (Exception e) {
            }
            LogUtil.i("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", deviceID);
            if (deviceID == null) {
                invalidDeviceID = true;
            } else if (deviceID.length() == 0 || deviceID.startsWith("000000") || deviceID.equals
                    ("0") || deviceID.startsWith("111111")
                    || deviceID.startsWith("222222") || deviceID.startsWith("333333") || deviceID
                    .startsWith("333333")
                    || deviceID.startsWith("444444") || deviceID.startsWith("555555") || deviceID
                    .startsWith("666666")
                    || deviceID.startsWith("777777") || deviceID.startsWith("888888") || deviceID
                    .startsWith("999999")
                    || deviceID.startsWith("123456") || deviceID.startsWith("abcdef") || deviceID
                    .equals("unknown")) {
                invalidDeviceID = true;
            } else {
                invalidDeviceID = false;
            }
        }

        // 以上都无法获取到,则从sharepreference和SD卡
        if (invalidDeviceID) {
            String spDeviceId = SharedPreferenceUtil.getInstance(context).getString
                    (SharedPreferenceUtil.IMEI);
            if (spDeviceId != null && !spDeviceId.equals("")) {
                deviceID = spDeviceId;
            }
            if (deviceID == null) {
                invalidDeviceID = true;
            } else if (deviceID.length() == 0 || deviceID.startsWith("000000") || deviceID.equals
                    ("0") || deviceID.startsWith("111111")
                    || deviceID.startsWith("222222") || deviceID.startsWith("333333") || deviceID
                    .startsWith("333333")
                    || deviceID.startsWith("444444") || deviceID.startsWith("555555") || deviceID
                    .startsWith("666666")
                    || deviceID.startsWith("777777") || deviceID.startsWith("888888") || deviceID
                    .startsWith("999999")
                    || deviceID.startsWith("123456") || deviceID.startsWith("abcdef") || deviceID
                    .equals("unknown")) {
                invalidDeviceID = true;
            } else {
                invalidDeviceID = false;
            }
        }

        // 自动生成,并将保存在本地
        if (invalidDeviceID) {
            deviceID = UUID.randomUUID().toString();
        }
        if (!StringUtils.isEmpty(deviceID)) {
            SharedPreferenceUtil.getInstance(context).putString(SharedPreferenceUtil.IMEI,
                    deviceID);
        }
        LogUtil.i("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", deviceID);
        return deviceID;
    }

    /**
     * 手机号读取
     */
    public String getNativePhoneNumber() {
        telephonyManager = (TelephonyManager) context
                .getSystemService(Context.TELEPHONY_SERVICE);
        String nativePhoneNumber = null;
        nativePhoneNumber = telephonyManager.getLine1Number();
        return nativePhoneNumber;
    }


    /**
     * 获取是否debug模式
     *
     * @return
     */
    public static boolean isApkDebugable() {
        try {
            ApplicationInfo info = AppApplication.getInstance().getApplicationInfo();
            return (info.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0;
        } catch (Exception e) {

        }
        return false;
    }

    /**
     * 获取sd卡路径
     *
     * @return
     */
    public static String getSDPath() {
        String sdDir = "";
        boolean sdCardExist = Environment.getExternalStorageState().equals(Environment
                .MEDIA_MOUNTED); // 判断sd卡是否存在
        if (sdCardExist) {
            sdDir = Environment.getExternalStorageDirectory() + "/dbgs/";// 获取跟目录
        } else {
            sdDir = "/data/data/dbgs/";
        }
        File file = new File(sdDir);
        if (!file.exists()) {
            file.mkdir();
        }
        return sdDir;
    }

    /**
     * 打卡手机软键盘
     */
    public  void openSoftkeyboard(Context context, EditText editText) {
        InputMethodManager imm = (InputMethodManager) context.getSystemService(Context
                .INPUT_METHOD_SERVICE);
        imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
        editText.setFocusableInTouchMode(true);
        editText.requestFocus();
        //设置光标在文本的最后一个字
        String draft =editText.getText().toString().trim();
        editText.setSelection(draft.length());//set cursor to the end
    }


   /* */

    /**
     * 关闭软键盘
     *//*
    public static void keyBoardCancle(BaseActivity context) {
        View view = context.getWindow().peekDecorView();
        if (view != null) {
            InputMethodManager inputmanger = (InputMethodManager) context.getSystemService
            (Context.INPUT_METHOD_SERVICE);
            inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0);
        }
    }

    /**
     * 监听软件盘的打开关闭状态
     */
    public void openOrCloseSoftboard(final EditText editText, final RelativeLayout
            mainLayout) {
        editText.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL);
        editText.setFocusableInTouchMode(true);
        editText.requestFocus();
        InputMethodManager inputManager = (InputMethodManager) editText.getContext()
                .getSystemService(Context.INPUT_METHOD_SERVICE);
        inputManager.showSoftInput(editText, 0);
        mainLayout.getViewTreeObserver().addOnGlobalLayoutListener(
                new ViewTreeObserver.OnGlobalLayoutListener() {
                    @Override
                    public void onGlobalLayout() {
                        int heightDiff = mainLayout.getRootView().getHeight() - mainLayout
                                .getHeight();
                        if (heightDiff > 100) { // 说明键盘是弹出状态
                            //ToastUtil.show(getApplicationContext(), "弹出", 2000);
                        } else {
                            editText.setInputType(InputType.TYPE_NULL);
                            editText.setFocusableInTouchMode(false);
                            //ToastUtil.show(getApplicationContext(), "隐藏", 2000);
                        }
                    }
                });
    }

    /**
     * 获取手机屏幕分辨率
     */
    public static float getDensity(Context context) {
        return context.getResources().getDisplayMetrics().density;
    }

    /**
     * 获取当前包名
     */
    public String getAppPakage() {
        try {
            String pkName = context.getPackageName();
            return pkName;
        } catch (Exception e) {
        }
        return "";
    }

    /**
     * 获取APP版本号
     */
    public int getAppVersionCode() {
        try {
            String pkName = context.getPackageName();
            int versionCode = context.getPackageManager()
                    .getPackageInfo(pkName, 0).versionCode;
            return versionCode;
        } catch (Exception e) {
        }
        return 0;
    }

    /**
     * 获取APP版本名称
     */
    public String getAppVersionName() {
        try {
            String pkName = context.getPackageName();
            String versionName = context.getPackageManager().getPackageInfo(
                    pkName, 0).versionName;
            return versionName;
        } catch (Exception e) {
        }
        return "";
    }

    /**
     * 判断是否需要版本更新
     *
     * @return
     */
    public boolean checkAppVersionName(String serverVersionName) {
        String appVersionName = getAppVersionName();
        int appVersion = Integer.parseInt(appVersionName.replace(".", ""));
        int serverVersion = Integer.parseInt(serverVersionName.replace(".", ""));
        if (appVersion > serverVersion) {
            return false;
        } else if (appVersion == serverVersion) {
            return false;
        } else {
            return true;
        }

    }


}

9.手机SharePreference存储工具类

package com.lianjiu.b.common.utils;

import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;

import com.google.gson.Gson;
import com.lianjiu.b.module.entity.bean.CustBaseinfo;
import com.lianjiu.b.module.entity.bean.UserInfo;

public class SharedPreferenceUtil {
    private static SharedPreferenceUtil sharedPreferenceUtil;

    private static SharedPreferences sharedPreferences;//用户资料
    public final static String CUSTBASEINFO="CustBaseInfo";//登录注册下的数据
    public final static String CUSTBASEINFO_STORE="CustBaseInfo_Store";//商家门店信息
    public final static String PHONENUM="PhoneNum";//用户注册的环信手机号
    public final static String PASSWORD="PassWord";//用户注册环信密码

    private final static String KEY = "dbgs_sharedpreferences";
    public final static String GUIDE = "guide"; // 引导页

    public final static String IMEI = "imei"; // 设备唯一码

    public final static String TOKEN = "token"; // 用户token
    public final static String SETMSG = "setmsg"; // 用户消息设置缓存

    public final static String IMTOKEN = "imtoken"; // 用户imtoken
    public final static String XGTOKEN = "xgtoken"; // 用户xgtoken
    public final static String LBSSearchResponse = "LBSSearchResponse";

    public final static String KEY_PUSH = "Key_push";

    public final static String COMPANY_APPLY = "company_apply";

    public final static String SEARCH_RECORD = "search_cord";//商家搜索记录

    /**
     * 搜索页面记录。 <br/><br/>Author: Create by Yu.Yao on 2016/9/26。
     */
    public final static String SEARCH_HISTORY = "search_history";

    private SharedPreferenceUtil(Context context) {
        sharedPreferences = context.getSharedPreferences(KEY, Context.MODE_PRIVATE);
    }

    public static SharedPreferenceUtil getInstance(Context context) {
        if (sharedPreferenceUtil == null) {
            sharedPreferenceUtil = new SharedPreferenceUtil(context);
        }
        return sharedPreferenceUtil;
    }

    /**
     * 设置String类型值
     *
     * @param key
     * @param value
     */
    public void putString(String key, String value) {
        Editor editor = sharedPreferences.edit();
        editor.putString(key, value);
        editor.commit();
    }

    /**
     * 设置long类型值
     *
     * @param key
     * @param value
     */
    public void putLong(String key, long value) {
        Editor editor = sharedPreferences.edit();
        editor.putLong(key, value);
        editor.commit();
    }

    /**
     * 设置int类型值
     *
     * @param key
     * @param value
     */
    public void putInt(String key, int value) {
        Editor editor = sharedPreferences.edit();
        editor.putInt(key, value);
        editor.commit();
    }

    /**
     * 设置Boolean类型值
     *
     * @param key
     * @param value
     */
    public void putBoolean(String key, boolean value) {
        Editor editor = sharedPreferences.edit();
        editor.putBoolean(key, value);
        editor.commit();
    }

    /**
     * 设置Float类型值
     *
     * @param key
     * @param value
     */
    public void putFloat(String key, float value) {
        Editor editor = sharedPreferences.edit();
        editor.putFloat(key, value);
        editor.commit();
    }

    /**
     * 读取String类型值,默认为""
     *
     * @param key
     */
    public String getString(String key) {
        return sharedPreferences == null ? "" : sharedPreferences.getString(key, "");
    }

    /**
     * 读取boolean类型值,默认为false;
     *
     * @param key
     * @return
     */
    public boolean getBoolean(String key, boolean deafultValue) {
        return sharedPreferences.getBoolean(key, deafultValue);
    }

    /**
     * 读取int类型值,默认为0
     *
     * @param key
     * @return
     */
    public int getInt(String key) {
        return sharedPreferences.getInt(key, 0);
    }

    /**
     * 读取long类型值,默认为0
     *
     * @param key
     * @return
     */
    public long getLong(String key) {
        return sharedPreferences.getLong(key, 0);
    }

    /**
     * 读取float类型值,默认为0
     *
     * @param key
     * @return
     */
    public float getFloat(String key) {
        return sharedPreferences.getFloat(key, 0);
    }

    /**
     * 判断是否存在此字段
     */
    public boolean has(String key) {
        return sharedPreferences.contains(key);
    }

    // 移除某个字段
    public void remove(String key) {
        Editor editor = sharedPreferences.edit();
        editor.remove(key);
        editor.commit();
    }

    private final static String USER="user";
    /**保存当前用户信息*/
  /*  public  void saveUser(User user){
        if (user!=null){
            putString(USER,new Gson().toJson(user));
            String token=user.getToken();
            putString(TOKEN,token);
        }
    }

    *//**获取当前用户信息*//*
    public User getUser(){
        String userJSON=getString(USER);
        if (!StringUtils.isEmpty(userJSON))
            return new Gson().fromJson(userJSON,User.class);
        else
            return null;
    }*/

    public static boolean isLogin(Context context) {
        String token = SharedPreferenceUtil.getInstance(context).getString(TOKEN);
        if (StringUtils.isEmpty(token))
            return false;
        else
            return true;
    }

    public void cleanUserCookie() {
        Editor editor = sharedPreferences.edit();
        editor.clear();
        editor.commit();
    }

    /**获取用户商家对于的商家ID*/
    public static String getCustId(Context context){
       String userStringInfo=SharedPreferenceUtil.getInstance(context).getString(CUSTBASEINFO);
        UserInfo userInfo=new Gson().fromJson(userStringInfo,UserInfo.class);
        if (userInfo!=null)
            return userInfo.getCustid();
        return "";
    }

    /**获取商家基本信息*/
    public static CustBaseinfo getCustBseInf(Context context){
        String userStringInfo=SharedPreferenceUtil.getInstance(context).getString(CUSTBASEINFO_STORE);
        if (userStringInfo!=null){
            CustBaseinfo custBaseinfo=new Gson().fromJson(userStringInfo,CustBaseinfo.class);
            return custBaseinfo;
        }
        return null;
    }

    /**获取用户Id*/
    public static String getUserId(Context context){
        String userInfoString=SharedPreferenceUtil.getInstance(context).getString(CUSTBASEINFO);
        if (userInfoString!=null){
            UserInfo userInfo=new Gson().fromJson(userInfoString,UserInfo.class);
            if (userInfo!=null)
                return userInfo.getUserid();
        }
        return "";
    }


}

10.字符串工具类

package com.lianjiu.b.common.utils;


import java.math.BigDecimal;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Various String utility functions. Most of the functions herein are
 * re-implementations of the ones in apache commons StringUtils.
 */
public class StringUtils {

    public static final String ERROR_TOAST = "网络环境不给力,请检查网络";
    public static final String NO_MORE_DATE = "没有更多数据";
    public static final String EMPTY = "";
    public static final String SUCCESSCODE = "200";
    public static final String SUCCESSDESC = "请求成功";

    public static final String EMPTYNUM = "0";

    public static final String BLANK_SPACE = " ";

    public static String trim(String text) {
        if (text == null)
            return "";
        return text.trim();
    }

    /**
     * @param text
     * @return
     * @Description 判断字符串是否为空
     * @author Created by qinxianyuzou on 2014-12-11.
     */
    public static boolean isEmpty(String text) {
        return text == null || text.trim().compareTo("") == 0 || text.equals("null");
    }

    /**
     * Description: 返回字符串本身,防空指针.<br/><br/>
     * Author: Create by Yu.Yao on 2016/9/13.<br/><br/>
     */
    public static String removalNull(String defaultString, String text) {
        if (isEmpty(text)) {
            return defaultString;
        }
        return text;
    }

    /**
     * Checks if a String is whitespace, empty ("") or null.</p>
     */
    public static boolean isBlank(String str) {
        int strLen;
        if (str == null || (strLen = str.length()) == 0) {
            return true;
        }
        for (int i = 0; i < strLen; i++) {
            if ((Character.isWhitespace(str.charAt(i)) == false)) {
                return false;
            }
        }
        return true;
    }


    public static String listToString(List<String> list, String separator) {
        if (list == null || list.size() == 0)
            return "";

        StringBuilder string = new StringBuilder();
        for (int i = 0; i < list.size(); i++) {
            string.append(list.get(i));
            if (i < list.size() - 1) {
                string.append(separator);
            }
        }

        return string.toString();
    }

    public static String stringArrayToString(String[] array, String separator) {
        if (array == null || array.length == 0)
            return "";
        StringBuilder string = new StringBuilder();
        for (int i = 0; i < array.length; i++) {
            string.append(array[i]).append(separator);
        }
        return string.toString();
    }

    public final static int getIntValue(String str) {
        if (str != null && str.length() > 0) {
            try {
                return Integer.parseInt(str);
            } catch (Exception e) {
            }
        }
        return 0;
    }

    public final static long getLongValue(String str) {
        if (str != null && str.length() > 0) {
            try {
                return Long.parseLong(str);
            } catch (Exception e) {
            }
        }
        return 0;
    }

    public static String removeEmptyChar(String src) {
        if (src == null || src.length() == 0)
            return src;
        return src.replaceAll("[\r]*[\n]*[ ]*[ ]*", "");
    }

    public static String getFileNameFromUrl(String url) {

        // 名字不能只用这个
        // 通过 ‘?’ 和 ‘/’ 判断文件名
        String extName = "";
        String filename;
        int index = url.lastIndexOf('?');
        if (index > 1) {
            extName = url.substring(url.lastIndexOf('.') + 1, index);
        } else {
            extName = url.substring(url.lastIndexOf('.') + 1);
        }
        filename = hashKeyForDisk(url) + "." + extName;
        return filename;
    }

    /**
     * 一个散列方法,改变一个字符串(如URL)到一个散列适合使用作为一个磁盘文件名。
     */
    public static String hashKeyForDisk(String key) {
        String cacheKey;
        try {
            final MessageDigest mDigest = MessageDigest.getInstance("MD5");
            mDigest.update(key.getBytes());
            cacheKey = bytesToHexString(mDigest.digest());
        } catch (NoSuchAlgorithmException e) {
            cacheKey = String.valueOf(key.hashCode());
        }

        return cacheKey;
    }

    private static String bytesToHexString(byte[] bytes) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < bytes.length; i++) {
            String hex = Integer.toHexString(0xFF & bytes[i]);
            if (hex.length() == 1) {
                sb.append('0');
            }
            sb.append(hex);
        }
        return sb.toString();
    }

    public static String Md5(String string) {
        if (string != null && !string.equals("")) {
            try {
                MessageDigest md5 = MessageDigest.getInstance("MD5");
                char[] HEX = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
                byte[] md5Byte = md5.digest(string.getBytes("UTF8"));
                StringBuffer sb = new StringBuffer();
                for (int i = 0; i < md5Byte.length; i++) {
                    sb.append(HEX[(int) (md5Byte[i] & 0xff) / 16]);
                    sb.append(HEX[(int) (md5Byte[i] & 0xff) % 16]);
                }
                string = sb.toString();
            } catch (Exception e) {
            }
        }
        return string;
    }

    /**
     * 根据各国的手机号码规则,检测输入
     *
     * @param code
     * @param number
     * @return
     * @time 2011-7-22 上午09:41:04
     * @author:linyg
     */
    public static boolean phoneNumberValid(String code, String number) {
        // 手机号固定在5-20范围内
        if (number.length() < 5 || number.length() > 20) {
            return false;
        }

        String match = "";
        if ("86".equals(code)) {// 中国
            if (number.length() != 11) {
                return false;
            } else {
                match = "^[1]{1}[0-9]{2}[0-9]{8}$";
            }
        }

        // 正则匹配
        if (!"".equals(match)) {
            return number.matches(match);
        }
        return true;
    }

    public static boolean phoneNumberValid(String number) {
        // 手机号固定在5-20范围内
        if (number.length() < 5 || number.length() > 20) {
            return false;
        }

        String match = "";
        if (number.length() != 11) {
            return false;
        } else {
            // match = "^[1]{1}[0-9]{2}[0-9]{8}$";
            // match = "^(13[0-9]|14[5|7]|15[0-9]|17[0-9]|18[0-9])\\d{8}$";
            match = "^(1[3456789])\\d{9}$";

        }

        // 正则匹配
        if (!"".equals(match)) {
            return number.matches(match);
        }
        return true;
    }

    /**
     * 判断邮箱地址是否有效限
     */
    public static boolean isEmailAddValid(String address) {
        if (address != null && address.length() > 0) {
            char[] cAddress = address.toCharArray();
            for (char c : cAddress) {
                if (c > 127) {
                    return false;
                }
            }

            Pattern p = Pattern.compile("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");
            Matcher m = p.matcher(address);
            return m.matches();
        }
        return false;
    }

    /**
     * 判断密码是否有效
     * <p>
     * 0 -- 非法;1 -- 正确; 2 -- 不一致
     */
    public static int isPasswordValid(String password, String repeated) {
        if (password != null) {
            int len = password.length();
            if (len >= 6 && len <= 16) {
                char[] cPsw = password.toCharArray();
                boolean wrongChar = false;
                for (char c : cPsw) {
                    if (c >= 128) { // 找到非ascii码
                        wrongChar = true;
                        break;
                    }
                }
                if (!wrongChar) {
                    return password.equals(repeated) ? 1 : 2;
                }
            }
        }
        return 0;
    }

    /**
     * 过滤掉 \r 换行 \n回车
     *
     * @param str
     * @return
     */
    public static String replaceBlank(String str) {
        String dest = "";
        if (str != null) {
            Pattern p = Pattern.compile("\\r+|\n+");
            Matcher m = p.matcher(str);
            dest = m.replaceAll(" ");// .replaceAll(" +", " ");
        }
        return dest;
    }

    // 半角字符与全角字符混乱所致:这种情况一般就是汉字与数字、英文字母混用,可以避免由于占位导致的排版混乱问题了
    public static String ToDBC(String input) {
        char[] c = input.toCharArray();
        for (int i = 0; i < c.length; i++) {
            if (c[i] == 12288) {
                c[i] = (char) 32;
                continue;
            }
            if (c[i] > 65280 && c[i] < 65375)
                c[i] = (char) (c[i] - 65248);
        }
        return new String(c);
    }

    public static String ListTOString(ArrayList<String> dataList) {
        if (null == dataList || dataList.size() == 0) {
            return "";
        }
        StringBuilder str_b = new StringBuilder();
        for (String ss : dataList) {
            str_b.append(ss);
            str_b.append("$");
        }
        return str_b.substring(0, str_b.length() - 1);

    }

    public static <T> boolean isEmptyData(List<T> newData) {
        if (newData == null) {
            return true;
        } else {
            if (newData.size() == 0) {
                return true;
            } else {
                return false;
            }
        }
    }

    /**
     * 方法名称:transMapToString
     * 传入参数:map
     * 返回值:String 形如 username'chenziwen^password'1234
     */
    public static String transMapToString(Map map) {
        Map.Entry entry;
        StringBuffer sb = new StringBuffer();
        for (Iterator iterator = map.entrySet().iterator(); iterator.hasNext(); ) {
            entry = (Map.Entry) iterator.next();
            sb.append(entry.getKey().toString()).append("'").append(null == entry.getValue() ? "" :
                    entry.getValue().toString()).append(iterator.hasNext() ? "^" : "");
        }
        return sb.toString();
    }

    /**
     * 方法名称:transStringToMap
     * 传入参数:mapString 形如 username'chenziwen^password'1234
     * 返回值:Map
     */
    public static Map transStringToMap(String mapString) {
        Map map = new HashMap();
        StringTokenizer items;
        for (StringTokenizer entrys = new StringTokenizer(mapString, "^"); entrys.hasMoreTokens();
             map.put(items.nextToken(), items.hasMoreTokens() ? ((Object) (items.nextToken())) : null))
            items = new StringTokenizer(entrys.nextToken(), "'");
        return map;
    }

    /**
     * 判断字符串是不是全是数字
     */
    public static boolean isNumeric(String str) {
        for (int i = str.length(); --i >= 0; ) {
            if (!Character.isDigit(str.charAt(i))) {
                return false;
            }
        }
        return true;
    }

    /**
     * 距离格式化
     */
    public static String formatDistance(float distance) {
        DecimalFormat df = new DecimalFormat("0.#");
        if (distance < 1000) {
            return df.format(distance) + "m";
        }
        return df.format(distance / 1000) + "km";
    }

    public static String formatDistance(double distance) {
        DecimalFormat df = new DecimalFormat("0.#");
        if (distance < 1000) {
            return df.format(distance) + "m";
        }
        return df.format(distance / 1000) + "km";
    }

    /*
    校验过程: 
1、从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。 
2、从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,将个位十位数字相加,即将其减去9),再求和。 
3、将奇数位总和加上偶数位总和,结果应该可以被10整除。       
     */

    /**
     * 校验银行卡卡号
     */
    public static boolean checkBankCard(String bankCard) {
        if (bankCard.length() < 15 || bankCard.length() > 19) {
            return false;
        }
        char bit = getBankCardCheckCode(bankCard.substring(0, bankCard.length() - 1));
        if (bit == 'N') {
            return false;
        }
        return bankCard.charAt(bankCard.length() - 1) == bit;
    }

    /**
     * 从不含校验位的银行卡卡号采用 Luhm 校验算法获得校验位
     *
     * @param nonCheckCodeBankCard
     * @return
     */
    public static char getBankCardCheckCode(String nonCheckCodeBankCard) {
        if (nonCheckCodeBankCard == null || nonCheckCodeBankCard.trim().length() == 0
                || !nonCheckCodeBankCard.matches("\\d+")) {
            //如果传的不是数据返回N
            return 'N';
        }
        char[] chs = nonCheckCodeBankCard.trim().toCharArray();
        int luhmSum = 0;
        for (int i = chs.length - 1, j = 0; i >= 0; i--, j++) {
            int k = chs[i] - '0';
            if (j % 2 == 0) {
                k *= 2;
                k = k / 10 + k % 10;
            }
            luhmSum += k;
        }
        return (luhmSum % 10 == 0) ? '0' : (char) ((10 - luhmSum % 10) + '0');
    }

    /**
     * 得到一个字符串的长度,显示的长度,一个汉字或日韩文长度为2,英文字符长度为1
     *
     * @param s 需要得到长度的字符串
     * @return int 得到的字符串长度
     */
    public static int getStrLength(String s) {
        if (s == null)
            return 0;
        char[] c = s.toCharArray();
        int len = 0;
        for (int i = 0; i < c.length; i++) {
            len++;
            if (!isLetter(c[i])) {
                len++;
            }
        }
        return len;
    }


    public static boolean isLetter(char c) {
        int k = 0x80;
        return c / k == 0 ? true : false;
    }




    /**
     * 对字符串进行格式化,最多显示长度为length,超过时,其后的内容使用“...代替”
     *
     * @param str
     * @param length
     * @return
     */
    public static String regexString(String str, int length) {
        if (str.length() > length) {
            return str.substring(0, length - 4) + "...";
        }
        return str;
    }

    /**
     * 对URL进行格式化:构造形式为URL/XXX/XXX
     *
     * @param params
     * @param url
     * @return
     */
    public static String formatUrl(List<Object> params, String url) {
        StringBuilder builder = new StringBuilder();
        builder.append(url);
        for (Object param : params) {
            builder.append("/" + param);
        }
        return builder.toString();
    }


    /** 拼接链接完整URL */
    public static String generateUrl(String url, Map<String, Object> params) {
        StringBuilder urlBuilder = new StringBuilder(url);
        // web接口: url?key=val&key=val&key=val;
        if (null != params) {
            urlBuilder.append("?");
            Iterator<Map.Entry<String, Object>> iterator = params.entrySet().iterator();
            while (iterator.hasNext()) {
                Map.Entry<String, Object> param = iterator.next();
                String key = param.getKey();
                Object value = param.getValue();
                urlBuilder.append(key).append('=').append(value);
                if (iterator.hasNext()) {
                    urlBuilder.append('&');
                }
            }
        }
        return urlBuilder.toString();
    }

    /**
     * 用于字符串为null会报错的控件
     */
    public static String getNoNUllString(String txt) {
        if (txt == null)
            return "";
        return txt;
    }


    /**金额为分的格式 */
    public static final String CURRENCY_FEN_REGEX = "\\-?[0-9]+";
    /**
     * 分转为元
     * @param fen
     * @return
     */
    public static String fromFenToYuan(int fen){
        if(!String.valueOf(fen).matches(CURRENCY_FEN_REGEX)) {
            return "金额格式有误";
        }
        String yuan = BigDecimal.valueOf(fen).divide(new BigDecimal(100)).toString();
        return yuan;
    }




}

11.时间倒计时工具类

package com.lianjiu.b.common.utils;

import android.os.Handler;
import android.os.Message;

import java.util.Timer;
import java.util.TimerTask;

/**
 * 时间倒计时工具类
 * 
 * */
public class TimerUtil {

    private static TimerUtil instance;
    private MyTimer timer;
    /**倒计时时间,默认60s*/
    private int TIME_DEF=60;
    /***/
    private int showTime;
    /**是否正在进行倒计时*/
    private boolean isRunning;

    private TimerUtil(){

    }

    synchronized public static TimerUtil getInstance(){
        if (instance==null)
            instance=new TimerUtil();
        return instance;
    }


    public void setTime(int time){
        this.TIME_DEF=time;
    }


    public MyTimer startRunning(){
        showTime=TIME_DEF;
        timer=new MyTimer();
        final TimerTask timerTask=new TimerTask() {
            @Override
            public void run() {
                showTime--;
                Message msg=new Message();
                msg.what=showTime;
                showTimeHandler.sendMessage(msg);
            }
        };
        timer.schedule(timerTask, 1000, 1000);
        return timer;
    }

    class MyTimer extends Timer {
        public void resCancel(){
            this.cancel();
        };
    }


    private Handler showTimeHandler=new Handler(){
        public void handleMessage(Message msg) {
            if (msg.what<=0) {
                if(timer!=null)
                    timer.cancel();
                timer=null;
                if (mTimerCallBack!=null)
                    mTimerCallBack.donInFinishTime(msg.what);
                isRunning=false;
            }else{
                if (mTimerCallBack!=null)
                    mTimerCallBack.doInRunTime(msg.what);
            }
        };
    };


    public interface TimerCallBack{
        public void doInRunTime(int time);
        public void donInFinishTime(int time);
    }

    private TimerCallBack mTimerCallBack;
    public void setTimerCallBack(TimerCallBack timerCallBack){
        this.mTimerCallBack=timerCallBack;
    }


}

12.时间相关工具类

package com.lianjiu.b.common.utils;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class TimeUtil {

    /**
     * 格式化时间 如:12小时前
     * 
     * @param timestr
     *            秒
     */
    public static String fmttoCN(String timestr) {
        String timeText = null;
        if (null == timestr || "".equals(timestr)) {
            return "";
        }

        long time = Long.valueOf(timestr);
        // SimpleDateFormat dateFormat = new SimpleDateFormat("yyMMddHHmmss");
        // try {
        // time = dateFormat.parse(timestr).getTime();
        // } catch (ParseException e) {
        // e.printStackTrace();
        // }

        Date dt = new Date();
        long nowSec = dt.getTime();
        long timediff = (nowSec - time) / 1000;
        if (timediff < 60) {
            // 小与1分钟显示 ‘刚刚’
            timeText = "刚刚";
        } else if (timediff >= 60 && timediff < 60 * 60) {
            // 小于1小时 显示‘分钟’
            timeText = String.valueOf((int) timediff / 60) + "分钟前";
        } else if (timediff >= 60 * 60 && timediff < 24 * 60 * 60) {
            // 小于24小时,则显示‘时’
            timeText = String.valueOf((int) timediff / (60 * 60)) + "小时前";
        } else if (timediff >= 24 * 60 * 60 && timediff < 30 * 24 * 60 * 60) {
            // 小于1个月,则显示‘天’
            timeText = String.valueOf((int) timediff / (24 * 60 * 60)) + "天前";
        } else if (timediff >= 30 * 24 * 60 * 60 && timediff < 12 * 30 * 24 * 60 * 60) {
            // 小于1年,则显示‘月’
            timeText = String.valueOf((int) timediff / (30 * 24 * 60 * 60)) + "个月前";
        } else if (timediff >= 12 * 30 * 24 * 60 * 60) {
            // 大于1年显示‘年’
            timeText = String.valueOf((int) timediff / (12 * 30 * 24 * 60 * 60)) + "年前";
        }

        return timeText;

    }

    /**
     * 时间转换
     * @param dataFormat
     * @param timeStamp
     * @return
     */
    public static String formatData(String dataFormat, long timeStamp) {
        if (timeStamp == 0) {
            return "";
        }
        timeStamp = timeStamp * 1000;
        String result = "";
        SimpleDateFormat format = new SimpleDateFormat(dataFormat);
        result = format.format(new Date(timeStamp));
        return result;
    }


    //  public static String timeToStr(String timestr) {
    //      String timeText = null;
    //      if (null == timestr || "".equals(timestr)) {
    //          return "";
    //      }
    //      long time = Long.valueOf(timestr);
    //      if(isSameDay(time)){
    //          timeText = "今天"+longToTime(time, "kk:mm");
    //      }else{
    //          
    //      }
    //      Date dt = new Date();
    //      long nowSec = dt.getTime();
    //      long timediff = (nowSec - time) / 1000;
    //      if (timediff < 24 * 60 * 60) {
    //          timeText = "今天"+longToTime(time, "kk:mm");
    //      } else if (timediff >= 24 * 60 * 60 && timediff < 2 * 24 * 60 * 60) {
    //          timeText = "昨天"+longToTime(time, "kk:mm");
    //      } else{
    //          timeText = longToTime(time, "yyyy-MM-dd kk:mm");
    //      }
    //      return timeText;
    //  }

    /**
     * @author LuoB.
     * @param oldTime 较小的时间
     * @param newTime 较大的时间 (如果为空   默认当前时间 ,表示和当前时间相比)
     * @return -1 :同一天.    0:昨天 .   1 :至少是前天.
     * @throws ParseException 转换异常
     */
    public static String timeToStr(String oldTime){


        try {
            Date today;
            //将下面的 理解成  yyyy-MM-dd 00:00:00 更好理解点
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            String todayStr = format.format(new Date());
            today = format.parse(todayStr);
            long time = Long.valueOf(oldTime);
            Date olddate  =  new Date(time);
            //昨天 86400000=24*60*60*1000 一天
            if((today.getTime()-olddate.getTime())>0 && (today.getTime()-olddate.getTime())<=86400000) {
                return "昨天"+longToTime(time, "HH:mm");
            }
            else if((today.getTime()-olddate.getTime())<=0){ //至少是今天
                return "今天"+longToTime(time, "HH:mm");
            }
            else{ //至少是前天
                return longToTime(time, "yyyy-MM-dd HH:mm");
            }
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return "";
    }


    /**
     * @param time
     *            时间
     * @param level
     *            参考Calendar
     * @return "yyyy-MM-dd kk:mm:ss" 格式的时间
     */
    public static String longToTime(long time, int level) {
        String format = "yyyy-MM-dd HH:mm:ss";
        switch (level) {
        case Calendar.MINUTE: {
            format = "yyyy-MM-dd HH:mm";
        }
        break;
        case Calendar.HOUR: {
            format = "yyyy-MM-dd HH";
        }
        break;
        case Calendar.DATE: {
            format = "yyyy-MM-dd";
        }
        break;
        case Calendar.MONTH: {
            format = "yyyy-MM";
        }
        break;
        case Calendar.YEAR: {
            format = "yyyy";
        }
        break;
        }
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        return sdf.format(time);
    }

    public static String longToTime(long time, String format){
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        return sdf.format(time);
    }

    /** 时间转换为long */
    public static long timeToSecond(String time, int level) {
        String format = "yyyy-MM-dd HH:mm:ss";
        switch (level) {
        case Calendar.MINUTE: {
            format = "yyyy-MM-dd HH:mm";
        }
        break;
        case Calendar.HOUR: {
            format = "yyyy-MM-dd HH";
        }
        break;
        case Calendar.DATE: {
            format = "yyyy-MM-dd";
        }
        break;
        case Calendar.MONTH: {
            format = "yyyy-MM";
        }
        break;
        case Calendar.YEAR: {
            format = "yyyy";
        }
        break;
        }
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        Date date = null;
        long second = 0;
        try {
            date = sdf.parse(time);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        if (date != null) {
            second = date.getTime();
        }
        return second;
    }


    /** 时间转换为long */
    public static long timeToSecond2(String time, int level) {
        String format = "yyyy年MM月dd日HH时:mm分:ss秒";
        switch (level) {
        case Calendar.MINUTE: {
            format = "yyyy年MM月dd日HH时mm分";
        }
        break;
        case Calendar.HOUR: {
            format = "yyyy年MM月dd日HH时";
        }
        break;
        case Calendar.DATE: {
            format = "yyyy年MM月dd日";
        }
        break;
        case Calendar.MONTH: {
            format = "yyyy年MM月";
        }
        break;
        case Calendar.YEAR: {
            format = "yyyy年";
        }
        break;
        }
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        Date date = null;
        long second = 0;
        try {
            date = sdf.parse(time);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        if (date != null) {
            second = date.getTime();
        }
        return second;
    }

    /** 时间转换为long */
    public static long timeToSecond3(String time, String format) {
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        Date date = null;
        long second = 0;
        try {
            date = sdf.parse(time);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        if (date != null) {
            second = date.getTime();
        }
        return second;
    }

    public static String longToTime2(long time) {
        String format = "yyyy/MM/dd";
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        return sdf.format(time);
    }



    /**
     * 将秒转换为时间格式(00:00)
     * 
     * @param s
     *            秒数
     * @return
     */
    public static String secToTime(int s) {
        String time = null;

        int m = s / 60; // 分
        s = s - (m * 60); // 秒

        time = String.format("%02d:%02d", m, s);

        return time;
    }

    // date
    public static String getMonth(long time) {
        Date date = new Date(time);
        SimpleDateFormat formatter = new SimpleDateFormat("M");
        formatter.format(date);
        return formatter.format(date);
    }

    // date
    public static String getDay(long time) {
        Date date = new Date(time);
        SimpleDateFormat formatter = new SimpleDateFormat("d");
        formatter.format(date);
        return formatter.format(date);
    }

    // date
    public static String getWeek(long time) {
        Date date = new Date(time);
        SimpleDateFormat formatter = new SimpleDateFormat("EEEE");
        formatter.format(date);
        return formatter.format(date);
    }

    public static String[] getDatas() {
        String[] datas = new String[60];
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat format = new SimpleDateFormat("MM月dd日 EEEE");
        datas[0] = format.format(calendar.getTime());
        for (int i = 1; i < 60; i++) {
            calendar.add(Calendar.DATE, 1);
            datas[i] = format.format(calendar.getTime());
        }

        return datas;

    }

    public static String formatAmPmToCN(long time) {
        SimpleDateFormat sdf = new SimpleDateFormat("MM月dd日ahh时mm分");
        return sdf.format(new Date(time));
    }
    public static String formatAmPmToCN2(long time) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
        return sdf.format(new Date(time));
    }
    public static String formatAllAmPmToCN(long time) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 a hh时mm分ss秒");
        return sdf.format(new Date(time));
    }


    /**今天时间*/
    public static String todayTime(String pattern){
        SimpleDateFormat sdf=new SimpleDateFormat(pattern);
        return sdf.format(new Date());
    }

    /**
     * 字符串转换成日期
     * @param str:time
     * @param pattern:格式
     * @return date:date
     */
    public static Date StrToDate(String str, String pattern) {

        SimpleDateFormat format = new SimpleDateFormat(pattern);
        Date date = null;
        try {
            date = format.parse(str);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }

    /**格式化时间*/
    public static String fmTime(Date date, String pattern){
        SimpleDateFormat sdf=new SimpleDateFormat(pattern);
        return sdf.format(date);
    }

    /**比较两个时间那个前,哪个后
     *
     * @param DATE1:开始时间
     *
     * @param DATE2:结束时间
     *
     * @param pattern:时间格式,如:"yyyy年MM月dd日"
     * 
     * @return 
     *         1:DATE1在DATE2之前
     *        -1:DATE1在DATE2之后
     *         0:DATE1、DATE2同一时间
     * 
     * */
    public static int compare_date(String DATE1, String DATE2, String pattern) {
        DateFormat df = new SimpleDateFormat(pattern);
        try {
            Date dt1 = df.parse(DATE1);
            Date dt2 = df.parse(DATE2);
            if (dt1.getTime() > dt2.getTime()) {
                return 1;
            } else if (dt1.getTime() < dt2.getTime()) {
                return -1;
            } else {
                return 0;
            }
        } catch (Exception exception) {
            exception.printStackTrace();
        }
        return 0;
    }

    /**
     * 判断当前时间是否在上午9点到下午9点内
     * @return
     */
    public static boolean compareIn9(){
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

        try {
            String today = todayTime("yyyy-MM-dd");
            Date dt1 = df.parse(today+" 09:00:00");
            Date dt2 = df.parse(today+" 20:00:00");
            Date now = new Date();
            if (now.getTime() >= dt1.getTime() && now.getTime() <=dt2.getTime()) {
                return true;
            } else {
                return false;
            }
        } catch (Exception exception) {
            exception.printStackTrace();
        }
        return false;
    }

    public static String hasTimeNow(long time){
        long today = new Date().getTime();
        long mis = today - time;

        int hour = (int)(mis/(3600*1000));
        int mu = (int) (mis/(60*1000));
        return hour>0?hour+"小时":mu+"分钟";        
    }
}

12.Toast相关工具类

package com.lianjiu.b.common.utils;

import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.widget.Toast;

public class ToastHelper {
    private static Handler handler = new Handler(Looper.getMainLooper());
    private static ToastHelper toast;
    private static Toast toast1 = null;
    private Context context;
    private static Object synObj = new Object();
    public static ToastHelper getInstance() {
        if (toast == null) {
            toast = new ToastHelper();
        }
        return toast;
    }

    public void init(Context context) {
        this.context = context;
    }

    public Toast _toast(String str) {
        return displayToastShort(str);
    }

    /**
     * 显示Toast,duration为short
     *
     *
     *            {@link Context} 当前窗体的上下文
     * @param str
     *            {@link String} 消息主体
     *
     */
    public Toast displayToastShort(String str) {
        Toast toast = Toast.makeText(context, str, Toast.LENGTH_SHORT);
        toast.show();
        return toast;
    }

    /**
     * 显示Toast,duration为long
     *
     *
     *            {@link Context} 当前窗体的上下文
     * @param str
     *            {@link String} 消息主体
     *
     */
    public void displayToastLong(String str) {
        Toast.makeText(context, str, Toast.LENGTH_LONG).show();
    }
    /**
     * 快速关闭toast
     * 不停的疯狂的点击某个按钮,触发了toast以后,toast内容会一直排着队的显示出来,不能很快的消失。这样可能会影响用户的使用。
     *
     *
     *            {@link Context} 当前窗体的上下文
     * @param str
     *            {@link String} 消息主体
     *
     * */

    public  void displayToastWithQuickClose(
            final String str) {
        new Thread(new Runnable() {

            public void run() {
                handler.post(new Runnable() {

                    public void run() {
                        synchronized (synObj) {
                            if (toast1 != null) {
                                toast1.setText(str);
                                toast1.setDuration(Toast.LENGTH_SHORT);
                            } else {
                                toast1 = Toast.makeText(context, str,
                                        Toast.LENGTH_SHORT);
                            }
                            toast1.show();
                        }
                    }
                });
            }
        }).start();
    }
}

13.UI相关工具类:

/**
     * 获取屏幕分辨率:宽
     *
     * @param context
     * @return
     */
    public static int getScreenPixWidth(Context context) {
        DisplayMetrics dm = new DisplayMetrics();
        if (!(context instanceof Activity)) {
            dm = context.getResources().getDisplayMetrics();
            return dm.widthPixels;
        }

        WindowManager wm = ((Activity) context).getWindowManager();
        if (wm == null) {
            dm = context.getResources().getDisplayMetrics();
            return dm.widthPixels;
        }

        wm.getDefaultDisplay().getMetrics(dm);
        return dm.widthPixels;
    }

    /**
     * 获取屏幕分辨率:高
     *
     * @param context
     * @return
     */
    public static int getScreenPixHeight(Context context) {
        DisplayMetrics dm = new DisplayMetrics();
        if (!(context instanceof Activity)) {
            dm = context.getResources().getDisplayMetrics();
            return dm.heightPixels;
        }

        WindowManager wm = ((Activity) context).getWindowManager();
        if (wm == null) {
            dm = context.getResources().getDisplayMetrics();
            return dm.heightPixels;
        }

        wm.getDefaultDisplay().getMetrics(dm);
        return dm.heightPixels;

    }


 /**
     * 获取当前手机的独立像素
     *
     * @param context
     * @return
     */
    public static float getDensity(Context context) {
        return context.getResources().getDisplayMetrics().density;
    }

    /**
     * dp2px
     */
    public static int dip2px(float dipValue) {
        return (int) (dipValue * getDensity(AppApplication.getInstance()) + 0.5f);
    }

    /**
     * px2dp
     */
    public static int px2dip(float pxValue) {
        return (int) (pxValue / getDensity(AppApplication.getInstance()) + 0.5f);
    }

public static void openBrowser(Context context, String url) {
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_VIEW);
        LogUtil.d("down", "" + url);
        Uri content_url = Uri.parse(url);
        intent.setData(content_url);
        context.startActivity(intent);
    }

    public static void cancleAllNotification(Context context) {
        NotificationManager nm = (NotificationManager)     context.getSystemService(Context.NOTIFICATION_SERVICE);
        nm.cancelAll();
    }

/**
     * 版本更新,显示加载的进度框
     */
    public static void showProgress(Context context,int maxProgress,OnDialogClickListener loadListener)
    {
        ProgressDialog progressDialog=new ProgressDialog(context);
        progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//设置水平的进度
        progressDialog.setMax(maxProgress);
        progressDialog.show();
        loadListener.onClick();
    }

//使用Glide加载图片,需要Glide的jar包
  /**带默认图*/
    public static void imageNet(Context context, String url, ImageView view, boolean isLocal, int defaltIcon) {
        if (!StringUtils.isEmpty(url) && url.startsWith("http")) {
            imageNet2(context, url, view, isLocal, defaltIcon);
        } else {
            Glide.with(context).load(isLocal ? url : getImgUrl(url)).diskCacheStrategy(DiskCacheStrategy.SOURCE).dontAnimate().placeholder(defaltIcon).into(view);
        }

    }

    /**不带默认图*/
    public static void imageNet(Context context, String url, ImageView view, boolean isLocal) {
        if (!StringUtils.isEmpty(url) && url.startsWith("http")) {
            imageNet2(context, url, view, isLocal);
        } else {
            Glide.with(context).load(isLocal ? url : getImgUrl(url)).diskCacheStrategy(DiskCacheStrategy.SOURCE).dontAnimate().into(view);
        }

    }

    public static void imageNet2(Context context, String url, ImageView view, boolean isLocal, int defaltIcon) {
        Glide.with(context).load(isLocal ? url : url).diskCacheStrategy(DiskCacheStrategy.SOURCE).dontAnimate().placeholder(defaltIcon).into(view);
    }

    /**不带默认图*/
    public static void imageNet2(Context context, String url, ImageView view, boolean isLocal ) {
        Glide.with(context).load(isLocal ? url : url).diskCacheStrategy(DiskCacheStrategy.SOURCE).dontAnimate().into(view);
    }

    public static String getImgUrl(String url) {
       // return Config.TEST_IMG_BASE_URL + url;
        return "";
    }

 /*
     * 按正方形裁切图片
     */
    public static Bitmap ImageCrop(Bitmap bitmap) {
        int w = bitmap.getWidth(); // 得到图片的宽,高
        int h = bitmap.getHeight();

        if (w == h) {
            return bitmap;
        } else {
            int wh = w > h ? h : w;// 裁切后所取的正方形区域边长

            int retX = w > h ? (w - h) / 2 : 0;// 基于原图,取正方形左上角x坐标
            int retY = w > h ? 0 : (h - w) / 2;

            // 下面这句是关键
            return Bitmap.createBitmap(bitmap, retX, retY, wh, wh, null, false);
        }

    }

public static void deleteAllFiles(File root) {
        File files[] = root.listFiles();
        if (files != null)
            for (File f : files) {
                if (f.isDirectory()) { // 判断是否为文件夹
                    deleteAllFiles(f);
                    try {
                        f.delete();
                    } catch (Exception e) {
                    }
                } else {
                    if (f.exists()) { // 判断是否存在
                        deleteAllFiles(f);
                        try {
                            f.delete();
                        } catch (Exception e) {
                        }
                    }
                }
            }
    }

 /**
     * TextView非空校验
     */
    public static boolean checkTv(BaseActivity activity, TextView ...tv) {
        for (TextView textView:tv){
            String temp = textView.getText().toString().trim();
            if (StringUtils.isEmpty(temp)) {
                return false;
            }
        }

        return true;
    }

    /**
     * TextView非空校验,空则吐司提示
     */
    public static boolean checkTv(BaseActivity activity, TextView tv, String msg) {
        String temp = tv.getText().toString().trim();
        if (StringUtils.isEmpty(temp)) {
            activity.showToast(msg);
            return false;
        }
        return true;
    }


    /**
     * TextView非空校验,空则添加晃动动画效果+吐司提示
     * */
    public static boolean checkTvWithAnim(BaseActivity activity, TextView tv, String msg) {
        String temp = tv.getText().toString().trim();
        if (StringUtils.isEmpty(temp)) {
            startShakeAnimation(tv);
            activity.showToast(msg);
            return false;
        }
        return true;
    }

    /**验证TextView中的文本长度至少N个字符*/
    public static boolean checkTvLimit(BaseActivity activity,TextView tv,int limit,String msg){
        String temp = tv.getText().toString().trim();
        if (temp.length()<limit){
            startShakeAnimation(tv);
            activity.showToast(msg);
            return false;
        }
        return true;
    }

    /**验证TextView中的文本长度至少N个字符*/
    public static boolean checkTvLimit(BaseActivity activity,TextView tv,int limitlef,int limitright,String msg){
        String temp = tv.getText().toString().trim();
        if (temp.length()<limitlef||temp.length()>limitright){
            startShakeAnimation(tv);
            activity.showToast(msg);
            return false;
        }
        return true;
    }


    /**
     * 开始晃动动画
     */
    public static void startShakeAnimation(TextView textView) {
        if (textView.getAnimation() == null) {
            textView.setAnimation(shakeAnimation(4));
        }
        textView.startAnimation(textView.getAnimation());
    }

    /**
     * 晃动动画
     *
     * @param counts 0.5秒钟晃动多少下
     */
    public static Animation shakeAnimation(int counts) {
        TranslateAnimation animation = new TranslateAnimation(0, 10, 0, 0);
        animation.setInterpolator(new CycleInterpolator(counts));
        animation.setDuration(500);
        return animation;
    }


    /**验证手机号码是否正确,不正确则提示,并晃动窗口*/
    public static boolean checkPhoneNumberAvailable(BaseActivity activity,TextView phoneView){
        String phoneNum=phoneView.getText().toString().trim();
        if (StringUtils.isEmpty(phoneNum)){
            activity.showToast("手机号不能为空");
            startShakeAnimation(phoneView);
            return false;
        }else if (!StringUtils.phoneNumberValid(phoneNum)){
            activity.showToast("请输入正确的手机号");
            startShakeAnimation(phoneView);
             return false;
        }
        return true;
    }

    /**
     * 判断密码是否一致
     */
    public static boolean checkPwdSame(BaseActivity activity,TextView tv,TextView tvConfirm,String msg){
        String temp=tv.getText().toString().trim();
        String tempConfirm=tvConfirm.getText().toString().trim();
        if(temp.equals(tempConfirm)){
            return true;
        }
        activity.showToast(msg);
        return false;
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值