diff --git a/CHANGELOG.md b/CHANGELOG.md index f8f92001045e84bd499b701838ee98397ff10aa3..f17493a1c0b51cf4793ac35211d9fd7fe4db4fae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,6 @@ -* `18/12/19` [fix] AdaptScreenUtils not work in MIUI on Android 5.1.1. Publish v1.22.5. +* `18/12/22` [fix] AdaptScreenUtils#pt2px don't work when start webview. Publish v1.22.6. +* `18/12/21` [add] LogUtils support print Map, Collection and Object to String. +* `18/12/19` [fix] AdaptScreenUtils don't work in MIUI on Android 5.1.1. Publish v1.22.5. * `18/12/18` [fix] ToastUtils multi show crash when run API 25. Publish v1.22.4. * `18/12/18` [fix] ImageUtils recycle ret equals src. Publish v1.22.3. * `18/12/17` [fix] Utils$FileProvider4UtilCode not found. Publish v1.22.3. diff --git a/README-CN.md b/README-CN.md index 78693f81b11dbf4de074960bf990fbcca2315215..d46bf54d171592354a059895519b1420192b89f5 100644 --- a/README-CN.md +++ b/README-CN.md @@ -41,7 +41,7 @@ [logo]: https://raw.githubusercontent.com/Blankj/AndroidUtilCode/master/art/logo.png -[aucSvg]: https://img.shields.io/badge/AndroidUtilCode-v1.22.5-brightgreen.svg +[aucSvg]: https://img.shields.io/badge/AndroidUtilCode-v1.22.6-brightgreen.svg [auc]: https://github.com/Blankj/AndroidUtilCode [apiSvg]: https://img.shields.io/badge/API-14+-brightgreen.svg diff --git a/README.md b/README.md index ba71fc5b08282263e59089b83002f616553ec046..73ab10a5cfaa7bae1b08c8a777a1bf8715dcdbb5 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ If this project helps you a lot and you want to support the project's developmen [logo]: https://raw.githubusercontent.com/Blankj/AndroidUtilCode/master/art/logo.png -[aucSvg]: https://img.shields.io/badge/AndroidUtilCode-v1.22.5-brightgreen.svg +[aucSvg]: https://img.shields.io/badge/AndroidUtilCode-v1.22.6-brightgreen.svg [auc]: https://github.com/Blankj/AndroidUtilCode [apiSvg]: https://img.shields.io/badge/API-14+-brightgreen.svg diff --git a/config.gradle b/config.gradle index 7ab06ffb705d3d878c1393dad8447c333209262b..7bbf77f191669b8590244b3029b3b7450832d58d 100644 --- a/config.gradle +++ b/config.gradle @@ -5,8 +5,8 @@ ext { compileSdkVersion = 27 minSdkVersion = 14 targetSdkVersion = 27 - versionCode = 1_022_005 - versionName = '1.22.5'// E.g. 1.9.72 => 1,009,072 + versionCode = 1_022_006 + versionName = '1.22.6'// E.g. 1.9.72 => 1,009,072 bus = [ isDebug: false, diff --git a/lib/base/build.gradle b/lib/base/build.gradle index 28b77441df8c46fabdd0b91f3aa4e3c81549f4c7..22d9084825dec6f8e6e51b32c93ac2e4ba06c156 100644 --- a/lib/base/build.gradle +++ b/lib/base/build.gradle @@ -15,5 +15,5 @@ dependencies { api dep.free_proguard api 'com.r0adkll:slidableactivity:2.0.5' compileOnly dep.leakcanary.android_no_op -// api 'com.blankj:utilcode:1.22.5' +// api 'com.blankj:utilcode:1.22.6' } \ No newline at end of file diff --git a/utilcode/README-CN.md b/utilcode/README-CN.md index 54469b841ee4ded86a4be5be475577eaa66b0510..ff9395b0efc3d50ae427c78da69fc42dabb32929 100644 --- a/utilcode/README-CN.md +++ b/utilcode/README-CN.md @@ -2,7 +2,7 @@ Gradle: ```groovy -implementation 'com.blankj:utilcode:1.22.5' +implementation 'com.blankj:utilcode:1.22.6' ``` diff --git a/utilcode/README-STATIC-BUS.md b/utilcode/README-STATIC-BUS.md index 5b1599b491d2f1054ce0aced15d9c7a7d43e4bdd..4946c0d5b371b07a9a361973fb1e6cfd90381a16 100644 --- a/utilcode/README-STATIC-BUS.md +++ b/utilcode/README-STATIC-BUS.md @@ -27,7 +27,7 @@ apply plugin: "com.blankj.bus" 给 base 模块添加 [AndroidUtilCode](https://github.com/Blankj/AndroidUtilCode) 依赖: ```groovy -api "com.blankj:utilcode:1.22.5" +api "com.blankj:utilcode:1.22.6" ``` 比如 module0 中存在的 `Module0Activity.java`,我们通常都是在它内部写一个 `start` 函数来启动它,现在我们给它添加 `@BusUtils.Subscribe` 注解,并给注解的 `name` 赋唯一值,要注意,函数务必要 `public static` 哦: diff --git a/utilcode/README.md b/utilcode/README.md index ba78747d7558bd25e0cc9b3cf102da9870a7b7a0..8a3c95f4ddcf2669eaa29a1e74a60afd15bc0858 100644 --- a/utilcode/README.md +++ b/utilcode/README.md @@ -2,7 +2,7 @@ Gradle: ```groovy -implementation 'com.blankj:utilcode:1.22.5' +implementation 'com.blankj:utilcode:1.22.6' ``` diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/LogUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/LogUtils.java index ecc20a11a21b7f4443791081a4451fd38fc8ca1e..bd66a8c5b2314ac66b371505496252204168654c 100644 --- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/LogUtils.java +++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/LogUtils.java @@ -30,16 +30,22 @@ import java.io.StringReader; import java.io.StringWriter; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.net.UnknownHostException; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.Date; import java.util.Formatter; import java.util.Iterator; +import java.util.List; import java.util.Locale; +import java.util.Map; import java.util.Set; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -345,7 +351,9 @@ public final class LogUtils { if (object instanceof Throwable) return LogFormatter.throwable2String((Throwable) object); if (object instanceof Bundle) return LogFormatter.bundle2String((Bundle) object); if (object instanceof Intent) return LogFormatter.intent2String((Intent) object); - return object.toString(); + if (object instanceof Map) return LogFormatter.map2String((Map) object); + if (object instanceof Collection) return LogFormatter.collection2String((Collection) object); + return LogFormatter.object2String(object); } private static void print2Console(final int type, @@ -982,6 +990,58 @@ public final class LogUtils { return sb.toString(); } + static String map2String(Map map) { + JSONObject jsonObject = new JSONObject(map); + return jsonObject.toString(); + } + + static String collection2String(Collection collection) { + JSONObject jsonObject = new JSONObject(); + try { + jsonObject.put("size", collection.size()); + jsonObject.put("data", collection); + return jsonObject.toString(); + } catch (JSONException ignore) { + return collection.toString(); + } + } + + static String object2String(Object object) { + if (object instanceof String || object instanceof JSONObject || + object instanceof JSONArray) { + return object.toString(); + } + Class clazz = object.getClass(); + List tmp = Arrays.asList(clazz.getDeclaredFields()); + ArrayList list = new ArrayList<>(tmp); + while (clazz != Object.class) { + clazz = clazz.getSuperclass(); + if (clazz == null) { + break; + } + Field[] fields = clazz.getDeclaredFields(); + for (Field field : fields) { + int modifier = field.getModifiers(); + if (Modifier.isPublic(modifier)) { + list.add(field); + } + } + } + Field[] a = new Field[list.size()]; + Field[] fields = list.toArray(a); + JSONObject jsonObject = new JSONObject(); + try { + jsonObject.put("object", object.toString()); + for (Field field : fields) { + String fieldName = field.getName(); + Object obj = field.get(object); + jsonObject.put(fieldName, obj); + } + } catch (Exception ignore) { + } + return jsonObject.toString(); + } + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) private static void clipData2String(ClipData clipData, StringBuilder sb) { ClipData.Item item = clipData.getItemAt(0); diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/NetworkUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/NetworkUtils.java index 579a0846956c35441efc50284b32c518041a18cf..fb26b2f6049fb4ac016c7b310e37918423a91558 100644 --- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/NetworkUtils.java +++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/NetworkUtils.java @@ -408,7 +408,7 @@ public final class NetworkUtils { NetworkInterface ni = nis.nextElement(); if (!ni.isUp() || ni.isLoopback()) continue; List ias = ni.getInterfaceAddresses(); - for (int i = 0; i < ias.size(); i++) { + for (int i = 0, size = ias.size(); i < size; i++) { InterfaceAddress ia = ias.get(i); InetAddress broadcast = ia.getBroadcast(); if (broadcast != null) {