Utils(上)一些常用的工具类

Utils一些常用的工具类
在做android 开发过程中经常会用到一些工具类,特此附上常用的工具类,供大家参考:

  1. 日志打印工具类
    在实际开发中,我们需要对我们的程序进行测试,测试的话就需要将工作的日志给打印出来,便于了解整个程序的流程及寻找Bug。
    /**
 * 日志工具
 * 
 * @todo 项目内所有debug日志输出都用此类来操作[方便后期日志开关的管理]
 * 
 * @author madreain
 */
public class LogUtil {

    public static boolean isDebug = true;// 是否需要打印bug,可以在application的onCreate函数里面初始化
    private static final String TAG = "LogUtil";

    // 下面四个是默认tag的函数
    public static void i(String msg)
    {
        if (isDebug)
            Log.i(TAG, msg);
    }

    public static void d(String msg)
    {
        if (isDebug)
            Log.d(TAG, msg);
    }

    public static void e(String msg)
    {
        if (isDebug)
            Log.e(TAG, msg);
    }

    public static void v(String msg)
    {
        if (isDebug)
            Log.v(TAG, msg);
    }

    // 下面是传入自定义tag的函数
    public static void i(String tag, String msg)
    {
        if (isDebug)
            Log.i(tag, msg);
    }

    public static void d(String tag, String msg)
    {
        if (isDebug)
            Log.i(tag, msg);
    }

    public static void e(String tag, String msg)
    {
        if (isDebug)
            Log.i(tag, msg);
    }

    public static void v(String tag, String msg)
    {
        if (isDebug)
            Log.i(tag, msg);
    }

}

2.Toast工具类

用于交互时直接向用户显示一些特定的内容,或用于测试时,查看显示的内容等

`/**
* Toast(吐司,我们经常叫吐司,有点不好听)工具类
* @param context 上下文(例如:MainActivity.this)
* @param message 显示的消息
* @author madreain
*/
public class ToastUtil {

    public static boolean isShow = true;// 是否需要toast显示内容,可以在application的onCreate函数里面初始化

    /**
     * 短时间显示Toast
     * @param context 上下文(例如:MainActivity.this)
     * @param message 显示的消息
     */
    public static void showShortMessage(Context context, CharSequence message)
    {
        if (isShow)
            Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
    }

    /**
     * 短时间显示Toast
     *
     * @param context 上下文(例如:MainActivity.this)
     * @param message 显示的消息
     */
    public static void showShortMessage(Context context, int message)
    {
        if (isShow)
            Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
    }

    /**
     * 长时间显示Toast
     * @param context 上下文(例如:MainActivity.this)
     * @param message 显示的消息
     */
    public static void showLongMessage(Context context, CharSequence message)
    {
        if (isShow)
            Toast.makeText(context, message, Toast.LENGTH_LONG).show();
    }

    /**
     * 长时间显示Toast
     * @param context 上下文(例如:MainActivity.this)
     * @param message 显示的消息
     */
    public static void showLongMessage(Context context, int message)
    {
        if (isShow)
            Toast.makeText(context, message, Toast.LENGTH_LONG).show();
    }

    /**
     * 自定义显示Toast时间
     * @param context 上下文(例如:MainActivity.this)
     * @param message 显示的消息
     * @param duration 自定义显示时间
     */
    public static void showCustomizeMessage(Context context, CharSequence message, int duration)
    {
        if (isShow)
            Toast.makeText(context, message, duration).show();
    }

    /**
     * 自定义显示Toast时间
     * @param context 上下文(例如:MainActivity.this)
     * @param message 显示的消息
     * @param duration 自定义显示时间
     */
    public static void showCustomizeMessage(Context context, int message, int duration)
    {
        if (isShow)
            Toast.makeText(context, message, duration).show();
    }

}`

3.文件大小转换工具
文件大小的字符串单位B? KB? MB? GB?的转换

    /**
     * 获取指定文件大小的字符串单位B? KB? MB? GB?
     * 
     * @param filesize
     *            文件大小(byte)
     * @return 文件大小的字符串单位B? KB? MB? GB?
     */
    public static String formatSize(long filesize) {
        if (filesize < 0) {
            return "0 B";
        }
        mstrbuf.replace(0, mstrbuf.length(), STR_EMPTY);
        if (filesize < 1024) {
            mstrbuf.append(filesize);
            mstrbuf.append(" B");
        } else if (filesize < 1048576) {
            mstrbuf.append(df.format((double) filesize / 1024));
            mstrbuf.append(" K");
        } else if (filesize < 1073741824) {
            mstrbuf.append(df.format((double) filesize / 1048576));
            mstrbuf.append(" M");
        } else {
            mstrbuf.append(df.format((double) filesize / 1073741824));
            mstrbuf.append(" G");
        }
        return mstrbuf.toString();
    }

4.文件获取工具

 * 文件获取工具(PHOTO, FILE, VIDEO, AUDIO, RIDE)
 * @author madreain
 */
public class FileUtils {

    public enum MBFileType {
        PHOTO, FILE, VIDEO, AUDIO, RIDE
    }

    /**
     * 获取文件路径
     *
     * @param bytes
     * @param mbFileType
     * @return
     */
    public static String getFilePath(byte[] bytes, MBFileType mbFileType) {
        String fileType = getCachePath(mbFileType);
        String path = "/Madreain" + "/" + UserLoginManager.mobileno + "/" + fileType + "/";
        if (getPath() == null) {
            return null;
        } else {
            File dirFile = new File(getPath(), path);
            if (!dirFile.exists()) {
                dirFile.mkdirs();
            }
            String uuid = Util.getUUID();
            File cacheFile = new File(dirFile, uuid);
            ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
            FileOutputStream fos = null;
            try {
                fos = new FileOutputStream(cacheFile);
                byte[] bs = new byte[1024];
                int len = 0;
                while ((len = bais.read(bs)) != -1) {
                    fos.write(bs, 0, len);
                }

                return cacheFile.getPath();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (fos != null) {
                        fos.close();
                    }

                    if (bais != null) {
                        bais.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return null;
    }

    /**
     * 检查SD卡是否可用
     *
     * @return
     */
    public static boolean isSDCardUsable() {
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 获取SD卡路径
     *
     * @return
     */
    public static File getPath() {
        if (isSDCardUsable()) {
            return Environment.getExternalStorageDirectory();
        }
        return null;
    }

    /**
     * 获取文件类型名称
     *
     * @param mbFileType
     * @return
     */
    public static String getCachePath(MBFileType mbFileType) {
        String name = null;
        switch (mbFileType) {
            case PHOTO:
                name = "photo";
                break;
            case FILE:
                name = "file";
                break;
            case VIDEO:
                name = "video";
                break;
            case AUDIO:
                name = "audio";
                break;
            case RIDE:
                name = "ride";
                break;
        }
        return name;
    }
}

5.IOUtil

“/**
* 从输入流中获取对应字符串
* @author madreain
*/

public class IOUtils {

/**
 * 从输入流中获取对应字符串
 * @param is
 * @return
 */
public static String getTextFromStream(InputStream is) {
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    byte[] bytes = new byte[1024];
    int len = 0;
    try {
        while((len = is.read(bytes)) != -1) {
            bos.write(bytes, 0, len);
        }

        String text = new String(bos.toByteArray());
        return text;
    } catch (IOException e) {
        e.printStackTrace();
    } finally {

        try {

            if(bos != null) {
                bos.close();
            }

        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    return null;
}

}

6.String工具

/**
* String工具类
* @author madreain
*/

public class StringUtils {

    /**
     * 将String数组拼接成String
     *
     * @param stringArray
     * @param regularExpression
     * @return
     */
    public static String stringArrayToString(String[] stringArray, String regularExpression) {
        if (stringArray != null && stringArray.length > 0) {
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < stringArray.length; i++) {
                if (i == stringArray.length - 1) {
                    sb.append(stringArray[i]);
                    return sb.toString();
                }
                sb.append(stringArray[i]).append(regularExpression);
            }
        }
        return null;
    }

    /**
     * String集合拼接成String
     *
     * @param stringList
     * @param regularExpression
     * @return
     */
    public static String stringListToString(List<String> stringList, String regularExpression) {
        if (stringList != null && stringList.size() > 0) {
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < stringList.size(); i++) {
                if (i == stringList.size() - 1) {
                    sb.append(stringList.get(i));
                    return sb.toString();
                }
                sb.append(stringList.get(i)).append(regularExpression);
            }
        }
        return null;
    }

}

7.本地存储工具类

android用五大存储方式,( 使用SharedPreferences存储数据、文件存储数据  、SQLite数据库存储数据、 使用ContentProvider存储数据、网络存储数据),现在我们来封装一下本地存储,在以后编程中本地存储将会更简单明了。

/**
 *本地存储工具类
 *
 * @param 对外提供put,get,remove,clear等等方法;
 * @param 注意里面所有的commit操作使用了SharedPreferencesCompat.apply进行了替代,
 * 目的是尽可能的使用apply代替commit,
 * 因为commit方法是同步的,
 * 并且我们很多时候的commit操作都是UI线程中,毕竟是IO操作,尽可能异步;
 * 所以我们使用apply进行替代,apply异步的进行写入;
 */
public class SharedPreferencesUtil {

    /**
     * 保存在手机里面的文件名
     */
    public static final String FILE_NAME = "madreain_data";//根据项目实际情况来定

    /**
     * 保存数据的方法,我们需要拿到保存数据的具体类型,然后根据类型调用不同的保存方法
     *
     * @param context
     * @param key
     * @param object
     */
    public static void put(Context context, String key, Object object)
    {

        SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
                Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sp.edit();

        if (object instanceof String)
        {
            editor.putString(key, (String) object);
        } else if (object instanceof Integer)
        {
            editor.putInt(key, (Integer) object);
        } else if (object instanceof Boolean)
        {
            editor.putBoolean(key, (Boolean) object);
        } else if (object instanceof Float)
        {
            editor.putFloat(key, (Float) object);
        } else if (object instanceof Long)
        {
            editor.putLong(key, (Long) object);
        } else
        {
            editor.putString(key, object.toString());
        }

        SharedPreferencesCompat.apply(editor);
    }

    /**
     * 得到保存数据的方法,我们根据默认值得到保存的数据的具体类型,然后调用相对于的方法获取值
     *
     * @param context
     * @param key
     * @param defaultObject
     * @return
     */
    public static Object get(Context context, String key, Object defaultObject)
    {
        SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
                Context.MODE_PRIVATE);

        if (defaultObject instanceof String)
        {
            return sp.getString(key, (String) defaultObject);
        } else if (defaultObject instanceof Integer)
        {
            return sp.getInt(key, (Integer) defaultObject);
        } else if (defaultObject instanceof Boolean)
        {
            return sp.getBoolean(key, (Boolean) defaultObject);
        } else if (defaultObject instanceof Float)
        {
            return sp.getFloat(key, (Float) defaultObject);
        } else if (defaultObject instanceof Long)
        {
            return sp.getLong(key, (Long) defaultObject);
        }

        return null;
    }

    /**
     * 移除某个key值已经对应的值
     * @param context
     * @param key
     */
    public static void remove(Context context, String key)
    {
        SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
                Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sp.edit();
        editor.remove(key);
        SharedPreferencesCompat.apply(editor);
    }

    /**
     * 清除所有数据
     * @param context
     */
    public static void clear(Context context)
    {
        SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
                Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sp.edit();
        editor.clear();
        SharedPreferencesCompat.apply(editor);
    }

    /**
     * 查询某个key是否已经存在
     * @param context
     * @param key
     * @return
     */
    public static boolean contains(Context context, String key)
    {
        SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
                Context.MODE_PRIVATE);
        return sp.contains(key);
    }

    /**
     * 返回所有的键值对
     *
     * @param context
     * @return
     */
    public static Map<String, ?> getAll(Context context)
    {
        SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
                Context.MODE_PRIVATE);
        return sp.getAll();
    }

    /**
     * 创建一个解决SharedPreferencesCompat.apply方法的一个兼容类
     *
     * @author madreain
     *
     */
    private static class SharedPreferencesCompat
    {
        private static final Method sApplyMethod = findApplyMethod();

        /**
         * 反射查找apply的方法
         *
         * @return
         */
        @SuppressWarnings({ "unchecked", "rawtypes" })
        private static Method findApplyMethod()
        {
            try
            {
                Class clz = SharedPreferences.Editor.class;
                return clz.getMethod("apply");
            } catch (NoSuchMethodException e)
            {
            }

            return null;
        }

        /**
         * 如果找到则使用apply执行,否则使用commit
         *
         * @param editor
         */
        public static void apply(SharedPreferences.Editor editor)
        {
            try
            {
                if (sApplyMethod != null)
                {
                    sApplyMethod.invoke(editor);
                    return;
                }
            } catch (IllegalArgumentException e)
            {
            } catch (IllegalAccessException e)
            {
            } catch (InvocationTargetException e)
            {
            }
            editor.commit();
        }
    }

}

8.dp、px、sp转换工具类

/**
 * dp、px、sp转换工具类
 *
 * @param  相互转换  context  val
 * @author madreain
 */
public class LayoutUtil {

    /**
     * dp转px
     *
     * @param context
     * @param val
     * @return
     */
    public static int dp2px(Context context, float dpVal)
    {
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
                dpVal, context.getResources().getDisplayMetrics());
    }

    /**
     * sp转px
     *
     * @param context
     * @param val
     * @return
     */
    public static int sp2px(Context context, float spVal)
    {
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,
                spVal, context.getResources().getDisplayMetrics());
    }

    /**
     * px转dp
     *
     * @param context
     * @param pxVal
     * @return
     */
    public static float px2dp(Context context, float pxVal)
    {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (pxVal / scale);
    }

    /**
     * px转sp
     *
     * @param fontScale
     * @param pxVal
     * @return
     */
    public static float px2sp(Context context, float pxVal)
    {
        return (pxVal / context.getResources().getDisplayMetrics().scaledDensity);
    }

}

9.SD卡工具类

/**
 * SD卡工具类
 * @author madreain
 */
public class SDCardUtil {

        /**
         * 判断SDCard是否可用
         *
         * @return
         */
        public static boolean isSDCardEnable()
        {
            return Environment.getExternalStorageState().equals(
                    Environment.MEDIA_MOUNTED);

        }

        /**
         * 获取SD卡路径
         *
         * @return
         */
        public static String getSDCardPath()
        {
            return Environment.getExternalStorageDirectory().getAbsolutePath()
                    + File.separator;
        }

        /**
         * 获取SD卡的剩余容量 单位byte
         *
         * @return
         */
        public static long getSDCardAllSize()
        {
            if (isSDCardEnable())
            {
                StatFs stat = new StatFs(getSDCardPath());
                // 获取空闲的数据块的数量
                long availableBlocks = (long) stat.getAvailableBlocks() - 4;
                // 获取单个数据块的大小(byte)
                long freeBlocks = stat.getAvailableBlocks();
                return freeBlocks * availableBlocks;
            }
            return 0;
        }

        /**
         * 获取指定路径所在空间的剩余可用容量字节数,单位byte
         *
         * @param filePath
         * @return 容量字节 SDCard可用空间,内部存储可用空间
         */
        public static long getFreeBytes(String filePath)
        {
            // 如果是sd卡的下的路径,则获取sd卡可用容量
            if (filePath.startsWith(getSDCardPath()))
            {
                filePath = getSDCardPath();
            } else
            {// 如果是内部存储的路径,则获取内存存储的可用容量
                filePath = Environment.getDataDirectory().getAbsolutePath();
            }
            StatFs stat = new StatFs(filePath);
            long availableBlocks = (long) stat.getAvailableBlocks() - 4;
            return stat.getBlockSize() * availableBlocks;
        }

        /**
         * 获取系统存储路径
         *
         * @return
         */
        public static String getRootDirectoryPath()
        {
            return Environment.getRootDirectory().getAbsolutePath();
        }

}
  1. 屏幕相关工具类
/**
 * 屏幕相关工具类
 * @param  屏幕宽度  屏幕高度  状态栏  截图(是否包含状态栏)
 * @author madreain
 */
public class ScreenUtil {

    /**
     * 获得屏幕高度
     *
     * @param context
     * @return
     */
    public static int getScreenWidth(Context context)
    {
        WindowManager wm = (WindowManager) context
                .getSystemService(Context.WINDOW_SERVICE);
        DisplayMetrics outMetrics = new DisplayMetrics();
        wm.getDefaultDisplay().getMetrics(outMetrics);
        return outMetrics.widthPixels;
    }

    /**
     * 获得屏幕宽度
     *
     * @param context
     * @return
     */
    public static int getScreenHeight(Context context)
    {
        WindowManager wm = (WindowManager) context
                .getSystemService(Context.WINDOW_SERVICE);
        DisplayMetrics outMetrics = new DisplayMetrics();
        wm.getDefaultDisplay().getMetrics(outMetrics);
        return outMetrics.heightPixels;
    }

    /**
     * 获得状态栏的高度
     *
     * @param context
     * @return
     */
    public static int getStatusHeight(Context context)
    {

        int statusHeight = -1;
        try
        {
            Class<?> clazz = Class.forName("com.android.internal.R$dimen");
            Object object = clazz.newInstance();
            int height = Integer.parseInt(clazz.getField("status_bar_height")
                    .get(object).toString());
            statusHeight = context.getResources().getDimensionPixelSize(height);
        } catch (Exception e)
        {
            e.printStackTrace();
        }
        return statusHeight;
    }

    /**
     * 获取当前屏幕截图,包含状态栏
     *
     * @param activity
     * @return
     */
    public static Bitmap snapShotWithStatusBar(Activity activity)
    {
        View view = activity.getWindow().getDecorView();
        view.setDrawingCacheEnabled(true);
        view.buildDrawingCache();
        Bitmap bmp = view.getDrawingCache();
        int width = getScreenWidth(activity);
        int height = getScreenHeight(activity);
        Bitmap bp = null;
        bp = Bitmap.createBitmap(bmp, 0, 0, width, height);
        view.destroyDrawingCache();
        return bp;

    }

    /**
     * 获取当前屏幕截图,不包含状态栏
     *
     * @param activity
     * @return
     */
    public static Bitmap snapShotWithoutStatusBar(Activity activity)
    {
        View view = activity.getWindow().getDecorView();
        view.setDrawingCacheEnabled(true);
        view.buildDrawingCache();
        Bitmap bmp = view.getDrawingCache();
        Rect frame = new Rect();
        activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
        int statusBarHeight = frame.top;

        int width = getScreenWidth(activity);
        int height = getScreenHeight(activity);
        Bitmap bp = null;
        bp = Bitmap.createBitmap(bmp, 0, statusBarHeight, width, height
                - statusBarHeight);
        view.destroyDrawingCache();
        return bp;

    }

}

Utils(下)一些常用的工具类将会去介绍一下获取App相关信息的工具类、软键盘工具类、网络工具类、自定义设置状态栏工具类等

大家有什么android开发问题可以一起交流(QQ:965244491 附微信二维码扫我扫我

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值