Android企业级架构-仿微信-功能组件建设

作者: MonchChen | 来源:发表于2017-05-10 17:22 被阅读254次

    在前面的文章中,我们做了基础的网络库Lib、数据库Lib、UI库Lib,现在还有一节重要的Lib库等着我们去搭建,那就是功能库。
    功能库中存放一些常用的工具类,比如时间/日期工具、文件处理工具、集合判断工具、Toast工具、SharedPreferences(偏好)工具等。下面我们开始处理

    1. 创建module:


      创建Library
    2. 在工程目录下的build.gradle中ext中添加如下版本号:
      // Common Library版本号
      commonVersionCode = 1
      commonVersionName = "1.0"
    3. 在common目录下的build.gradle中修改为如下样式(保持与其它Library相同样式):
    apply plugin: 'com.android.library'
    
    android {
        compileSdkVersion rootProject.ext.compileSdkVersion
        buildToolsVersion rootProject.ext.buildToolsVersion
        defaultConfig {
            minSdkVersion rootProject.ext.minSdkVersion
            targetSdkVersion rootProject.ext.targetSdkVersion
            versionCode rootProject.ext.commonVersionCode
            versionName rootProject.ext.commonVersionName
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }
    
    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        androidTestCompile("com.android.support.test.espresso:espresso-core:$rootProject.ext.androidTestCompileVersion", {
            exclude group: 'com.android.support', module: 'support-annotations'
        })
        compile "com.android.support:appcompat-v7:$rootProject.ext.supportVersion"
        testCompile "junit:junit:$rootProject.ext.junitVersion"
    }
    
    1. 在common目录下,打开src->main下的AndroidManifest.xml,将application标签删除。
    2. 接下来,我们先在common目录下的com.monch.common包下,添加第一个工具类,在Android中最常用的就是Toast,笔者的习惯是创建一个类,起名叫T.java,代码如下:
    public final class T {
    
        private T() {}
    
        public static void ss(Context context, @StringRes int id) {
            Toast.makeText(context, id, Toast.LENGTH_SHORT).show();
        }
    
        public static void ss(Context context, CharSequence text) {
            Toast.makeText(context, text, Toast.LENGTH_SHORT).show();
        }
    
        public static void sl(Context context, @StringRes int id) {
            Toast.makeText(context, id, Toast.LENGTH_LONG).show();
        }
    
        public static void sl(Context context, CharSequence text) {
            Toast.makeText(context, text, Toast.LENGTH_LONG).show();
        }
    
    }
    

    这个类我们简单处理一下,如果有需要修改Toast的样式或其它需求,可以直接在这里修改。这样大家在使用的时候,会非常方便,例如T.ss("xxx");或T.sl("xxx"); 这两个方法的区别是显示的时间长短。

    再来个字符串工具类

    public class StringUtils {
    
        private StringUtils() {}
    
        public static boolean isEmpty(CharSequence cs) {
            return cs == null || cs.length() == 0;
        }
    
        public static boolean isNotEmpty(CharSequence cs) {
            return !isEmpty(cs);
        }
    
        public static boolean equals(String str1, String str2) {
            return (str1 == null && str2 == null) ||
                    (isNotEmpty(str1) && str1.equals(str2));
        }
    
        public static boolean isWebSite(String string) {
            return isNotEmpty(string) && string.matches(Patterns.WEB_URL.pattern());
        }
        
        public static boolean isPhone(String string) {
            return isNotEmpty(string) && string.matches(Patterns.PHONE.pattern());
        }
        
        public static boolean isEmail(String string) {
            return isNotEmpty(string) && string.matches(Patterns.EMAIL_ADDRESS.pattern());
        }
    
    }
    

    再来一个偏好存储工具类

    public final class PreferenceUtils {
    
        private PreferenceUtils() {}
        
        private static SharedPreferences sp;
    
        /**
         * 获取偏好执行器
         * @return
         */
        public static void init(Context context) {
            sp = context.getSharedPreferences(context.getPackageName(), Context.MODE_PRIVATE);
        }
    
        /**
         * 添加偏好内容:异步,不会引起长时间等待
         * @param key
         * @param value
         */
        public static void put(String key, Object value) {
            if (StringUtils.isEmpty(key) || value == null) return;
            SharedPreferences.Editor editor = sp.edit();
            if (value instanceof String ||
                    value instanceof StringBuilder ||
                    value instanceof StringBuffer) {
                editor.putString(key, String.valueOf(value));
                editor.apply();
            } else if (value instanceof Integer) {
                editor.putInt(key, (int) value);
                editor.apply();
            } else if (value instanceof Long) {
                editor.putLong(key, (long) value);
                editor.apply();
            } else if (value instanceof Float) {
                editor.putFloat(key, (float) value);
                editor.apply();
            } else if (value instanceof Boolean) {
                editor.putBoolean(key, (boolean) value);
                editor.apply();
            }
        }
    
        /**
         * 添加偏好内容:同步,可能会引起长时间等待
         * @param key
         * @param value
         * @return 添加是否成功
         */
        public static boolean putSync(String key, Object value) {
            if (StringUtils.isEmpty(key) || value == null)
                return false;
            SharedPreferences.Editor editor = sp.edit();
            if (value instanceof String ||
                    value instanceof StringBuilder ||
                    value instanceof StringBuffer) {
                editor.putString(key, String.valueOf(value));
                return editor.commit();
            } else if (value instanceof Integer) {
                editor.putInt(key, (int) value);
                return editor.commit();
            } else if (value instanceof Long) {
                editor.putLong(key, (long) value);
                return editor.commit();
            } else if (value instanceof Float) {
                editor.putFloat(key, (float) value);
                return editor.commit();
            } else if (value instanceof Boolean) {
                editor.putBoolean(key, (boolean) value);
                return editor.commit();
            }
            return false;
        }
    
        /**
         * 获取字符串
         * @param key
         * @return
         */
        public static String getString(String key) {
            return getString(key, null);
        }
    
        /**
         * 获取字符串
         * @param key
         * @param defaultValue
         * @return
         */
        public static String getString(String key, String defaultValue) {
            return sp.getString(key, defaultValue);
        }
    
        /**
         * 获取整型
         * @param key
         * @return
         */
        public static int getInt(String key) {
            return getInt(key, 0);
        }
    
        /**
         * 获取整型
         * @param key
         * @param defaultValue
         * @return
         */
        public static int getInt(String key, int defaultValue) {
            return sp.getInt(key, defaultValue);
        }
    
        /**
         * 获取长整型
         * @param key
         * @return
         */
        public static long getLong(String key) {
            return getLong(key, 0L);
        }
    
        /**
         * 获取长整型
         * @param key
         * @param defaultValue
         * @return
         */
        public static long getLong(String key, long defaultValue) {
            return sp.getLong(key, defaultValue);
        }
    
        /**
         * 获取浮点型
         * @param key
         * @return
         */
        public static float getFloat(String key) {
            return getFloat(key, 0F);
        }
    
        /**
         * 获取浮点型
         * @param key
         * @param defaultValue
         * @return
         */
        public static float getFloat(String key, float defaultValue) {
            return sp.getFloat(key, defaultValue);
        }
    
        /**
         * 获取布尔型
         * @param key
         * @return
         */
        public static boolean getBoolean(String key) {
            return getBoolean(key, false);
        }
    
        /**
         * 获取布尔型
         * @param key
         * @param defaultValue
         * @return
         */
        public static boolean getBoolean(String key, boolean defaultValue) {
            return sp.getBoolean(key, defaultValue);
        }
    
        /**
         * 移除偏好内容:异步,不会引起长时间等待
         * @param key
         */
        public static void remove(String key) {
            if (StringUtils.isEmpty(key)) return;
            SharedPreferences.Editor editor = sp.edit();
            editor.remove(key);
            editor.apply();
        }
    
        /**
         * 移除偏好内容:同步,可能会引起长时间等待
         * @param key
         * @return
         */
        public static boolean removeSync(String key) {
            if (StringUtils.isEmpty(key)) return false;
            SharedPreferences.Editor editor = sp.edit();
            editor.remove(key);
            return editor.commit();
        }
    
    }
    

    我们暂时先添加这几个工个类,接下来使用到什么,我们再添加就可以了。
    查看源码请移步GitHub

    相关文章

      网友评论

      本文标题:Android企业级架构-仿微信-功能组件建设

      本文链接:https://www.haomeiwen.com/subject/hxpitxtx.html