Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
门心叼龙
android-mvp-mvvm-flytour
提交
efc3708a
A
android-mvp-mvvm-flytour
项目概览
门心叼龙
/
android-mvp-mvvm-flytour
通知
7
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
6
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
android-mvp-mvvm-flytour
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
6
Issue
6
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
efc3708a
编写于
4月 07, 2019
作者:
门心叼龙
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
utils update
上级
4d19c9df
变更
27
隐藏空白更改
内联
并排
Showing
27 changed file
with
1080 addition
and
46 deletion
+1080
-46
lib_common/src/main/java/com/fly/tour/common/util/AnimationUtils.java
...rc/main/java/com/fly/tour/common/util/AnimationUtils.java
+32
-0
lib_common/src/main/java/com/fly/tour/common/util/AppBarStateChangeListener.java
...a/com/fly/tour/common/util/AppBarStateChangeListener.java
+43
-0
lib_common/src/main/java/com/fly/tour/common/util/BitmapUtil.java
...on/src/main/java/com/fly/tour/common/util/BitmapUtil.java
+12
-1
lib_common/src/main/java/com/fly/tour/common/util/BotNavViewHelper.java
.../main/java/com/fly/tour/common/util/BotNavViewHelper.java
+38
-0
lib_common/src/main/java/com/fly/tour/common/util/CrashHandler.java
.../src/main/java/com/fly/tour/common/util/CrashHandler.java
+1
-1
lib_common/src/main/java/com/fly/tour/common/util/DateUtil.java
...mmon/src/main/java/com/fly/tour/common/util/DateUtil.java
+38
-3
lib_common/src/main/java/com/fly/tour/common/util/DisplayUtil.java
...n/src/main/java/com/fly/tour/common/util/DisplayUtil.java
+2
-2
lib_common/src/main/java/com/fly/tour/common/util/EnvironmentUtil.java
...c/main/java/com/fly/tour/common/util/EnvironmentUtil.java
+1
-1
lib_common/src/main/java/com/fly/tour/common/util/FileUtil.java
...mmon/src/main/java/com/fly/tour/common/util/FileUtil.java
+1
-1
lib_common/src/main/java/com/fly/tour/common/util/InfoVerify.java
...on/src/main/java/com/fly/tour/common/util/InfoVerify.java
+1
-1
lib_common/src/main/java/com/fly/tour/common/util/MultiMediaUtil.java
...rc/main/java/com/fly/tour/common/util/MultiMediaUtil.java
+46
-24
lib_common/src/main/java/com/fly/tour/common/util/MyAppGlideModule.java
.../main/java/com/fly/tour/common/util/MyAppGlideModule.java
+15
-0
lib_common/src/main/java/com/fly/tour/common/util/NetUtil.java
...ommon/src/main/java/com/fly/tour/common/util/NetUtil.java
+5
-5
lib_common/src/main/java/com/fly/tour/common/util/NumberUtils.java
...n/src/main/java/com/fly/tour/common/util/NumberUtils.java
+1
-1
lib_common/src/main/java/com/fly/tour/common/util/PermissionCheckUtil.java
...in/java/com/fly/tour/common/util/PermissionCheckUtil.java
+30
-0
lib_common/src/main/java/com/fly/tour/common/util/ResIdUtil.java
...mon/src/main/java/com/fly/tour/common/util/ResIdUtil.java
+1
-1
lib_common/src/main/java/com/fly/tour/common/util/ScreenUtils.java
...n/src/main/java/com/fly/tour/common/util/ScreenUtils.java
+1
-1
lib_common/src/main/java/com/fly/tour/common/util/SdkVersionUtil.java
...rc/main/java/com/fly/tour/common/util/SdkVersionUtil.java
+1
-1
lib_common/src/main/java/com/fly/tour/common/util/SoftInputUtil.java
...src/main/java/com/fly/tour/common/util/SoftInputUtil.java
+1
-1
lib_common/src/main/java/com/fly/tour/common/util/ToastUtil.java
...mon/src/main/java/com/fly/tour/common/util/ToastUtil.java
+2
-2
lib_common/src/main/java/com/fly/tour/common/util/TrackMoveUtil.java
...src/main/java/com/fly/tour/common/util/TrackMoveUtil.java
+236
-0
lib_common/src/main/java/com/fly/tour/common/util/log/KLog.java
...mmon/src/main/java/com/fly/tour/common/util/log/KLog.java
+328
-0
lib_common/src/main/java/com/fly/tour/common/util/log/KLogUtil.java
.../src/main/java/com/fly/tour/common/util/log/KLogUtil.java
+23
-0
lib_common/src/main/java/com/fly/tour/common/util/log/klog/BaseLog.java
.../main/java/com/fly/tour/common/util/log/klog/BaseLog.java
+55
-0
lib_common/src/main/java/com/fly/tour/common/util/log/klog/FileLog.java
.../main/java/com/fly/tour/common/util/log/klog/FileLog.java
+66
-0
lib_common/src/main/java/com/fly/tour/common/util/log/klog/JsonLog.java
.../main/java/com/fly/tour/common/util/log/klog/JsonLog.java
+43
-0
lib_common/src/main/java/com/fly/tour/common/util/log/klog/XmlLog.java
...c/main/java/com/fly/tour/common/util/log/klog/XmlLog.java
+57
-0
未找到文件。
lib_common/src/main/java/com/fly/tour/common/util/AnimationUtils.java
0 → 100644
浏览文件 @
efc3708a
package
com.zjx.vcars.common.util
;
import
android.view.animation.Animation
;
import
android.view.animation.TranslateAnimation
;
/**
* @Description
* @Author guojingbu
* @Date 2019/3/12
*/
public
class
AnimationUtils
{
/**
* 从控件所在位置移动到控件的底部
*
* @return
*/
public
static
TranslateAnimation
moveToBottom
()
{
TranslateAnimation
hiddenAction
=
new
TranslateAnimation
(
Animation
.
RELATIVE_TO_SELF
,
0.0f
,
Animation
.
RELATIVE_TO_SELF
,
0.0f
,
Animation
.
RELATIVE_TO_SELF
,
0.0f
,
Animation
.
RELATIVE_TO_SELF
,
1.0f
);
hiddenAction
.
setDuration
(
300
);
return
hiddenAction
;
}
public
static
TranslateAnimation
moveToLocation
()
{
TranslateAnimation
visibleAction
=
new
TranslateAnimation
(
Animation
.
RELATIVE_TO_SELF
,
0.0f
,
Animation
.
RELATIVE_TO_SELF
,
0.0f
,
Animation
.
RELATIVE_TO_SELF
,
1.0f
,
Animation
.
RELATIVE_TO_SELF
,
0.0f
);
visibleAction
.
setDuration
(
300
);
return
visibleAction
;
}
}
lib_common/src/main/java/com/fly/tour/common/util/AppBarStateChangeListener.java
0 → 100644
浏览文件 @
efc3708a
package
com.zjx.vcars.common.util
;
import
android.support.design.widget.AppBarLayout
;
/**
* Description: <AppBarStateChangeListener><br>
* Author: gxl<br>
* Date: 2019/1/21<br>
* Version: V1.0.0<br>
* Update: <br>
*/
public
abstract
class
AppBarStateChangeListener
implements
AppBarLayout
.
OnOffsetChangedListener
{
public
enum
State
{
EXPANDED
,
COLLAPSED
,
IDLE
}
private
State
mCurrentState
=
State
.
IDLE
;
@Override
public
final
void
onOffsetChanged
(
AppBarLayout
appBarLayout
,
int
i
)
{
if
(
i
==
0
)
{
if
(
mCurrentState
!=
State
.
EXPANDED
)
{
onStateChanged
(
appBarLayout
,
State
.
EXPANDED
);
}
mCurrentState
=
State
.
EXPANDED
;
}
else
if
(
Math
.
abs
(
i
)
>=
appBarLayout
.
getTotalScrollRange
())
{
if
(
mCurrentState
!=
State
.
COLLAPSED
)
{
onStateChanged
(
appBarLayout
,
State
.
COLLAPSED
);
}
mCurrentState
=
State
.
COLLAPSED
;
}
else
{
if
(
mCurrentState
!=
State
.
IDLE
)
{
onStateChanged
(
appBarLayout
,
State
.
IDLE
);
}
mCurrentState
=
State
.
IDLE
;
}
}
public
abstract
void
onStateChanged
(
AppBarLayout
appBarLayout
,
State
state
);
}
\ No newline at end of file
lib_common/src/main/java/com/fly/tour/common/util/BitmapUtil.java
浏览文件 @
efc3708a
package
com.
fly.tour
.common.util
;
package
com.
zjx.vcars
.common.util
;
import
android.content.Context
;
import
android.graphics.Bitmap
;
...
...
@@ -9,6 +9,7 @@ import android.graphics.Matrix;
import
android.graphics.Paint
;
import
android.media.ExifInterface
;
import
android.net.Uri
;
import
android.os.Build
;
import
android.util.Log
;
import
android.view.View
;
import
android.view.View.MeasureSpec
;
...
...
@@ -464,4 +465,14 @@ public class BitmapUtil {
}
return
new
int
[]{
coverWidth
,
coverHeight
};
}
public
static
int
getBitmapSize
(
Bitmap
bitmap
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
KITKAT
)
{
//API 19
return
bitmap
.
getAllocationByteCount
();
}
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
HONEYCOMB_MR1
)
{
//API 12
return
bitmap
.
getByteCount
();
}
// 在低版本中用一行的字节x高度
return
bitmap
.
getRowBytes
()
*
bitmap
.
getHeight
();
//earlier version
}
}
lib_common/src/main/java/com/fly/tour/common/util/BotNavViewHelper.java
0 → 100644
浏览文件 @
efc3708a
package
com.zjx.vcars.common.util
;
import
android.annotation.SuppressLint
;
import
android.support.design.internal.BottomNavigationItemView
;
import
android.support.design.internal.BottomNavigationMenuView
;
import
android.support.design.widget.BottomNavigationView
;
import
java.lang.reflect.Field
;
/**
* Description: <解决使用的时候item数大于3个时会有位移><br>
* Author: gxl<br>
* Date: 2018/4/12<br>
* Version: V1.0.0<br>
* Update: <br>
*/
public
class
BotNavViewHelper
{
@SuppressLint
(
"RestrictedApi"
)
public
static
void
disableShiftMode
(
BottomNavigationView
view
)
{
BottomNavigationMenuView
menuView
=
(
BottomNavigationMenuView
)
view
.
getChildAt
(
0
);
try
{
Field
shiftingMode
=
menuView
.
getClass
().
getDeclaredField
(
"mShiftingMode"
);
shiftingMode
.
setAccessible
(
true
);
shiftingMode
.
setBoolean
(
menuView
,
false
);
shiftingMode
.
setAccessible
(
false
);
for
(
int
i
=
0
;
i
<
menuView
.
getChildCount
();
i
++)
{
BottomNavigationItemView
item
=
(
BottomNavigationItemView
)
menuView
.
getChildAt
(
i
);
//noinspection RestrictedApi
item
.
setShifting
(
false
);
//item.setShiftingMode(false);
// set once again checked value, so view will be updated
//noinspection RestrictedApi
item
.
setChecked
(
item
.
getItemData
().
isChecked
());
}
}
catch
(
NoSuchFieldException
e
)
{
}
catch
(
IllegalAccessException
e
)
{
}
}
}
lib_common/src/main/java/com/fly/tour/common/util/CrashHandler.java
浏览文件 @
efc3708a
package
com.
fly.tour
.common.util
;
package
com.
zjx.vcars
.common.util
;
import
android.content.ComponentName
;
import
android.content.Context
;
...
...
lib_common/src/main/java/com/fly/tour/common/util/DateUtil.java
浏览文件 @
efc3708a
package
com.
fly.tour
.common.util
;
package
com.
zjx.vcars
.common.util
;
import
android.text.TextUtils
;
...
...
@@ -18,7 +18,7 @@ import java.util.Date;
public
class
DateUtil
{
public
enum
FormatType
{
yyyy
,
yyyyMM
,
yyyyMMdd
,
yyyyMMddHHmm
,
yyyyMMddHHmmss
,
MMdd
,
HHmm
yyyy
,
yyyyMM
,
yyyyMMdd
,
yyyyMMddHHmm
,
yyyyMMddHHmmss
,
MMdd
,
HHmm
,
MM
,
dd
;
}
/**
* 格式化时间字符串
...
...
@@ -36,7 +36,13 @@ public class DateUtil {
Date
date
=
parseTime
(
time
);
return
formatDate
(
date
,
type
);
}
public
static
String
formatDate
(
String
time
,
FormatType
fromtype
,
FormatType
totype
)
{
if
(
TextUtils
.
isEmpty
(
time
))
{
return
""
;
}
Date
date
=
parseTime
(
time
,
fromtype
);
return
formatDate
(
date
,
totype
);
}
public
static
String
formatDate
(
Date
time
,
FormatType
type
)
{
if
(
time
==
null
)
{
return
""
;
...
...
@@ -69,6 +75,12 @@ public class DateUtil {
case
HHmm:
sdf
=
new
SimpleDateFormat
(
"HH:mm"
);
break
;
case
MM:
sdf
=
new
SimpleDateFormat
(
"MM"
);
break
;
case
dd:
sdf
=
new
SimpleDateFormat
(
"dd"
);
break
;
default
:
sdf
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
break
;
...
...
@@ -296,4 +308,27 @@ public class DateUtil {
public
static
String
getLaterTimeByDay
(
int
day
)
{
return
getLaterTimeByHour
(
day
*
24
);
}
/**
* 获取给定时间以后几天的时间戳
* @param date
* @param day
* @return
*/
public
static
String
getLaterTimeByDay
(
String
date
,
int
day
){
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
setTime
(
parseTime
(
date
,
FormatType
.
yyyyMMdd
));
calendar
.
set
(
Calendar
.
HOUR
,
calendar
.
get
(
Calendar
.
HOUR
)
+
day
*
24
);
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
return
sdf
.
format
(
calendar
.
getTime
());
}
/**
* 获取当前时间的位置:一天24小时以半小时为单位划分为48个单元格
* @return
*/
public
static
int
getCurrTimePosition
()
{
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
setTime
(
new
Date
());
return
(
int
)
Math
.
ceil
((
double
)(
calendar
.
get
(
Calendar
.
HOUR_OF_DAY
)
*
60
+
calendar
.
get
(
Calendar
.
MINUTE
))
/
30
);
}
}
\ No newline at end of file
lib_common/src/main/java/com/fly/tour/common/util/DisplayUtil.java
浏览文件 @
efc3708a
package
com.
fly.tour
.common.util
;
package
com.
zjx.vcars
.common.util
;
import
android.content.Context
;
import
com.
fly.tour
.common.BaseApplication
;
import
com.
zjx.vcars
.common.BaseApplication
;
/**
* Description: <单位转换工具类><br>
...
...
lib_common/src/main/java/com/fly/tour/common/util/EnvironmentUtil.java
浏览文件 @
efc3708a
package
com.
fly.tour
.common.util
;
package
com.
zjx.vcars
.common.util
;
import
android.app.ActivityManager
;
import
android.content.ComponentName
;
...
...
lib_common/src/main/java/com/fly/tour/common/util/FileUtil.java
浏览文件 @
efc3708a
package
com.
fly.tour
.common.util
;
package
com.
zjx.vcars
.common.util
;
import
android.text.TextUtils
;
...
...
lib_common/src/main/java/com/fly/tour/common/util/InfoVerify.java
浏览文件 @
efc3708a
package
com.
fly.tour
.common.util
;
package
com.
zjx.vcars
.common.util
;
import
android.text.TextUtils
;
...
...
lib_common/src/main/java/com/fly/tour/common/util/MultiMediaUtil.java
浏览文件 @
efc3708a
package
com.
fly.tour
.common.util
;
package
com.
zjx.vcars
.common.util
;
import
android.Manifest
;
import
android.app.Activity
;
...
...
@@ -8,8 +8,10 @@ import android.os.Environment;
import
android.provider.MediaStore
;
import
android.support.v4.app.Fragment
;
import
android.support.v4.app.FragmentActivity
;
import
android.support.v4.content.FileProvider
;
import
com.tbruyelle.rxpermissions2.RxPermissions
;
import
com.zjx.vcars.common.util.ToastUtil
;
import
java.io.File
;
import
java.text.SimpleDateFormat
;
...
...
@@ -20,17 +22,17 @@ import me.nereo.multi_image_selector.MultiImageSelector;
/**
* Description: <h3>多媒体工具类</h3>
*
<ul>
*
<li>1.图片选择器,可算多张图片</li>
*
<li>2.拍照</li>
*
<li>3.拍视频</li>
*
<li>4.创建一个图片路径</li>
*
<li>5.创建一个视频路径</li>
*
</ul>
*
<h3>注意事项:</h3>
*
<ul><li>1. 拍照、拍视频、选择图片完成的回调都在onActivityResult中回调的</l1>
*
<li>2.选择图片获取:List<String> path = data.getStringArrayListExtra(MultiImageSelectorActivity.EXTRA_RESULT)</li>
*
</ul>
* <ul>
* <li>1.图片选择器,可算多张图片</li>
* <li>2.拍照</li>
* <li>3.拍视频</li>
* <li>4.创建一个图片路径</li>
* <li>5.创建一个视频路径</li>
* </ul>
* <h3>注意事项:</h3>
* <ul><li>1. 拍照、拍视频、选择图片完成的回调都在onActivityResult中回调的</l1>
* <li>2.选择图片获取:List<String> path = data.getStringArrayListExtra(MultiImageSelectorActivity.EXTRA_RESULT)</li>
* </ul>
* Author: gxl<br>
* Date: 2018/12/25<br>
* Version: V1.0.0<br>
...
...
@@ -42,14 +44,14 @@ public class MultiMediaUtil {
public
static
final
int
TAKE_VIDEO
=
1003
;
/**
*
* 打开图片选择器,选择图片<br>
* 来获取图片
*
* @param activity
* @param count:选择图片个数
* @param requestcode
*/
public
static
void
pohotoSelect
(
Activity
activity
,
int
count
,
int
requestcode
)
{
public
static
void
pohotoSelect
(
Fragment
Activity
activity
,
int
count
,
int
requestcode
)
{
pohotoSelect
(
activity
,
null
,
count
,
requestcode
);
}
...
...
@@ -57,21 +59,38 @@ public class MultiMediaUtil {
pohotoSelect
(
null
,
fragment
,
count
,
requestcode
);
}
private
static
void
pohotoSelect
(
Activity
activity
,
Fragment
fragment
,
int
count
,
int
requestcode
)
{
private
static
void
pohotoSelect
(
final
FragmentActivity
activity
,
final
Fragment
fragment
,
final
int
count
,
final
int
requestcode
)
{
RxPermissions
rxPermissions
=
null
;
if
(
activity
!=
null
)
{
MultiImageSelector
.
create
().
showCamera
(
false
).
count
(
count
).
single
().
multi
()
//.origin(ArrayList<String>)
.
start
(
activity
,
requestcode
);
rxPermissions
=
new
RxPermissions
(
activity
);
}
else
if
(
fragment
!=
null
)
{
MultiImageSelector
.
create
().
showCamera
(
false
).
count
(
count
).
single
().
multi
()
//.origin(ArrayList<String>)
.
start
(
fragment
,
requestcode
);
rxPermissions
=
new
RxPermissions
(
fragment
);
}
rxPermissions
.
request
(
Manifest
.
permission
.
WRITE_EXTERNAL_STORAGE
,
Manifest
.
permission
.
READ_EXTERNAL_STORAGE
).
subscribe
(
new
Consumer
<
Boolean
>()
{
@Override
public
void
accept
(
Boolean
aBoolean
)
throws
Exception
{
if
(
aBoolean
)
{
if
(
activity
!=
null
)
{
MultiImageSelector
.
create
().
showCamera
(
false
).
count
(
count
).
single
().
multi
()
//.origin(ArrayList<String>)
.
start
(
activity
,
requestcode
);
}
else
if
(
fragment
!=
null
)
{
MultiImageSelector
.
create
().
showCamera
(
false
).
count
(
count
).
single
().
multi
()
//.origin(ArrayList<String>)
.
start
(
fragment
,
requestcode
);
}
}
else
{
ToastUtil
.
showToast
(
"无读写外部存储设备权限"
);
}
}
});
}
/**
* 拍照
*
* @param activity
* @param path:照片存放的路径
* @param requestcode
...
...
@@ -105,11 +124,11 @@ public class MultiMediaUtil {
Intent
intent
=
new
Intent
();
intent
.
setAction
(
MediaStore
.
ACTION_IMAGE_CAPTURE
);
intent
.
addCategory
(
Intent
.
CATEGORY_DEFAULT
);
intent
.
putExtra
(
MediaStore
.
EXTRA_OUTPUT
,
Uri
.
fromFile
(
file
));
if
(
activity
!=
null
)
{
intent
.
putExtra
(
MediaStore
.
EXTRA_OUTPUT
,
FileProvider
.
getUriForFile
(
activity
,
"com.zjx.vcars.fileprovider"
,
file
));
activity
.
startActivityForResult
(
intent
,
requestcode
);
}
else
if
(
fragment
!=
null
)
{
intent
.
putExtra
(
MediaStore
.
EXTRA_OUTPUT
,
FileProvider
.
getUriForFile
(
fragment
.
getContext
(),
"com.zjx.vcars.fileprovider"
,
file
));
fragment
.
startActivityForResult
(
intent
,
requestcode
);
}
}
...
...
@@ -127,6 +146,7 @@ public class MultiMediaUtil {
/**
* 拍视频
*
* @param activity
* @param path:视频存放的路径
* @param requestcode
...
...
@@ -159,10 +179,12 @@ public class MultiMediaUtil {
Intent
intent
=
new
Intent
();
intent
.
setAction
(
MediaStore
.
ACTION_VIDEO_CAPTURE
);
intent
.
addCategory
(
Intent
.
CATEGORY_DEFAULT
);
intent
.
putExtra
(
MediaStore
.
EXTRA_OUTPUT
,
Uri
.
fromFile
(
file
));
//
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
if
(
activity
!=
null
)
{
intent
.
putExtra
(
MediaStore
.
EXTRA_OUTPUT
,
FileProvider
.
getUriForFile
(
activity
,
"com.zjx.vcars.fileprovider"
,
file
));
activity
.
startActivityForResult
(
intent
,
requestcode
);
}
else
if
(
fragment
!=
null
)
{
intent
.
putExtra
(
MediaStore
.
EXTRA_OUTPUT
,
FileProvider
.
getUriForFile
(
fragment
.
getContext
(),
"com.zjx.vcars.fileprovider"
,
file
));
fragment
.
startActivityForResult
(
intent
,
requestcode
);
}
...
...
lib_common/src/main/java/com/fly/tour/common/util/MyAppGlideModule.java
0 → 100644
浏览文件 @
efc3708a
package
com.zjx.vcars.common.util
;
import
com.bumptech.glide.annotation.GlideModule
;
import
com.bumptech.glide.module.AppGlideModule
;
/**
* Description: <><br>
* Author: gxl<br>
* Date: 2019/1/2<br>
* Version: V1.0.0<br>
* Update: <br>
*/
@GlideModule
public
class
MyAppGlideModule
extends
AppGlideModule
{
}
lib_common/src/main/java/com/fly/tour/common/util/NetUtil.java
浏览文件 @
efc3708a
package
com.
fly.tour
.common.util
;
package
com.
zjx.vcars
.common.util
;
import
android.content.Context
;
import
android.net.ConnectivityManager
;
import
android.net.NetworkInfo
;
import
android.support.annotation.NonNull
;
import
com.zjx.vcars.common.BaseApplication
;
import
com.fly.tour.common.BaseApplication
;
import
static
com
.
zjx
.
vcars
.
common
.
util
.
NetUtil
.
NetType
.
NET_4G
;
import
static
com
.
zjx
.
vcars
.
common
.
util
.
NetUtil
.
NetType
.
NO_NET
;
import
static
com
.
zjx
.
vcars
.
common
.
util
.
NetUtil
.
NetType
.
WIFI
;
import
static
com
.
fly
.
tour
.
common
.
util
.
NetUtil
.
NetType
.
NET_4G
;
import
static
com
.
fly
.
tour
.
common
.
util
.
NetUtil
.
NetType
.
NO_NET
;
import
static
com
.
fly
.
tour
.
common
.
util
.
NetUtil
.
NetType
.
WIFI
;
/**
* Description: <ToastUtil><br>
...
...
lib_common/src/main/java/com/fly/tour/common/util/NumberUtils.java
浏览文件 @
efc3708a
package
com.
fly.tour
.common.util
;
package
com.
zjx.vcars
.common.util
;
import
java.math.BigDecimal
;
...
...
lib_common/src/main/java/com/fly/tour/common/util/PermissionCheckUtil.java
0 → 100644
浏览文件 @
efc3708a
package
com.zjx.vcars.common.util
;
import
android.Manifest
;
import
android.app.Activity
;
import
android.support.v4.app.FragmentActivity
;
import
android.support.v7.app.AppCompatActivity
;
import
com.tbruyelle.rxpermissions2.RxPermissions
;
import
io.reactivex.functions.Consumer
;
/**
* Description: <PermissionCheckUtil><br>
* Author: gxl<br>
* Date: 2019/3/29<br>
* Version: V1.0.0<br>
* Update: <br>
*/
public
class
PermissionCheckUtil
{
public
static
void
check
(
FragmentActivity
activity
){
new
RxPermissions
(
activity
).
request
(
Manifest
.
permission
.
ACCESS_FINE_LOCATION
,
Manifest
.
permission
.
READ_EXTERNAL_STORAGE
,
Manifest
.
permission
.
WRITE_EXTERNAL_STORAGE
).
subscribe
(
new
Consumer
<
Boolean
>()
{
@Override
public
void
accept
(
Boolean
aBoolean
)
throws
Exception
{
if
(!
aBoolean
)
{
ToastUtil
.
showToast
(
"缺少定位权限、存储权限,这会导致地图、导航、拍照等部分功能无法使用"
);
}
}
});
}
}
lib_common/src/main/java/com/fly/tour/common/util/ResIdUtil.java
浏览文件 @
efc3708a
package
com.
fly.tour
.common.util
;
package
com.
zjx.vcars
.common.util
;
/**
* Description: <动态获取资源id><br>
...
...
lib_common/src/main/java/com/fly/tour/common/util/ScreenUtils.java
浏览文件 @
efc3708a
package
com.
fly.tour
.common.util
;
package
com.
zjx.vcars
.common.util
;
import
android.app.Activity
;
import
android.content.Context
;
...
...
lib_common/src/main/java/com/fly/tour/common/util/SdkVersionUtil.java
浏览文件 @
efc3708a
package
com.
fly.tour
.common.util
;
package
com.
zjx.vcars
.common.util
;
import
android.content.Context
;
import
android.content.pm.PackageManager
;
...
...
lib_common/src/main/java/com/fly/tour/common/util/SoftInputUtil.java
浏览文件 @
efc3708a
package
com.
fly.tour
.common.util
;
package
com.
zjx.vcars
.common.util
;
import
android.content.Context
;
import
android.view.View
;
...
...
lib_common/src/main/java/com/fly/tour/common/util/ToastUtil.java
浏览文件 @
efc3708a
package
com.
fly.tour
.common.util
;
package
com.
zjx.vcars
.common.util
;
import
android.widget.Toast
;
import
com.
fly.tour
.common.BaseApplication
;
import
com.
zjx.vcars
.common.BaseApplication
;
/**
* Description: <吐司工具类><br>
...
...
lib_common/src/main/java/com/fly/tour/common/util/TrackMoveUtil.java
0 → 100644
浏览文件 @
efc3708a
package
com.zjx.vcars.common.util
;
import
android.text.TextUtils
;
import
com.amap.api.maps.AMapUtils
;
import
com.amap.api.maps.model.LatLng
;
import
com.amap.api.trace.TraceLocation
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* <h1>轨迹平滑所需要的工具方法</h1> Date: 2016-10-27 Created by gxl
*/
public
class
TrackMoveUtil
{
private
static
double
DISTANCE
=
0.0001
;
/**
* 根据两点算斜率
*/
public
static
double
getSlope
(
LatLng
fromPoint
,
LatLng
toPoint
)
{
if
(
fromPoint
==
null
||
toPoint
==
null
)
{
return
0
;
}
if
(
toPoint
.
longitude
==
fromPoint
.
longitude
)
{
return
Double
.
MAX_VALUE
;
}
double
slope
=
((
toPoint
.
latitude
-
fromPoint
.
latitude
)
/
(
toPoint
.
longitude
-
fromPoint
.
longitude
));
return
slope
;
}
/**
* 根据两点算取图标转的角度
*/
public
static
double
getAngle
(
LatLng
fromPoint
,
LatLng
toPoint
)
{
if
(
fromPoint
==
null
||
toPoint
==
null
)
{
return
0
;
}
double
slope
=
getSlope
(
fromPoint
,
toPoint
);
if
(
slope
==
Double
.
MAX_VALUE
)
{
if
(
toPoint
.
latitude
>
fromPoint
.
latitude
)
{
return
0
;
}
else
{
return
180
;
}
}
float
deltAngle
=
0
;
if
((
toPoint
.
latitude
-
fromPoint
.
latitude
)
*
slope
<
0
)
{
deltAngle
=
180
;
}
double
radio
=
Math
.
atan
(
slope
);
double
angle
=
180
*
(
radio
/
Math
.
PI
)
+
deltAngle
-
90
;
return
angle
;
}
/**
* 根据点和斜率算取截距
*/
public
static
double
getInterception
(
double
slope
,
LatLng
point
)
{
if
(
point
==
null
)
{
return
0
;
}
return
point
.
latitude
-
slope
*
point
.
longitude
;
}
/**
* 计算x方向每次移动的距离
*/
public
static
double
getXMoveDistance
(
double
slope
)
{
if
(
slope
==
Double
.
MAX_VALUE
)
{
return
DISTANCE
;
}
return
Math
.
abs
((
DISTANCE
*
slope
)
/
Math
.
sqrt
(
1
+
slope
*
slope
));
}
/**
* 根据轨迹线段计算小车走了多少步
*
* @param latLngList
* @return
*/
public
static
int
getStep
(
List
<
LatLng
>
latLngList
)
{
int
step
=
0
;
if
(
latLngList
!=
null
&&
latLngList
.
size
()
>
1
)
{
for
(
int
i
=
0
;
i
<
latLngList
.
size
()
-
1
;
i
++)
{
try
{
LatLng
startPoint
=
latLngList
.
get
(
i
);
LatLng
endPoint
=
latLngList
.
get
(
i
+
1
);
double
slope
=
getSlope
(
startPoint
,
endPoint
);
// 是不是正向的标示(向上设为正向)
boolean
isReverse
=
(
startPoint
.
latitude
>
endPoint
.
latitude
);
double
xMoveDistance
=
isReverse
?
getXMoveDistance
(
slope
)
:
-
1
*
getXMoveDistance
(
slope
);
// 应该对经纬度同时处理
for
(
double
j
=
startPoint
.
latitude
;
!((
j
>=
endPoint
.
latitude
)
^
isReverse
);
j
=
j
-
xMoveDistance
)
{
step
++;
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
}
return
step
;
}
/**
* 根据总距离和步数计算运动时间
*
* @param distance
* @param step
* @return
*/
public
static
double
getMoveTime
(
float
distance
,
int
step
)
{
double
timeInterval
=
0
;
if
(
distance
>
0
)
{
float
totalDistance
=
distance
*
1000
;
if
(
totalDistance
<=
500
)
{
timeInterval
=
1000.0
/
step
;
}
else
if
(
totalDistance
>
500
&&
totalDistance
<=
7500
)
{
timeInterval
=
2.0
*
totalDistance
/
step
;
}
else
{
timeInterval
=
15000.0
/
step
;
}
}
return
timeInterval
;
}
/**
* 根据轨迹点集合计算总距离
*
* @param latLngList
* @return
*/
public
static
float
getDistance
(
List
<
LatLng
>
latLngList
)
{
float
distance
=
0
;
if
(
latLngList
!=
null
&&
latLngList
.
size
()
>
1
)
{
for
(
int
i
=
0
;
i
<
latLngList
.
size
()
-
1
;
i
++)
{
try
{
distance
+=
AMapUtils
.
calculateLineDistance
(
latLngList
.
get
(
i
),
latLngList
.
get
(
i
+
1
));
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
}
return
distance
;
}
// latitude - 地点的纬度,在-90 与90 之间的double 型数值。
// longitude - 地点的经度,在-180 与180 之间的double 型数值。
/**
* 根据一个经纬度字符串求一个经纬度集合a|b|c|d;
*
* @param latlonStr
* @return
*/
public
static
List
<
LatLng
>
getListLatLng
(
String
latlonStr
)
{
if
(!
TextUtils
.
isEmpty
(
latlonStr
))
{
String
[]
trackArr
=
latlonStr
.
split
(
"\\|"
);
if
(
trackArr
!=
null
&&
trackArr
.
length
>
0
)
{
List
<
LatLng
>
latLngList
=
new
ArrayList
<
LatLng
>();
for
(
int
i
=
0
;
i
<
trackArr
.
length
-
1
;
i
=
i
+
2
)
{
try
{
String
lat
=
trackArr
[
i
+
1
];
String
lng
=
trackArr
[
i
];
// Logger.v(TAG,"trackArr index:" + i);
// Logger.v(TAG,"trackArr lat:" + lat);
// Logger.v(TAG,"trackArr lng:" + lng);
if
(!
TextUtils
.
isEmpty
(
lat
)
&&
!
TextUtils
.
isEmpty
(
lng
))
{
Double
dLat
=
Double
.
valueOf
(
lat
);
Double
dLng
=
Double
.
valueOf
(
lng
);
if
(
dLat
>=
-
90
&&
dLat
<=
90
&&
dLng
>=
-
180
&&
dLng
<=
180
&&
!(
dLat
==
0
&&
dLng
==
0
))
{
LatLng
latLng
=
new
LatLng
(
dLat
,
dLng
);
latLngList
.
add
(
latLng
);
}
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
return
latLngList
;
}
}
return
null
;
}
public
static
List
<
TraceLocation
>
getListTraceLocation
(
String
latlonStr
)
{
if
(!
TextUtils
.
isEmpty
(
latlonStr
))
{
String
[]
trackArr
=
latlonStr
.
split
(
"\\|"
);
if
(
trackArr
!=
null
&&
trackArr
.
length
>
0
)
{
List
<
TraceLocation
>
latLngList
=
new
ArrayList
<
TraceLocation
>();
for
(
int
i
=
0
;
i
<
trackArr
.
length
-
1
;
i
=
i
+
2
)
{
try
{
String
lat
=
trackArr
[
i
+
1
];
String
lng
=
trackArr
[
i
];
// Logger.v(TAG,"trackArr index:" + i);
// Logger.v(TAG,"trackArr lat:" + lat);
// Logger.v(TAG,"trackArr lng:" + lng);
if
(!
TextUtils
.
isEmpty
(
lat
)
&&
!
TextUtils
.
isEmpty
(
lng
))
{
Double
dLat
=
Double
.
valueOf
(
lat
);
Double
dLng
=
Double
.
valueOf
(
lng
);
if
(
dLat
>=
-
90
&&
dLat
<=
90
&&
dLng
>=
-
180
&&
dLng
<=
180
)
{
TraceLocation
latLng
=
new
TraceLocation
();
latLng
.
setLatitude
(
dLat
);
latLng
.
setLongitude
(
dLng
);
latLngList
.
add
(
latLng
);
}
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
return
latLngList
;
}
}
return
null
;
}
public
static
List
<
TraceLocation
>
getListTraceLocation
(
List
<
LatLng
>
latlngList
)
{
if
(
latlngList
!=
null
&&
latlngList
.
size
()
>
0
)
{
List
<
TraceLocation
>
traceLocationList
=
new
ArrayList
<
TraceLocation
>();
for
(
int
i
=
0
;
i
<
latlngList
.
size
();
i
++)
{
LatLng
latLng
=
latlngList
.
get
(
i
);
TraceLocation
traceLocation
=
new
TraceLocation
();
traceLocation
.
setLatitude
(
latLng
.
latitude
);
traceLocation
.
setLongitude
(
latLng
.
longitude
);
traceLocationList
.
add
(
traceLocation
);
}
return
traceLocationList
;
}
return
null
;
}
}
lib_common/src/main/java/com/fly/tour/common/util/log/KLog.java
0 → 100644
浏览文件 @
efc3708a
package
com.zjx.vcars.common.util.log
;
import
android.support.annotation.Nullable
;
import
android.text.TextUtils
;
import
com.zjx.vcars.common.util.log.klog.BaseLog
;
import
com.zjx.vcars.common.util.log.klog.FileLog
;
import
com.zjx.vcars.common.util.log.klog.JsonLog
;
import
com.zjx.vcars.common.util.log.klog.XmlLog
;
import
java.io.File
;
import
java.io.PrintWriter
;
import
java.io.StringWriter
;
/**
* This is a Log tool,with this you can the following
* <ol>
* <li>use KLog.d(),you could print whether the method execute,and the default tag is current class's name</li>
* <li>use KLog.d(msg),you could print log as before,and you could location the method with a click in Android Studio Logcat</li>
* <li>use KLog.json(),you could print json string with well format automatic</li>
* </ol>
*
* @author zhaokaiqiang
* github https://github.com/ZhaoKaiQiang/KLog
* 15/11/17 扩展功能,添加对文件的支持
* 15/11/18 扩展功能,增加对XML的支持,修复BUG
* 15/12/8 扩展功能,添加对任意参数的支持
* 15/12/11 扩展功能,增加对无限长字符串支持
* 16/6/13 扩展功能,添加对自定义全局Tag的支持,修复内部类不能点击跳转的BUG
* 16/6/15 扩展功能,添加不能关闭的KLog.debug(),用于发布版本的Log打印,优化部分代码
* 16/6/20 扩展功能,添加堆栈跟踪功能KLog.trace()
*/
public
final
class
KLog
{
public
static
final
String
LINE_SEPARATOR
=
System
.
getProperty
(
"line.separator"
);
public
static
final
String
NULL_TIPS
=
"Log with null object"
;
private
static
final
String
DEFAULT_MESSAGE
=
"execute"
;
private
static
final
String
PARAM
=
"Param"
;
private
static
final
String
NULL
=
"null"
;
private
static
final
String
TAG_DEFAULT
=
"KLog"
;
private
static
final
String
SUFFIX
=
".java"
;
public
static
final
int
JSON_INDENT
=
4
;
public
static
final
int
V
=
0x1
;
public
static
final
int
D
=
0x2
;
public
static
final
int
I
=
0x3
;
public
static
final
int
W
=
0x4
;
public
static
final
int
E
=
0x5
;
public
static
final
int
A
=
0x6
;
private
static
final
int
JSON
=
0x7
;
private
static
final
int
XML
=
0x8
;
private
static
final
int
STACK_TRACE_INDEX_5
=
5
;
private
static
final
int
STACK_TRACE_INDEX_4
=
4
;
private
static
String
mGlobalTag
;
private
static
boolean
mIsGlobalTagEmpty
=
true
;
private
static
boolean
IS_SHOW_LOG
=
true
;
public
static
void
init
(
boolean
isShowLog
)
{
IS_SHOW_LOG
=
isShowLog
;
}
public
static
void
init
(
boolean
isShowLog
,
@Nullable
String
tag
)
{
IS_SHOW_LOG
=
isShowLog
;
mGlobalTag
=
tag
;
mIsGlobalTagEmpty
=
TextUtils
.
isEmpty
(
mGlobalTag
);
}
public
static
void
v
()
{
printLog
(
V
,
null
,
DEFAULT_MESSAGE
);
}
public
static
void
v
(
Object
msg
)
{
printLog
(
V
,
null
,
msg
);
}
public
static
void
v
(
String
tag
,
Object
...
objects
)
{
printLog
(
V
,
tag
,
objects
);
}
public
static
void
d
()
{
printLog
(
D
,
null
,
DEFAULT_MESSAGE
);
}
public
static
void
d
(
Object
msg
)
{
printLog
(
D
,
null
,
msg
);
}
public
static
void
d
(
String
tag
,
Object
...
objects
)
{
printLog
(
D
,
tag
,
objects
);
}
public
static
void
i
()
{
printLog
(
I
,
null
,
DEFAULT_MESSAGE
);
}
public
static
void
i
(
Object
msg
)
{
printLog
(
I
,
null
,
msg
);
}
public
static
void
i
(
String
tag
,
Object
...
objects
)
{
printLog
(
I
,
tag
,
objects
);
}
public
static
void
w
()
{
printLog
(
W
,
null
,
DEFAULT_MESSAGE
);
}
public
static
void
w
(
Object
msg
)
{
printLog
(
W
,
null
,
msg
);
}
public
static
void
w
(
String
tag
,
Object
...
objects
)
{
printLog
(
W
,
tag
,
objects
);
}
public
static
void
e
()
{
printLog
(
E
,
null
,
DEFAULT_MESSAGE
);
}
public
static
void
e
(
Object
msg
)
{
printLog
(
E
,
null
,
msg
);
}
public
static
void
e
(
String
tag
,
Object
...
objects
)
{
printLog
(
E
,
tag
,
objects
);
}
public
static
void
a
()
{
printLog
(
A
,
null
,
DEFAULT_MESSAGE
);
}
public
static
void
a
(
Object
msg
)
{
printLog
(
A
,
null
,
msg
);
}
public
static
void
a
(
String
tag
,
Object
...
objects
)
{
printLog
(
A
,
tag
,
objects
);
}
public
static
void
json
(
String
jsonFormat
)
{
printLog
(
JSON
,
null
,
jsonFormat
);
}
public
static
void
json
(
String
tag
,
String
jsonFormat
)
{
printLog
(
JSON
,
tag
,
jsonFormat
);
}
public
static
void
xml
(
String
xml
)
{
printLog
(
XML
,
null
,
xml
);
}
public
static
void
xml
(
String
tag
,
String
xml
)
{
printLog
(
XML
,
tag
,
xml
);
}
public
static
void
file
(
File
targetDirectory
,
Object
msg
)
{
printFile
(
null
,
targetDirectory
,
null
,
msg
);
}
public
static
void
file
(
String
tag
,
File
targetDirectory
,
Object
msg
)
{
printFile
(
tag
,
targetDirectory
,
null
,
msg
);
}
public
static
void
file
(
String
tag
,
File
targetDirectory
,
String
fileName
,
Object
msg
)
{
printFile
(
tag
,
targetDirectory
,
fileName
,
msg
);
}
public
static
void
debug
()
{
printDebug
(
null
,
DEFAULT_MESSAGE
);
}
public
static
void
debug
(
Object
msg
)
{
printDebug
(
null
,
msg
);
}
public
static
void
debug
(
String
tag
,
Object
...
objects
)
{
printDebug
(
tag
,
objects
);
}
public
static
void
trace
()
{
printStackTrace
();
}
private
static
void
printStackTrace
()
{
if
(!
IS_SHOW_LOG
)
{
return
;
}
Throwable
tr
=
new
Throwable
();
StringWriter
sw
=
new
StringWriter
();
PrintWriter
pw
=
new
PrintWriter
(
sw
);
tr
.
printStackTrace
(
pw
);
pw
.
flush
();
String
message
=
sw
.
toString
();
String
traceString
[]
=
message
.
split
(
"\\n\\t"
);
StringBuilder
sb
=
new
StringBuilder
();
sb
.
append
(
"\n"
);
for
(
String
trace
:
traceString
)
{
if
(
trace
.
contains
(
"at com.socks.library.KLog"
))
{
continue
;
}
sb
.
append
(
trace
).
append
(
"\n"
);
}
String
[]
contents
=
wrapperContent
(
STACK_TRACE_INDEX_4
,
null
,
sb
.
toString
());
String
tag
=
contents
[
0
];
String
msg
=
contents
[
1
];
String
headString
=
contents
[
2
];
BaseLog
.
printDefault
(
D
,
tag
,
headString
+
msg
);
}
private
static
void
printLog
(
int
type
,
String
tagStr
,
Object
...
objects
)
{
if
(!
IS_SHOW_LOG
)
{
return
;
}
String
[]
contents
=
wrapperContent
(
STACK_TRACE_INDEX_5
,
tagStr
,
objects
);
String
tag
=
contents
[
0
];
String
msg
=
contents
[
1
];
String
headString
=
contents
[
2
];
switch
(
type
)
{
case
V:
case
D:
case
I:
case
W:
case
E:
case
A:
BaseLog
.
printDefault
(
type
,
tag
,
headString
+
msg
);
break
;
case
JSON:
JsonLog
.
printJson
(
tag
,
msg
,
headString
);
break
;
case
XML:
XmlLog
.
printXml
(
tag
,
msg
,
headString
);
break
;
}
}
private
static
void
printDebug
(
String
tagStr
,
Object
...
objects
)
{
String
[]
contents
=
wrapperContent
(
STACK_TRACE_INDEX_5
,
tagStr
,
objects
);
String
tag
=
contents
[
0
];
String
msg
=
contents
[
1
];
String
headString
=
contents
[
2
];
BaseLog
.
printDefault
(
D
,
tag
,
headString
+
msg
);
}
private
static
void
printFile
(
String
tagStr
,
File
targetDirectory
,
String
fileName
,
Object
objectMsg
)
{
if
(!
IS_SHOW_LOG
)
{
return
;
}
String
[]
contents
=
wrapperContent
(
STACK_TRACE_INDEX_5
,
tagStr
,
objectMsg
);
String
tag
=
contents
[
0
];
String
msg
=
contents
[
1
];
String
headString
=
contents
[
2
];
FileLog
.
printFile
(
tag
,
targetDirectory
,
fileName
,
headString
,
msg
);
}
private
static
String
[]
wrapperContent
(
int
stackTraceIndex
,
String
tagStr
,
Object
...
objects
)
{
StackTraceElement
[]
stackTrace
=
Thread
.
currentThread
().
getStackTrace
();
StackTraceElement
targetElement
=
stackTrace
[
stackTraceIndex
];
String
className
=
targetElement
.
getClassName
();
String
[]
classNameInfo
=
className
.
split
(
"\\."
);
if
(
classNameInfo
.
length
>
0
)
{
className
=
classNameInfo
[
classNameInfo
.
length
-
1
]
+
SUFFIX
;
}
if
(
className
.
contains
(
"$"
))
{
className
=
className
.
split
(
"\\$"
)[
0
]
+
SUFFIX
;
}
String
methodName
=
targetElement
.
getMethodName
();
int
lineNumber
=
targetElement
.
getLineNumber
();
if
(
lineNumber
<
0
)
{
lineNumber
=
0
;
}
String
tag
=
(
tagStr
==
null
?
className
:
tagStr
);
if
(
mIsGlobalTagEmpty
&&
TextUtils
.
isEmpty
(
tag
))
{
tag
=
TAG_DEFAULT
;
}
else
if
(!
mIsGlobalTagEmpty
)
{
tag
=
mGlobalTag
;
}
String
msg
=
(
objects
==
null
)
?
NULL_TIPS
:
getObjectsString
(
objects
);
String
headString
=
"[ ("
+
className
+
":"
+
lineNumber
+
")#"
+
methodName
+
" ] "
;
return
new
String
[]{
tag
,
msg
,
headString
};
}
private
static
String
getObjectsString
(
Object
...
objects
)
{
if
(
objects
.
length
>
1
)
{
StringBuilder
stringBuilder
=
new
StringBuilder
();
stringBuilder
.
append
(
"\n"
);
for
(
int
i
=
0
;
i
<
objects
.
length
;
i
++)
{
Object
object
=
objects
[
i
];
if
(
object
==
null
)
{
stringBuilder
.
append
(
PARAM
).
append
(
"["
).
append
(
i
).
append
(
"]"
).
append
(
" = "
).
append
(
NULL
).
append
(
"\n"
);
}
else
{
stringBuilder
.
append
(
PARAM
).
append
(
"["
).
append
(
i
).
append
(
"]"
).
append
(
" = "
).
append
(
object
.
toString
()).
append
(
"\n"
);
}
}
return
stringBuilder
.
toString
();
}
else
{
Object
object
=
objects
[
0
];
return
object
==
null
?
NULL
:
object
.
toString
();
}
}
}
lib_common/src/main/java/com/fly/tour/common/util/log/KLogUtil.java
0 → 100644
浏览文件 @
efc3708a
package
com.zjx.vcars.common.util.log
;
import
android.text.TextUtils
;
import
android.util.Log
;
/**
* Created by zhaokaiqiang on 15/12/11.
*/
public
class
KLogUtil
{
public
static
boolean
isEmpty
(
String
line
)
{
return
TextUtils
.
isEmpty
(
line
)
||
line
.
equals
(
"\n"
)
||
line
.
equals
(
"\t"
)
||
TextUtils
.
isEmpty
(
line
.
trim
());
}
public
static
void
printLine
(
String
tag
,
boolean
isTop
)
{
if
(
isTop
)
{
Log
.
d
(
tag
,
"╔═══════════════════════════════════════════════════════════════════════════════════════"
);
}
else
{
Log
.
d
(
tag
,
"╚═══════════════════════════════════════════════════════════════════════════════════════"
);
}
}
}
lib_common/src/main/java/com/fly/tour/common/util/log/klog/BaseLog.java
0 → 100644
浏览文件 @
efc3708a
package
com.zjx.vcars.common.util.log.klog
;
import
android.util.Log
;
import
com.zjx.vcars.common.util.log.KLog
;
/**
* Created by zhaokaiqiang on 15/11/18.
*/
public
class
BaseLog
{
private
static
final
int
MAX_LENGTH
=
4000
;
public
static
void
printDefault
(
int
type
,
String
tag
,
String
msg
)
{
int
index
=
0
;
int
length
=
msg
.
length
();
int
countOfSub
=
length
/
MAX_LENGTH
;
if
(
countOfSub
>
0
)
{
for
(
int
i
=
0
;
i
<
countOfSub
;
i
++)
{
String
sub
=
msg
.
substring
(
index
,
index
+
MAX_LENGTH
);
printSub
(
type
,
tag
,
sub
);
index
+=
MAX_LENGTH
;
}
printSub
(
type
,
tag
,
msg
.
substring
(
index
,
length
));
}
else
{
printSub
(
type
,
tag
,
msg
);
}
}
private
static
void
printSub
(
int
type
,
String
tag
,
String
sub
)
{
switch
(
type
)
{
case
KLog
.
V
:
Log
.
v
(
tag
,
sub
);
break
;
case
KLog
.
D
:
Log
.
d
(
tag
,
sub
);
break
;
case
KLog
.
I
:
Log
.
i
(
tag
,
sub
);
break
;
case
KLog
.
W
:
Log
.
w
(
tag
,
sub
);
break
;
case
KLog
.
E
:
Log
.
e
(
tag
,
sub
);
break
;
case
KLog
.
A
:
Log
.
wtf
(
tag
,
sub
);
break
;
}
}
}
lib_common/src/main/java/com/fly/tour/common/util/log/klog/FileLog.java
0 → 100644
浏览文件 @
efc3708a
package
com.zjx.vcars.common.util.log.klog
;
import
android.support.annotation.NonNull
;
import
android.support.annotation.Nullable
;
import
android.util.Log
;
import
java.io.File
;
import
java.io.FileNotFoundException
;
import
java.io.FileOutputStream
;
import
java.io.IOException
;
import
java.io.OutputStream
;
import
java.io.OutputStreamWriter
;
import
java.io.UnsupportedEncodingException
;
import
java.util.Random
;
/**
* Created by zhaokaiqiang on 15/11/18.
*/
public
class
FileLog
{
private
static
final
String
FILE_PREFIX
=
"KLog_"
;
private
static
final
String
FILE_FORMAT
=
".log"
;
public
static
void
printFile
(
String
tag
,
File
targetDirectory
,
@Nullable
String
fileName
,
String
headString
,
String
msg
)
{
fileName
=
(
fileName
==
null
)
?
getFileName
()
:
fileName
;
if
(
save
(
targetDirectory
,
fileName
,
msg
))
{
Log
.
d
(
tag
,
headString
+
" save log success ! location is >>>"
+
targetDirectory
.
getAbsolutePath
()
+
"/"
+
fileName
);
}
else
{
Log
.
e
(
tag
,
headString
+
"save log fails !"
);
}
}
private
static
boolean
save
(
File
dic
,
@NonNull
String
fileName
,
String
msg
)
{
File
file
=
new
File
(
dic
,
fileName
);
try
{
OutputStream
outputStream
=
new
FileOutputStream
(
file
);
OutputStreamWriter
outputStreamWriter
=
new
OutputStreamWriter
(
outputStream
,
"UTF-8"
);
outputStreamWriter
.
write
(
msg
);
outputStreamWriter
.
flush
();
outputStream
.
close
();
return
true
;
}
catch
(
FileNotFoundException
e
)
{
e
.
printStackTrace
();
return
false
;
}
catch
(
UnsupportedEncodingException
e
)
{
e
.
printStackTrace
();
return
false
;
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
return
false
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
false
;
}
}
private
static
String
getFileName
()
{
Random
random
=
new
Random
();
return
FILE_PREFIX
+
Long
.
toString
(
System
.
currentTimeMillis
()
+
random
.
nextInt
(
10000
)).
substring
(
4
)
+
FILE_FORMAT
;
}
}
lib_common/src/main/java/com/fly/tour/common/util/log/klog/JsonLog.java
0 → 100644
浏览文件 @
efc3708a
package
com.zjx.vcars.common.util.log.klog
;
import
android.util.Log
;
import
com.zjx.vcars.common.util.log.KLog
;
import
com.zjx.vcars.common.util.log.KLogUtil
;
import
org.json.JSONArray
;
import
org.json.JSONException
;
import
org.json.JSONObject
;
/**
* Created by zhaokaiqiang on 15/11/18.
*/
public
class
JsonLog
{
public
static
void
printJson
(
String
tag
,
String
msg
,
String
headString
)
{
String
message
;
try
{
if
(
msg
.
startsWith
(
"{"
))
{
JSONObject
jsonObject
=
new
JSONObject
(
msg
);
message
=
jsonObject
.
toString
(
KLog
.
JSON_INDENT
);
}
else
if
(
msg
.
startsWith
(
"["
))
{
JSONArray
jsonArray
=
new
JSONArray
(
msg
);
message
=
jsonArray
.
toString
(
KLog
.
JSON_INDENT
);
}
else
{
message
=
msg
;
}
}
catch
(
JSONException
e
)
{
message
=
msg
;
}
KLogUtil
.
printLine
(
tag
,
true
);
message
=
headString
+
KLog
.
LINE_SEPARATOR
+
message
;
String
[]
lines
=
message
.
split
(
KLog
.
LINE_SEPARATOR
);
for
(
String
line
:
lines
)
{
Log
.
d
(
tag
,
"║ "
+
line
);
}
KLogUtil
.
printLine
(
tag
,
false
);
}
}
lib_common/src/main/java/com/fly/tour/common/util/log/klog/XmlLog.java
0 → 100644
浏览文件 @
efc3708a
package
com.zjx.vcars.common.util.log.klog
;
import
android.util.Log
;
import
com.zjx.vcars.common.util.log.KLog
;
import
com.zjx.vcars.common.util.log.KLogUtil
;
import
java.io.StringReader
;
import
java.io.StringWriter
;
import
javax.xml.transform.OutputKeys
;
import
javax.xml.transform.Source
;
import
javax.xml.transform.Transformer
;
import
javax.xml.transform.TransformerFactory
;
import
javax.xml.transform.stream.StreamResult
;
import
javax.xml.transform.stream.StreamSource
;
/**
* Created by zhaokaiqiang on 15/11/18.
*/
public
class
XmlLog
{
public
static
void
printXml
(
String
tag
,
String
xml
,
String
headString
)
{
if
(
xml
!=
null
)
{
xml
=
XmlLog
.
formatXML
(
xml
);
xml
=
headString
+
"\n"
+
xml
;
}
else
{
xml
=
headString
+
KLog
.
NULL_TIPS
;
}
KLogUtil
.
printLine
(
tag
,
true
);
String
[]
lines
=
xml
.
split
(
KLog
.
LINE_SEPARATOR
);
for
(
String
line
:
lines
)
{
if
(!
KLogUtil
.
isEmpty
(
line
))
{
Log
.
d
(
tag
,
"║ "
+
line
);
}
}
KLogUtil
.
printLine
(
tag
,
false
);
}
private
static
String
formatXML
(
String
inputXML
)
{
try
{
Source
xmlInput
=
new
StreamSource
(
new
StringReader
(
inputXML
));
StreamResult
xmlOutput
=
new
StreamResult
(
new
StringWriter
());
Transformer
transformer
=
TransformerFactory
.
newInstance
().
newTransformer
();
transformer
.
setOutputProperty
(
OutputKeys
.
INDENT
,
"yes"
);
transformer
.
setOutputProperty
(
"{http://xml.apache.org/xslt}indent-amount"
,
"2"
);
transformer
.
transform
(
xmlInput
,
xmlOutput
);
return
xmlOutput
.
getWriter
().
toString
().
replaceFirst
(
">"
,
">\n"
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
inputXML
;
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录