Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
yuan_ht
BlackHaoUtil
提交
9b2e1219
B
BlackHaoUtil
项目概览
yuan_ht
/
BlackHaoUtil
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
B
BlackHaoUtil
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
9b2e1219
编写于
5月 07, 2019
作者:
Black_Hao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add TimeUtil
add TimeUtil
上级
55211f89
变更
22
隐藏空白更改
内联
并排
Showing
22 changed file
with
983 addition
and
400 deletion
+983
-400
.idea/misc.xml
.idea/misc.xml
+1
-1
app/build.gradle
app/build.gradle
+3
-1
app/src/main/java/com/balckhao/blackhaoutil/MainActivity.java
...src/main/java/com/balckhao/blackhaoutil/MainActivity.java
+82
-0
app/src/main/java/com/balckhao/blackhaoutil/base/test/TestActivity.java
...ava/com/balckhao/blackhaoutil/base/test/TestActivity.java
+12
-7
app/src/main/java/com/balckhao/blackhaoutil/base/test/TestFragment.java
...ava/com/balckhao/blackhaoutil/base/test/TestFragment.java
+6
-7
app/src/main/java/com/balckhao/blackhaoutil/mvp/test/TestPresenter.java
...ava/com/balckhao/blackhaoutil/mvp/test/TestPresenter.java
+8
-3
app/src/main/java/com/balckhao/blackhaoutil/usbUtil/UsbTestActivity.java
...va/com/balckhao/blackhaoutil/usbUtil/UsbTestActivity.java
+7
-9
app/src/main/res/layout/activity_main.xml
app/src/main/res/layout/activity_main.xml
+67
-4
app/src/main/res/layout/activity_mvp_test.xml
app/src/main/res/layout/activity_mvp_test.xml
+1
-1
depend.gradle
depend.gradle
+18
-0
utillibrary/build.gradle
utillibrary/build.gradle
+3
-4
utillibrary/src/main/java/com/blackhao/utillibrary/base/BaseActivity.java
...main/java/com/blackhao/utillibrary/base/BaseActivity.java
+0
-195
utillibrary/src/main/java/com/blackhao/utillibrary/base/BaseFragment.java
...main/java/com/blackhao/utillibrary/base/BaseFragment.java
+0
-140
utillibrary/src/main/java/com/blackhao/utillibrary/base/CommonBaseAdapter.java
...java/com/blackhao/utillibrary/base/CommonBaseAdapter.java
+29
-3
utillibrary/src/main/java/com/blackhao/utillibrary/file/FileUtil.java
...src/main/java/com/blackhao/utillibrary/file/FileUtil.java
+338
-0
utillibrary/src/main/java/com/blackhao/utillibrary/log/LogHelper.java
...src/main/java/com/blackhao/utillibrary/log/LogHelper.java
+77
-15
utillibrary/src/main/java/com/blackhao/utillibrary/mvp/BaseActivity.java
.../main/java/com/blackhao/utillibrary/mvp/BaseActivity.java
+21
-0
utillibrary/src/main/java/com/blackhao/utillibrary/mvp/BaseFragment.java
.../main/java/com/blackhao/utillibrary/mvp/BaseFragment.java
+17
-0
utillibrary/src/main/java/com/blackhao/utillibrary/mvp/BaseMvpActivity.java
...in/java/com/blackhao/utillibrary/mvp/BaseMvpActivity.java
+6
-5
utillibrary/src/main/java/com/blackhao/utillibrary/mvp/BaseMvpFragment.java
...in/java/com/blackhao/utillibrary/mvp/BaseMvpFragment.java
+4
-5
utillibrary/src/main/java/com/blackhao/utillibrary/mvp/BlankContract.java
...main/java/com/blackhao/utillibrary/mvp/BlankContract.java
+18
-0
utillibrary/src/main/java/com/blackhao/utillibrary/time/TimeUtil.java
...src/main/java/com/blackhao/utillibrary/time/TimeUtil.java
+265
-0
未找到文件。
.idea/misc.xml
浏览文件 @
9b2e1219
...
...
@@ -25,7 +25,7 @@
</value>
</option>
</component>
<component
name=
"ProjectRootManager"
version=
"2"
languageLevel=
"JDK_1_8"
default=
"true"
project-jdk-name=
"1.8"
project-jdk-type=
"JavaSDK"
>
<component
name=
"ProjectRootManager"
version=
"2"
languageLevel=
"JDK_1_8"
project-jdk-name=
"1.8"
project-jdk-type=
"JavaSDK"
>
<output
url=
"file://$PROJECT_DIR$/build/classes"
/>
</component>
<component
name=
"ProjectType"
>
...
...
app/build.gradle
浏览文件 @
9b2e1219
apply
plugin:
'com.android.application'
apply
from:
'../depend.gradle'
android
{
compileSdkVersion
26
...
...
@@ -26,6 +27,7 @@ dependencies {
})
compile
'com.android.support:appcompat-v7:25.3.1'
compile
'com.android.support.constraint:constraint-layout:1.0.2'
testCompile
'junit:junit:4.12'
compile
gradle
.
depend
[
"butterknife"
]
annotationProcessor
gradle
.
depend
[
"butterknife-compiler"
]
compile
project
(
path:
':utillibrary'
)
}
app/src/main/java/com/balckhao/blackhaoutil/MainActivity.java
浏览文件 @
9b2e1219
package
com.balckhao.blackhaoutil
;
import
android.Manifest
;
import
android.content.Intent
;
import
android.content.pm.PackageManager
;
import
android.os.Bundle
;
import
android.os.Environment
;
import
android.support.v4.app.ActivityCompat
;
import
android.support.v7.app.AppCompatActivity
;
import
android.view.View
;
import
com.balckhao.blackhaoutil.base.test.TestActivity
;
import
com.balckhao.blackhaoutil.mvp.test.MvpTestActivity
;
import
com.balckhao.blackhaoutil.usbUtil.UsbTestActivity
;
import
com.blackhao.utillibrary.file.FileUtil
;
import
com.blackhao.utillibrary.log.LogHelper
;
import
java.io.File
;
import
java.io.FileInputStream
;
import
java.io.FileOutputStream
;
public
class
MainActivity
extends
AppCompatActivity
{
private
File
temp
;
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
...
...
@@ -30,6 +42,76 @@ public class MainActivity extends AppCompatActivity {
case
R
.
id
.
mvp_base_test
:
startActivity
(
new
Intent
(
this
,
MvpTestActivity
.
class
));
break
;
case
R
.
id
.
create_temp
:
new
Thread
(
new
Runnable
()
{
@Override
public
void
run
()
{
String
text
=
"123456789qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq"
+
"qwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww"
+
"ertyuioplkjhgfdsazxcvbbnmnmpoiweqasdjashfasjc nzxkcnahfdasd,as nfasdnask"
;
try
{
temp
=
FileUtil
.
getTempFile
(
MainActivity
.
this
,
"aaaa.txt"
);
FileOutputStream
fos
=
new
FileOutputStream
(
temp
);
fos
.
write
(
text
.
getBytes
());
fos
.
flush
();
fos
.
close
();
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
LogHelper
.
getInstance
().
e
(
e
.
toString
());
}
}
}).
start
();
break
;
case
R
.
id
.
read_temp
:
new
Thread
(
new
Runnable
()
{
@Override
public
void
run
()
{
try
{
FileInputStream
fis
=
new
FileInputStream
(
temp
);
byte
[]
data
=
new
byte
[
fis
.
available
()];
fis
.
read
(
data
);
fis
.
close
();
String
text
=
new
String
(
data
,
"utf-8"
);
LogHelper
.
getInstance
().
e
(
text
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
LogHelper
.
getInstance
().
e
(
e
.
toString
());
}
}
}).
start
();
break
;
case
R
.
id
.
copy_folder
:
if
(
ActivityCompat
.
checkSelfPermission
(
this
,
Manifest
.
permission
.
WRITE_EXTERNAL_STORAGE
)
!=
PackageManager
.
PERMISSION_GRANTED
)
{
//未授权,提起权限申请
ActivityCompat
.
requestPermissions
(
this
,
new
String
[]{
Manifest
.
permission
.
WRITE_EXTERNAL_STORAGE
},
100
);
return
;
}
new
Thread
(
new
Runnable
()
{
@Override
public
void
run
()
{
String
root
=
Environment
.
getExternalStorageDirectory
().
getAbsolutePath
();
FileUtil
.
copyFolder
(
root
+
"/QChat"
,
root
+
"/QChatTest"
);
LogHelper
.
getInstance
().
e
(
"copy finish "
);
}
}).
start
();
break
;
case
R
.
id
.
del_folder
:
new
Thread
(
new
Runnable
()
{
@Override
public
void
run
()
{
String
root
=
Environment
.
getExternalStorageDirectory
().
getAbsolutePath
();
FileUtil
.
delFileBeforeTime
(
root
+
"/test"
,
System
.
currentTimeMillis
());
LogHelper
.
getInstance
().
e
(
"delete finish "
);
}
}).
start
();
break
;
case
R
.
id
.
rename
:
String
root
=
Environment
.
getExternalStorageDirectory
().
getAbsolutePath
();
FileUtil
.
modifyFileName
(
root
+
"/test"
,
"QChatRename"
);
break
;
}
}
}
app/src/main/java/com/balckhao/blackhaoutil/base/test/TestActivity.java
浏览文件 @
9b2e1219
package
com.balckhao.blackhaoutil.base.test
;
import
android.os.Bundle
;
import
android.os.Message
;
import
android.widget.FrameLayout
;
import
android.widget.TextView
;
import
com.balckhao.blackhaoutil.R
;
...
...
@@ -10,24 +12,27 @@ import java.text.SimpleDateFormat;
import
java.util.Date
;
import
java.util.Locale
;
import
butterknife.Bind
;
import
butterknife.ButterKnife
;
import
butterknife.BindView
;
/**
* Author : BlackHao
* Time : 2018/8/1 10:35
* Description : BaseActivity Log
Util
Test
* Description : BaseActivity Log
Helper
Test
*/
public
class
TestActivity
extends
BaseActivity
{
@Bind
(
R
.
id
.
tv_show_time
)
TextView
tvShowTime
;
@BindView
(
R
.
id
.
tv_show_time
)
TextView
tvShowTime
;
@BindView
(
R
.
id
.
frame_1
)
FrameLayout
frame1
;
@BindView
(
R
.
id
.
frame_2
)
FrameLayout
frame2
;
private
String
testJson1
=
"{\"UserID\":01, \"Name\":\"Test\", \"Email\":\"test@gmail.com\"};"
;
@Override
protected
void
initUI
()
{
setContentView
(
R
.
layout
.
activity_base_test
);
ButterKnife
.
bind
(
this
);
butterknife
.
ButterKnife
.
bind
(
this
);
//replaceFragment
replaceFragment
(
R
.
id
.
frame_1
,
new
TestFragment
());
replaceFragment
(
R
.
id
.
frame_2
,
new
TestFragment
());
...
...
@@ -42,7 +47,7 @@ public class TestActivity extends BaseActivity {
StringBuilder
sb
=
new
StringBuilder
();
for
(
int
i
=
0
;
i
<
2048
;
i
++)
{
sb
.
append
(
i
).
append
(
" "
);
if
(
i
+
1
%
100
==
0
)
{
if
(
(
i
+
1
)
%
100
==
0
)
{
sb
.
append
(
"\n"
);
}
}
...
...
app/src/main/java/com/balckhao/blackhaoutil/base/test/TestFragment.java
浏览文件 @
9b2e1219
...
...
@@ -5,12 +5,10 @@ import android.widget.ImageView;
import
android.widget.ListView
;
import
com.balckhao.blackhaoutil.R
;
import
com.blackhao.utillibrary.base.BaseFragment
;
import
java.util.ArrayList
;
import
butterknife.Bind
;
import
butterknife.ButterKnife
;
import
butterknife.BindView
;
/**
* Author : BlackHao
...
...
@@ -20,10 +18,11 @@ import butterknife.ButterKnife;
public
class
TestFragment
extends
BaseFragment
{
@Bind
(
R
.
id
.
iv_1
)
@Bind
View
(
R
.
id
.
iv_1
)
ImageView
iv1
;
@Bind
(
R
.
id
.
lv_test
)
@Bind
View
(
R
.
id
.
lv_test
)
ListView
lvTest
;
butterknife
.
Unbinder
unbinder
;
@Override
protected
int
initLayoutRes
()
{
...
...
@@ -32,7 +31,7 @@ public class TestFragment extends BaseFragment {
@Override
protected
void
initUI
(
View
view
)
{
ButterKnife
.
bind
(
this
,
view
);
unbinder
=
butterknife
.
ButterKnife
.
bind
(
this
,
view
);
iv1
.
setImageResource
(
R
.
mipmap
.
ic_launcher
);
}
...
...
@@ -59,7 +58,7 @@ public class TestFragment extends BaseFragment {
@Override
public
void
onDestroyView
()
{
super
.
onDestroyView
();
ButterKnife
.
unbind
(
this
);
}
}
app/src/main/java/com/balckhao/blackhaoutil/mvp/test/TestPresenter.java
浏览文件 @
9b2e1219
...
...
@@ -4,13 +4,17 @@ import android.content.Context;
import
com.blackhao.utillibrary.mvp.BaseMvpPresenter
;
import
java.util.concurrent.ExecutorService
;
import
java.util.concurrent.Executors
;
/**
* Author : BlackHao
* Time : 2018/12/20 10:17
* Description : TestPresenter
*/
public
class
TestPresenter
extends
BaseMvpPresenter
<
TestMvpContract
.
TestViewImpl
>
implements
TestMvpContract
.
TestPresenterImpl
{
public
class
TestPresenter
extends
BaseMvpPresenter
<
TestMvpContract
.
TestViewImpl
>
implements
TestMvpContract
.
TestPresenterImpl
{
public
TestPresenter
(
Context
context
,
TestMvpContract
.
TestViewImpl
mView
)
{
super
(
context
,
mView
);
...
...
@@ -19,7 +23,8 @@ public class TestPresenter extends BaseMvpPresenter<TestMvpContract.TestViewImpl
@Override
public
void
login
(
final
String
name
,
final
String
psw
)
{
getView
().
showLoading
(
"正在登陆..."
);
new
Thread
(
new
Runnable
()
{
ExecutorService
executorService
=
Executors
.
newFixedThreadPool
(
5
);
executorService
.
execute
(
new
Runnable
()
{
@Override
public
void
run
()
{
//休眠,模拟登陆
...
...
@@ -36,7 +41,7 @@ public class TestPresenter extends BaseMvpPresenter<TestMvpContract.TestViewImpl
}
getView
().
dismissLoading
();
}
})
.
start
()
;
});
}
@Override
...
...
app/src/main/java/com/balckhao/blackhaoutil/usbUtil/UsbTestActivity.java
浏览文件 @
9b2e1219
...
...
@@ -22,22 +22,20 @@ import java.io.File;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
butterknife.Bind
;
import
butterknife.ButterKnife
;
import
butterknife.BindView
;
public
class
UsbTestActivity
extends
AppCompatActivity
implements
USBBroadCastReceiver
.
UsbListener
{
@Bind
(
R
.
id
.
local_backspace_iv
)
@Bind
View
(
R
.
id
.
local_backspace_iv
)
ImageButton
localBackspaceIv
;
@Bind
(
R
.
id
.
local_file_lv
)
@Bind
View
(
R
.
id
.
local_file_lv
)
ListView
localFileLv
;
@Bind
(
R
.
id
.
usb_backspace_iv
)
@Bind
View
(
R
.
id
.
usb_backspace_iv
)
ImageButton
usbBackspaceIv
;
@Bind
(
R
.
id
.
usb_file_lv
)
@Bind
View
(
R
.
id
.
usb_file_lv
)
ListView
usbFileLv
;
@Bind
(
R
.
id
.
show_progress_tv
)
@Bind
View
(
R
.
id
.
show_progress_tv
)
TextView
showProgressTv
;
//本地文件列表相关
private
ArrayList
<
File
>
localList
;
private
FileListAdapter
<
File
>
localAdapter
;
...
...
@@ -52,7 +50,7 @@ public class UsbTestActivity extends AppCompatActivity implements USBBroadCastRe
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
setContentView
(
R
.
layout
.
activity_usb_test
);
ButterKnife
.
bind
(
this
);
butterknife
.
ButterKnife
.
bind
(
this
);
initLocalFile
();
initUsbFile
();
}
...
...
app/src/main/res/layout/activity_main.xml
浏览文件 @
9b2e1219
<?xml version="1.0" encoding="utf-8"?>
<
Relative
Layout
xmlns:android=
"http://schemas.android.com/apk/res/android"
<
Linear
Layout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
android:layout_height=
"match_parent"
android:orientation=
"vertical"
>
<LinearLayout
android:layout_width=
"match_parent"
...
...
@@ -22,7 +23,6 @@
android:id=
"@+id/log_base_test"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_margin=
"10dp"
android:layout_weight=
"1"
android:onClick=
"onClick"
android:text=
"LogUtil/BaseXXX"
...
...
@@ -39,5 +39,68 @@
android:textAllCaps=
"false"
/>
</LinearLayout>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:orientation=
"horizontal"
>
<Button
android:id=
"@+id/create_temp"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_margin=
"10dp"
android:layout_weight=
"1"
android:onClick=
"onClick"
android:text=
"CreateTemp"
android:textAllCaps=
"false"
/>
<Button
android:id=
"@+id/read_temp"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_margin=
"10dp"
android:layout_weight=
"1"
android:onClick=
"onClick"
android:text=
"ReadTemp"
android:textAllCaps=
"false"
/>
<Button
android:id=
"@+id/copy_folder"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_margin=
"10dp"
android:layout_weight=
"1"
android:onClick=
"onClick"
android:text=
"CopyFolder"
android:textAllCaps=
"false"
/>
</LinearLayout>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:orientation=
"horizontal"
>
<Button
android:id=
"@+id/del_folder"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_margin=
"10dp"
android:layout_weight=
"1"
android:onClick=
"onClick"
android:text=
"DeleteFolder"
android:textAllCaps=
"false"
/>
<Button
android:id=
"@+id/rename"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_margin=
"10dp"
android:layout_weight=
"1"
android:onClick=
"onClick"
android:text=
"Rename"
android:textAllCaps=
"false"
/>
</LinearLayout>
</
Relative
Layout>
</
Linear
Layout>
app/src/main/res/layout/activity_mvp_test.xml
浏览文件 @
9b2e1219
...
...
@@ -3,6 +3,7 @@
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:orientation=
"vertical"
android:fitsSystemWindows=
"true"
android:background=
"#26afcc"
>
<EditText
...
...
@@ -10,7 +11,6 @@
android:layout_width=
"200dp"
android:layout_height=
"40dp"
android:layout_gravity=
"center_horizontal"
android:layout_marginTop=
"40dp"
android:hint=
"用户名"
/>
<EditText
...
...
depend.gradle
0 → 100644
浏览文件 @
9b2e1219
//定义各类第三方插件的版本号
def
gsonVersion
=
"2.8.5"
def
butterknifeVersion
=
"8.8.1"
def
butterknifeCompilerVersion
=
"9.0.0-rc3"
gradle
.
ext
{
depend
=
[
"gson"
:
"com.google.code.gson:gson:${gsonVersion}"
,
"butterknife"
:
"com.jakewharton:butterknife:${butterknifeVersion}"
,
"butterknife-compiler"
:
"com.jakewharton:butterknife-compiler:${butterknifeCompilerVersion}"
]
}
//tasks test{
// println("test")
//}
\ No newline at end of file
utillibrary/build.gradle
浏览文件 @
9b2e1219
apply
plugin:
'com.android.library'
apply
from:
'../depend.gradle'
android
{
compileSdkVersion
26
...
...
@@ -25,11 +26,9 @@ android {
}
dependencies
{
compile
fileTree
(
dir:
'libs'
,
include:
[
'*.jar'
]
)
compile
fileTree
(
include:
[
'*.jar'
],
dir:
'libs'
)
compile
'com.android.support:appcompat-v7:26.1.0'
compile
'com.android.support.constraint:constraint-layout:1.1.3'
compile
'com.github.mjdev:libaums:0.5.5'
compile
'io.github.openfeign:feign-gson:9.0.0'
compile
'com.jakewharton:butterknife:7.0.1'
compile
gradle
.
depend
[
"gson"
]
}
utillibrary/src/main/java/com/blackhao/utillibrary/base/BaseActivity.java
已删除
100644 → 0
浏览文件 @
55211f89
package
com.blackhao.utillibrary.base
;
import
android.content.Intent
;
import
android.os.Bundle
;
import
android.os.Handler
;
import
android.os.Message
;
import
android.support.annotation.IdRes
;
import
android.support.annotation.StringRes
;
import
android.support.v4.app.Fragment
;
import
android.support.v4.app.FragmentTransaction
;
import
android.support.v7.app.AppCompatActivity
;
import
android.util.SparseArray
;
import
android.view.Window
;
import
android.view.WindowManager
;
import
android.widget.Toast
;
import
com.blackhao.utillibrary.logUtil.LogUtil
;
import
java.lang.ref.WeakReference
;
/**
* Author : 章浩
* Time : 2018/6/20 16:38
* Description : 教育一体机 BaseActivity
*/
public
abstract
class
BaseActivity
extends
AppCompatActivity
{
//Handler
public
WeakHandler
handler
;
//Toast 间隔时间
private
static
long
TOAST_INTERVALS
=
1000
;
//Toast上次显示时间(避免短时间内多次调用)
private
long
showToastTime
=
0
;
//用于保存对应 FrameLayout当前显示的 Fragment
private
SparseArray
<
Fragment
>
fragmentArray
;
//LogUtil
protected
LogUtil
log
;
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
//定义全屏参数
int
flag
=
WindowManager
.
LayoutParams
.
FLAG_FULLSCREEN
;
//获得当前窗体对象
Window
window
=
this
.
getWindow
();
//设置当前窗体为全屏显示
window
.
setFlags
(
flag
,
flag
);
//初始化Log
log
=
LogUtil
.
getInstance
();
//初始化fragmentArray
fragmentArray
=
new
SparseArray
<>();
//初始化UI
initUI
();
//view 初始化完成
getWindow
().
getDecorView
().
post
(
new
Runnable
()
{
@Override
public
void
run
()
{
//初始化数据
initData
();
//添加listener
initListener
();
}
});
}
/**
* 初始化UI
*/
protected
abstract
void
initUI
();
/**
* UI初始化完成,初始化数据
*/
protected
abstract
void
initData
();
/**
* UI初始化完成,初始化接口
*/
protected
abstract
void
initListener
();
/**
* 子类要处理 handler的消息,重写该方法
*/
protected
abstract
void
handleMessage
(
Message
msg
);
/**
* 初始化 Handler(不用 handler 时,不需要调用该方法)
*/
public
void
initHandler
()
{
handler
=
new
WeakHandler
(
this
);
}
/**
* 显示 Toast(可以在子线程中调用)
*/
public
void
showToast
(
final
String
str
)
{
runOnUiThread
(
new
Runnable
()
{
@Override
public
void
run
()
{
//避免多次调用
if
(
System
.
currentTimeMillis
()
-
showToastTime
>
TOAST_INTERVALS
)
{
Toast
.
makeText
(
BaseActivity
.
this
,
str
,
Toast
.
LENGTH_SHORT
).
show
();
//更新显示时间
showToastTime
=
System
.
currentTimeMillis
();
}
}
});
}
/**
* 显示 Toast(可以在子线程中调用)
*/
public
void
showToast
(
@StringRes
int
strId
)
{
showToast
(
getString
(
strId
));
}
/**
* 替换 fragment
*
* @param frameId frameLayout id
* @param showFragment 需要显示的 Fragment
*/
public
void
replaceFragment
(
@IdRes
int
frameId
,
Fragment
showFragment
)
{
Fragment
currentFragment
=
fragmentArray
.
get
(
frameId
);
FragmentTransaction
transaction
=
getSupportFragmentManager
().
beginTransaction
();
//用于fragment的显示与隐藏
if
(
currentFragment
!=
null
&&
currentFragment
!=
showFragment
)
{
if
(!
showFragment
.
isAdded
())
{
// 先判断是否被add过
transaction
.
hide
(
currentFragment
).
add
(
frameId
,
showFragment
).
commit
();
// 隐藏当前的fragment,add下一个到Activity中
}
else
{
transaction
.
hide
(
currentFragment
).
show
(
showFragment
).
commit
();
// 隐藏当前的fragment,显示下一个
}
fragmentArray
.
put
(
frameId
,
showFragment
);
}
else
if
(
currentFragment
==
null
)
{
if
(!
showFragment
.
isAdded
())
{
// 先判断是否被add过
transaction
.
add
(
frameId
,
showFragment
).
commit
();
// 隐藏当前的fragment,add下一个到Activity中
}
else
{
transaction
.
show
(
showFragment
).
commit
();
// 隐藏当前的fragment,显示下一个
}
fragmentArray
.
put
(
frameId
,
showFragment
);
}
}
/**
* activity 跳转
*
* @param target 需要跳转的 Activity
* @param bundle bundle
* @param isCloseSelf 是否关闭当前的 activity
*/
public
void
openActivity
(
Class
<?>
target
,
Bundle
bundle
,
boolean
isCloseSelf
)
{
Intent
intent
=
new
Intent
(
this
,
target
);
if
(
bundle
!=
null
)
{
intent
.
putExtras
(
bundle
);
}
startActivity
(
intent
);
if
(
isCloseSelf
)
{
finish
();
}
}
/**
* activity 跳转(不需要传值)
*
* @param target 需要跳转的Activity
*/
public
void
openActivity
(
Class
<?>
target
)
{
openActivity
(
target
,
null
,
false
);
}
/**
* 弱引用 handler
*/
public
static
class
WeakHandler
extends
Handler
{
WeakReference
weakReference
;
WeakHandler
(
BaseActivity
activity
)
{
this
.
weakReference
=
new
WeakReference
<>(
activity
);
}
@Override
public
void
handleMessage
(
Message
msg
)
{
super
.
handleMessage
(
msg
);
BaseActivity
activity
=
(
BaseActivity
)
weakReference
.
get
();
switch
(
msg
.
what
)
{
default
:
if
(
activity
!=
null
)
{
activity
.
handleMessage
(
msg
);
}
break
;
}
}
}
}
utillibrary/src/main/java/com/blackhao/utillibrary/base/BaseFragment.java
已删除
100644 → 0
浏览文件 @
55211f89
package
com.blackhao.utillibrary.base
;
import
android.os.Bundle
;
import
android.support.annotation.Nullable
;
import
android.support.annotation.StringRes
;
import
android.support.v4.app.Fragment
;
import
android.support.v4.app.FragmentTransaction
;
import
android.util.SparseArray
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
com.blackhao.utillibrary.logUtil.LogUtil
;
/**
* Author : BlackHao
* Time : 2018/6/20 14:55
* Description : 教育一体机 BaseFragment
*/
public
abstract
class
BaseFragment
extends
Fragment
{
//对应的activity
protected
BaseActivity
baseActivity
;
//用于保存对应FrameLayout当前显示的Fragment
private
SparseArray
<
Fragment
>
fragmentArray
;
//LogUtil
protected
LogUtil
log
;
@Override
public
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
baseActivity
=
(
BaseActivity
)
getActivity
();
fragmentArray
=
new
SparseArray
<>();
log
=
baseActivity
.
log
;
}
@Nullable
@Override
public
View
onCreateView
(
LayoutInflater
inflater
,
@Nullable
ViewGroup
container
,
@Nullable
Bundle
savedInstanceState
)
{
View
view
=
inflater
.
inflate
(
initLayoutRes
(),
container
,
false
);
initUI
(
view
);
return
view
;
}
@Override
public
void
onViewCreated
(
View
view
,
@Nullable
Bundle
savedInstanceState
)
{
super
.
onViewCreated
(
view
,
savedInstanceState
);
initData
();
initListener
();
}
/**
* 用于返回布局文件ID
*/
protected
abstract
int
initLayoutRes
();
/**
* UI初始化
*/
protected
abstract
void
initUI
(
View
view
);
/**
* UI初始化完成,初始化数据
*/
protected
abstract
void
initData
();
/**
* UI初始化完成,初始化接口
*/
protected
abstract
void
initListener
();
/**
* 显示 Toast(可以在子线程中调用)
*/
public
void
showToast
(
String
str
)
{
baseActivity
.
showToast
(
str
);
}
/**
* 显示 Toast(可以在子线程中调用)
*/
public
void
showToast
(
@StringRes
int
strId
)
{
baseActivity
.
showToast
(
strId
);
}
/**
* 替换fragment
*
* @param frameId frameLayout id
* @param showFragment 需要显示的 Fragment
*/
public
void
replaceFragment
(
int
frameId
,
Fragment
showFragment
)
{
Fragment
currentFragment
=
fragmentArray
.
get
(
frameId
);
FragmentTransaction
transaction
=
getFragmentManager
().
beginTransaction
();
//用于fragment的显示与隐藏
if
(
currentFragment
!=
null
&&
currentFragment
!=
showFragment
)
{
// 先判断是否被add过
if
(!
showFragment
.
isAdded
())
{
// 隐藏当前的fragment,add下一个到Activity中
transaction
.
hide
(
currentFragment
).
add
(
frameId
,
showFragment
).
commit
();
}
else
{
// 隐藏当前的fragment,显示下一个
transaction
.
hide
(
currentFragment
).
show
(
showFragment
).
commit
();
}
fragmentArray
.
put
(
frameId
,
showFragment
);
}
else
if
(
currentFragment
==
null
)
{
// 先判断是否被add过
if
(!
showFragment
.
isAdded
())
{
// 隐藏当前的fragment,add下一个到Activity中
transaction
.
add
(
frameId
,
showFragment
).
commit
();
}
else
{
// 隐藏当前的fragment,显示下一个
transaction
.
show
(
showFragment
).
commit
();
}
fragmentArray
.
put
(
frameId
,
showFragment
);
}
}
/**
* activity 跳转
*
* @param target 需要跳转的Activity
* @param bundle bundle
* @param isCloseSelf 是否关闭当前的activity
*/
public
void
openActivity
(
Class
<?>
target
,
Bundle
bundle
,
boolean
isCloseSelf
)
{
baseActivity
.
openActivity
(
target
,
bundle
,
isCloseSelf
);
}
/**
* activity 跳转(不需要传值)
*
* @param target 需要跳转的 Activity
*/
public
void
openActivity
(
Class
<?>
target
)
{
openActivity
(
target
,
null
,
false
);
}
}
utillibrary/src/main/java/com/blackhao/utillibrary/base/CommonBaseAdapter.java
浏览文件 @
9b2e1219
...
...
@@ -7,6 +7,7 @@ import android.view.View;
import
android.view.ViewGroup
;
import
android.widget.BaseAdapter
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
...
...
@@ -19,8 +20,8 @@ public abstract class CommonBaseAdapter<T> extends BaseAdapter {
private
List
<
T
>
list
;
private
Context
context
;
public
CommonBaseAdapter
(
List
<
T
>
list
,
Context
context
)
{
this
.
list
=
list
;
public
CommonBaseAdapter
(
Context
context
)
{
this
.
list
=
new
ArrayList
<>()
;
this
.
context
=
context
;
}
...
...
@@ -30,7 +31,7 @@ public abstract class CommonBaseAdapter<T> extends BaseAdapter {
}
@Override
public
Object
getItem
(
int
position
)
{
public
T
getItem
(
int
position
)
{
return
list
.
get
(
position
);
}
...
...
@@ -59,6 +60,31 @@ public abstract class CommonBaseAdapter<T> extends BaseAdapter {
return
convertView
;
}
/**
* 获取上下文对象
*/
public
Context
getContext
()
{
return
context
;
}
/**
* 获取数据
*/
public
List
<
T
>
getList
()
{
return
list
;
}
/**
* 更新数据
*/
public
void
updateList
(
List
<
T
>
list
)
{
this
.
list
.
clear
();
if
(
list
!=
null
&&
list
.
size
()
>
0
)
{
this
.
list
.
addAll
(
list
);
}
notifyDataSetChanged
();
}
/**
* 获取 layout 文件
*
...
...
utillibrary/src/main/java/com/blackhao/utillibrary/file/FileUtil.java
0 → 100644
浏览文件 @
9b2e1219
package
com.blackhao.utillibrary.file
;
import
android.content.ContentResolver
;
import
android.content.Context
;
import
android.database.Cursor
;
import
android.net.Uri
;
import
android.os.Environment
;
import
android.os.StatFs
;
import
android.provider.MediaStore
;
import
com.blackhao.utillibrary.log.LogHelper
;
import
java.io.File
;
import
java.io.FileInputStream
;
import
java.io.FileOutputStream
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.List
;
/**
* Author : BlackHao
* Time : 2018/4/9 10:10
* Description : 文件工具类
*/
public
class
FileUtil
{
/**
* 获取缓存文件
*
* @param context 上下文对象
* @param fileName 文件名
* @return 文件路径
*/
public
static
File
getTempFile
(
Context
context
,
String
fileName
)
{
File
file
=
null
;
try
{
String
[]
fix
=
fileName
.
split
(
"\\."
);
String
preFix
=
fix
[
0
];
String
sufFix
=
null
;
if
(
fix
.
length
>
1
)
{
sufFix
=
"."
+
fix
[
1
];
}
String
path
=
context
.
getCacheDir
().
getAbsolutePath
()
+
File
.
separator
+
"temp"
;
//判断文件夹是否存在,不存在直接创建
File
folder
=
new
File
(
path
);
if
(!
folder
.
exists
())
{
if
(!
folder
.
mkdirs
())
{
//创建失败
LogHelper
.
getInstance
().
e
(
"create folder "
+
path
+
" fail"
);
return
null
;
}
}
file
=
File
.
createTempFile
(
preFix
,
sufFix
,
folder
);
//程序结束自动删除文件(这里好像并没有什么效果,所以需要手动去调用delTempFileBeforeTime)
file
.
deleteOnExit
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
return
file
;
}
/**
* 删除临时文件夹下,指定时间以前的所有临时文件
*
* @param context 上下文对象
* @param msec 指定时间(毫秒)
*/
public
void
delTempFileBeforeTime
(
Context
context
,
long
msec
)
{
String
path
=
context
.
getCacheDir
().
getAbsolutePath
()
+
File
.
separator
+
"temp"
;
delFileBeforeTime
(
path
,
msec
);
}
/**
* 删除文件夹下指定时间以前的所有文件
*
* @param folderPath 文件夹路径
* @param msec 指定时间(毫秒),传 <=0 表示删除所有的文件
*/
public
static
void
delFileBeforeTime
(
String
folderPath
,
long
msec
)
{
File
folder
=
new
File
(
folderPath
);
if
(
folder
.
exists
()
&&
folder
.
isDirectory
())
{
File
[]
files
=
folder
.
listFiles
();
if
(
files
!=
null
&&
files
.
length
>
0
)
{
for
(
File
file
:
files
)
{
if
(
file
.
isFile
()
&&
(
msec
<=
0
||
file
.
lastModified
()
<
msec
))
{
file
.
delete
();
// LogHelper.getInstance().e("delete file :" + file.getAbsolutePath());
}
else
if
(
file
.
isDirectory
())
{
delFileBeforeTime
(
file
.
getAbsolutePath
(),
msec
);
//这里如果文件夹已经为空,直接删除文件夹
File
[]
folderFiles
=
file
.
listFiles
();
if
(
folderFiles
==
null
||
folderFiles
.
length
==
0
)
{
file
.
delete
();
// LogHelper.getInstance().e("delete folder :" + file.getAbsolutePath());
}
}
}
}
}
}
/**
* 检测文件是否存在
*
* @param path 文件夹路径
*/
public
static
boolean
checkFileExists
(
String
path
)
{
File
file
=
new
File
(
path
);
//判断文件夹是否存在
return
file
.
exists
();
}
/**
* 拷贝文件到指定文件夹
*
* @param fromFilePath 文件的绝对路径
* @param toFolder 目标文件夹
*/
public
static
boolean
copyFile
(
String
fromFilePath
,
String
toFolder
)
{
boolean
result
=
false
;
File
from
=
new
File
(
fromFilePath
);
File
to
=
new
File
(
toFolder
);
if
(
from
.
exists
()
&&
to
.
exists
()
&&
to
.
isDirectory
())
{
File
dst
=
new
File
(
toFolder
+
File
.
separator
+
from
.
getName
());
if
(!
dst
.
exists
())
{
try
{
dst
.
createNewFile
();
FileInputStream
fis
=
new
FileInputStream
(
from
);
FileOutputStream
fos
=
new
FileOutputStream
(
dst
);
byte
[]
data
=
new
byte
[
10
*
1024
];
int
len
;
while
((
len
=
fis
.
read
(
data
))
>
0
)
{
fos
.
write
(
data
,
0
,
len
);
fos
.
flush
();
}
fos
.
close
();
fis
.
close
();
result
=
true
;
}
catch
(
IOException
e
)
{
LogHelper
.
getInstance
().
e
(
"copyFile: "
+
e
.
toString
());
result
=
false
;
}
}
}
else
{
result
=
false
;
}
return
result
;
}
/**
* 拷贝整个文件夹内容到另一个文件夹(只拷贝文件夹内的所有文件)
*
* @param oldPath String 原文件路径
* @param newPath String 复制后路径
*/
public
static
void
copyFolder
(
String
oldPath
,
String
newPath
)
{
try
{
(
new
File
(
newPath
)).
mkdirs
();
//如果文件夹不存在 则建立新文件夹
File
a
=
new
File
(
oldPath
);
String
[]
file
=
a
.
list
();
File
temp
;
for
(
String
aFile
:
file
)
{
if
(
oldPath
.
endsWith
(
File
.
separator
))
{
temp
=
new
File
(
oldPath
+
aFile
);
}
else
{
temp
=
new
File
(
oldPath
+
File
.
separator
+
aFile
);
}
if
(
temp
.
isFile
())
{
//如果是文件,直接拷贝
copyFile
(
temp
.
getAbsolutePath
(),
newPath
);
}
else
if
(
temp
.
isDirectory
())
{
//如果是子文件夹
copyFolder
(
oldPath
+
"/"
+
aFile
,
newPath
+
"/"
+
aFile
);
}
}
}
catch
(
Exception
e
)
{
LogHelper
.
getInstance
().
e
(
e
.
toString
());
e
.
printStackTrace
();
}
}
/**
* 删除单个文件
**/
public
static
boolean
delSingleFile
(
String
path
)
{
File
file
=
new
File
(
path
);
return
file
.
exists
()
&&
file
.
isFile
()
&&
file
.
delete
();
}
/**
* 修改文件/文件夹名
*
* @param path 文件路径
* @param newName 文件新的名称
*/
public
static
boolean
modifyFileName
(
String
path
,
String
newName
)
{
File
file
=
new
File
(
path
);
if
(
file
.
exists
())
{
String
newPath
=
file
.
getParentFile
().
getAbsolutePath
()
+
File
.
separator
+
newName
;
return
file
.
renameTo
(
new
File
(
newPath
));
}
return
false
;
}
/**
* 删除文件夹及其目录下所有文件
*
* @param folderPath 文件夹路径
*/
public
static
void
delFolder
(
String
folderPath
)
{
try
{
delFileBeforeTime
(
folderPath
,
0
);
//删除完里面所有内容
File
myFilePath
=
new
File
(
folderPath
);
myFilePath
.
delete
();
//删除空文件夹
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
/**
* 将URI转成绝对路径
*
* @param context 上下文对象
* @param uri URI
* @return 绝对路径
*/
public
static
String
convertUriToPath
(
Context
context
,
Uri
uri
)
{
if
(
null
==
uri
)
return
null
;
String
scheme
=
uri
.
getScheme
();
String
data
=
null
;
if
(
scheme
==
null
)
{
data
=
uri
.
getPath
();
}
else
if
(
ContentResolver
.
SCHEME_FILE
.
equals
(
scheme
))
{
data
=
uri
.
getPath
();
}
else
if
(
ContentResolver
.
SCHEME_CONTENT
.
equals
(
scheme
))
{
Cursor
cursor
=
context
.
getContentResolver
().
query
(
uri
,
new
String
[]{
MediaStore
.
Images
.
ImageColumns
.
DATA
},
null
,
null
,
null
);
if
(
null
!=
cursor
)
{
if
(
cursor
.
moveToFirst
())
{
int
index
=
cursor
.
getColumnIndex
(
MediaStore
.
Images
.
ImageColumns
.
DATA
);
if
(
index
>
-
1
)
{
data
=
cursor
.
getString
(
index
);
}
}
cursor
.
close
();
}
}
return
data
;
}
/**
* 是否是文本文件
*
* @param s 文件名
*/
public
static
boolean
isTextFile
(
String
s
)
{
s
=
s
.
toLowerCase
();
//转成小写的
return
s
.
endsWith
(
".txt"
);
}
/**
* 判断是否是图片文件
*
* @return fileName 文件名(文件路径)
*/
public
static
boolean
isImageFile
(
String
fileName
)
{
fileName
=
fileName
.
toLowerCase
();
//转成小写的
return
fileName
.
endsWith
(
".jpg"
)
||
fileName
.
endsWith
(
".jpeg"
)
||
fileName
.
endsWith
(
".png"
);
}
/**
* 判断是否是 Office 文件
*
* @return fileName 文件名(文件路径)
*/
public
static
boolean
isOfficeFile
(
String
fileName
)
{
fileName
=
fileName
.
toLowerCase
();
//转成小写的
return
fileName
.
endsWith
(
".doc"
)
||
fileName
.
endsWith
(
".ppt"
)
||
fileName
.
endsWith
(
".xls"
)
||
fileName
.
endsWith
(
".docx"
)
||
fileName
.
endsWith
(
".pptx"
)
||
fileName
.
endsWith
(
".xlsx"
);
}
/**
* 判断是否是视频文件
*
* @return fileName 文件名(文件路径)
*/
public
static
boolean
isVideoFile
(
String
fileName
)
{
fileName
=
fileName
.
toLowerCase
();
//转成小写的
return
fileName
.
endsWith
(
".mp4"
)
||
fileName
.
endsWith
(
".flv"
);
}
/**
* 获取指定文件夹的文件列表
*
* @param path 文件夹列表
*/
public
static
List
<
File
>
getFolderFile
(
String
path
)
{
List
<
File
>
list
=
new
ArrayList
<>();
File
file
=
new
File
(
path
);
if
(!
file
.
exists
())
{
//不存在则创建文件夹
file
.
mkdirs
();
}
if
(
file
.
isDirectory
())
{
File
[]
fileList
=
file
.
listFiles
();
if
(
fileList
!=
null
&&
fileList
.
length
>
0
)
{
Collections
.
addAll
(
list
,
fileList
);
}
}
return
list
;
}
/**
* 获取 sdcard 可用空间的大小
*
* @return 可用空间
*/
public
static
long
getUseableSize
()
{
File
path
=
Environment
.
getExternalStorageDirectory
();
StatFs
sf
=
new
StatFs
(
path
.
getPath
());
long
blockSize
;
long
freeBlocks
;
if
(
android
.
os
.
Build
.
VERSION
.
SDK_INT
>=
android
.
os
.
Build
.
VERSION_CODES
.
JELLY_BEAN_MR2
)
{
blockSize
=
sf
.
getBlockSizeLong
();
freeBlocks
=
sf
.
getAvailableBlocksLong
();
// return freeBlocks * blockSize; //单位Byte
// return (freeBlocks * blockSize)/1024; //单位KB
return
(
freeBlocks
*
blockSize
)
/
1024
/
1024
;
// 单位MB
}
else
{
return
-
1
;
}
}
}
utillibrary/src/main/java/com/blackhao/utillibrary/log
Util/LogUtil
.java
→
utillibrary/src/main/java/com/blackhao/utillibrary/log
/LogHelper
.java
浏览文件 @
9b2e1219
package
com.blackhao.utillibrary.log
Util
;
package
com.blackhao.utillibrary.log
;
import
android.content.Context
;
import
android.text.TextUtils
;
import
android.util.Log
;
import
com.blackhao.utillibrary.BuildConfig
;
import
com.blackhao.utillibrary.time.TimeUtil
;
import
java.io.File
;
import
java.io.FileWriter
;
/**
* Author : BlackHao
* Time : 2017/8/1 14:05
* Description : Log 工具类 ,支持跳转对应的代码位置
*/
public
class
LogUtil
{
public
class
LogHelper
{
//单例
private
static
LogUtil
logUtil
;
private
static
LogHelper
logUtil
;
//打印等级(这里用于release版本打印)
private
static
int
LOG_LEVEL
=
Log
.
ERROR
;
//打印调试开关
private
static
boolean
IS_DEBUG
=
true
;
//Log 单
词
打印的最大长度
private
static
boolean
IS_DEBUG
=
BuildConfig
.
DEBUG
;
//Log 单
次
打印的最大长度
private
static
final
int
MAX_LENGTH
=
3
*
1024
;
//是否需要写文件
private
static
final
boolean
IS_WRITE_FILE
=
true
;
//文件路径
private
static
String
LOG_FILE_PATH
;
//单例模式初始化
public
static
Log
Util
getInstance
()
{
public
static
Log
Helper
getInstance
()
{
if
(
logUtil
==
null
)
{
logUtil
=
new
Log
Util
();
logUtil
=
new
Log
Helper
();
}
return
logUtil
;
}
/**
* 初始化 LOG_FILE
*/
public
void
initLogFile
(
Context
context
)
{
if
(
context
!=
null
)
{
LOG_FILE_PATH
=
context
.
getCacheDir
().
getAbsolutePath
()
+
File
.
separator
+
"QChatLog"
;
}
}
/**
* 获取 TAG 信息:文件名以及行数
*
...
...
@@ -36,7 +60,9 @@ public class LogUtil {
}
for
(
StackTraceElement
st
:
sts
)
{
//筛选获取需要打印的TAG
if
(!
st
.
isNativeMethod
()
&&
!
st
.
getClassName
().
equals
(
Thread
.
class
.
getName
())
&&
!
st
.
getClassName
().
equals
(
this
.
getClass
().
getName
()))
{
if
(!
st
.
isNativeMethod
()
&&
!
st
.
getClassName
().
equals
(
Thread
.
class
.
getName
())
&&
!
st
.
getClassName
().
equals
(
this
.
getClass
().
getName
()))
{
//获取文件名以及打印的行数
tag
.
append
(
"("
).
append
(
st
.
getFileName
()).
append
(
":"
).
append
(
st
.
getLineNumber
()).
append
(
")"
);
return
tag
.
toString
();
...
...
@@ -51,9 +77,14 @@ public class LogUtil {
* @param text 需要打印的内容
*/
public
synchronized
void
e
(
String
text
)
{
if
(
IS_DEBUG
)
{
if
(
IS_DEBUG
||
Log
.
ERROR
>=
LOG_LEVEL
)
{
if
(
TextUtils
.
isEmpty
(
text
))
{
Log
.
e
(
getTAG
(),
"Log Error text is null"
);
return
;
}
for
(
String
str
:
splitStr
(
text
))
{
Log
.
e
(
getTAG
(),
str
);
writeLog
(
"ERROR : "
+
getTAG
()
+
" : "
+
str
);
}
}
}
...
...
@@ -64,9 +95,10 @@ public class LogUtil {
* @param text 需要打印的内容
*/
public
synchronized
void
d
(
String
text
)
{
if
(
IS_DEBUG
)
{
if
(
IS_DEBUG
||
Log
.
DEBUG
>=
LOG_LEVEL
)
{
for
(
String
str
:
splitStr
(
text
))
{
Log
.
d
(
getTAG
(),
str
);
writeLog
(
"DEBUG : "
+
getTAG
()
+
" : "
+
str
);
}
}
}
...
...
@@ -77,9 +109,10 @@ public class LogUtil {
* @param text 需要打印的内容
*/
public
synchronized
void
w
(
String
text
)
{
if
(
IS_DEBUG
)
{
if
(
IS_DEBUG
||
Log
.
WARN
>=
LOG_LEVEL
)
{
for
(
String
str
:
splitStr
(
text
))
{
Log
.
w
(
getTAG
(),
str
);
writeLog
(
"WARN : "
+
getTAG
()
+
" : "
+
str
);
}
}
}
...
...
@@ -90,9 +123,10 @@ public class LogUtil {
* @param text 需要打印的内容
*/
public
synchronized
void
i
(
String
text
)
{
if
(
IS_DEBUG
)
{
if
(
IS_DEBUG
||
Log
.
INFO
>=
LOG_LEVEL
)
{
for
(
String
str
:
splitStr
(
text
))
{
Log
.
i
(
getTAG
(),
str
);
writeLog
(
"INFO : "
+
getTAG
()
+
" : "
+
str
);
}
}
}
...
...
@@ -103,7 +137,7 @@ public class LogUtil {
* @param json 需要打印的内容
*/
public
synchronized
void
json
(
String
json
)
{
if
(
IS_DEBUG
)
{
if
(
IS_DEBUG
||
Log
.
ERROR
>=
LOG_LEVEL
)
{
String
tag
=
getTAG
();
try
{
//转化后的数据
...
...
@@ -157,7 +191,7 @@ public class LogUtil {
if
(
null
==
jsonStr
||
""
.
equals
(
jsonStr
))
return
""
;
StringBuilder
sb
=
new
StringBuilder
();
char
last
=
'\0'
;
char
last
;
char
current
=
'\0'
;
int
indent
=
0
;
boolean
isInQuotationMarks
=
false
;
...
...
@@ -217,4 +251,32 @@ public class LogUtil {
sb
.
append
(
'\t'
);
}
}
}
/**
* 将 log 写入文件
*
* @param log 需要写入文件的 log
*/
private
void
writeLog
(
String
log
)
{
try
{
if
(!
IS_WRITE_FILE
)
{
return
;
}
if
(
LOG_FILE_PATH
!=
null
&&
LOG_FILE_PATH
.
length
()
>
0
)
{
File
folder
=
new
File
(
LOG_FILE_PATH
);
if
(
folder
.
exists
()
||
folder
.
mkdirs
())
{
//文件夹存在或者创建文件夹成功
String
file
=
LOG_FILE_PATH
+
File
.
separator
+
TimeUtil
.
getCurrentTime
(
"yyyy-MM-dd"
)
+
".txt"
;
File
logFile
=
new
File
(
file
);
if
(
logFile
.
exists
()
||
logFile
.
createNewFile
())
{
FileWriter
writer
=
new
FileWriter
(
logFile
,
true
);
writer
.
write
(
log
+
"\n"
);
writer
.
close
();
}
}
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
}
\ No newline at end of file
utillibrary/src/main/java/com/blackhao/utillibrary/mvp/BaseActivity.java
0 → 100644
浏览文件 @
9b2e1219
package
com.blackhao.utillibrary.mvp
;
/**
* Author : BlackHao
* Time : 2019/4/8 09:11
* Description : 空白的 activity,主要用于不使用 MVP 模式的情况
*/
public
abstract
class
BaseActivity
extends
BaseMvpActivity
<
BlankContract
.
PresenterImpl
>
implements
BlankContract
.
ViewImpl
{
@Override
public
int
getStatusMode
()
{
return
TRANSLUCENT_STATUS
;
}
@Override
protected
BlankContract
.
PresenterImpl
initPresenter
()
{
return
null
;
}
}
utillibrary/src/main/java/com/blackhao/utillibrary/mvp/BaseFragment.java
0 → 100644
浏览文件 @
9b2e1219
package
com.blackhao.utillibrary.mvp
;
import
android.view.View
;
/**
* Author : BlackHao
* Time : 2019/4/8 09:11
* Description : 空白的 Fragment,主要用于不使用 MVP 模式的情况
*/
public
abstract
class
BaseFragment
extends
BaseMvpFragment
<
BlankContract
.
PresenterImpl
>
implements
BlankContract
.
ViewImpl
,
View
.
OnClickListener
{
@Override
protected
BlankContract
.
PresenterImpl
initPresenter
()
{
return
null
;
}
}
utillibrary/src/main/java/com/blackhao/utillibrary/mvp/BaseMvpActivity.java
浏览文件 @
9b2e1219
...
...
@@ -17,7 +17,7 @@ import android.view.View;
import
android.widget.Toast
;
import
com.blackhao.utillibrary.base.LoadingDialog
;
import
com.blackhao.utillibrary.log
Util.LogUtil
;
import
com.blackhao.utillibrary.log
.LogHelper
;
import
java.lang.ref.WeakReference
;
...
...
@@ -27,14 +27,15 @@ import java.lang.ref.WeakReference;
* Description : Base MVP Activity
*/
public
abstract
class
BaseMvpActivity
<
T
extends
BaseMvpPresenterImpl
>
extends
AppCompatActivity
implements
BaseMvpViewImpl
{
public
abstract
class
BaseMvpActivity
<
T
extends
BaseMvpPresenterImpl
>
extends
AppCompatActivity
implements
BaseMvpViewImpl
{
//Handler
public
WeakHandler
handler
;
//用于保存对应 FrameLayout当前显示的 Fragment
private
SparseArray
<
Fragment
>
fragmentArray
;
//Log
Util
public
Log
Util
log
;
//Log
Helper
public
Log
Helper
log
;
//加载框
private
LoadingDialog
loadingDialog
;
// Presenter
...
...
@@ -62,7 +63,7 @@ public abstract class BaseMvpActivity<T extends BaseMvpPresenterImpl> extends Ap
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
//初始化Log
log
=
Log
Util
.
getInstance
();
log
=
Log
Helper
.
getInstance
();
//初始化fragmentArray
fragmentArray
=
new
SparseArray
<>();
//
...
...
utillibrary/src/main/java/com/blackhao/utillibrary/mvp/BaseMvpFragment.java
浏览文件 @
9b2e1219
...
...
@@ -12,7 +12,7 @@ import android.view.LayoutInflater;
import
android.view.View
;
import
android.view.ViewGroup
;
import
com.blackhao.utillibrary.log
Util.LogUtil
;
import
com.blackhao.utillibrary.log
.LogHelper
;
/**
* Author : BlackHao
...
...
@@ -24,11 +24,10 @@ public abstract class BaseMvpFragment<T extends BaseMvpPresenterImpl> extends Fr
//用于保存对应 FrameLayout当前显示的 Fragment
private
SparseArray
<
Fragment
>
fragmentArray
;
//Log
Util
public
Log
Util
log
;
//Log
Helper
public
Log
Helper
log
;
// Presenter
private
T
mPresenter
;
//Activity
private
T
mPresenter
;
//Activity
private
BaseMvpActivity
activity
;
@Override
...
...
utillibrary/src/main/java/com/blackhao/utillibrary/mvp/BlankContract.java
0 → 100644
浏览文件 @
9b2e1219
package
com.blackhao.utillibrary.mvp
;
/**
* Author : BlackHao
* Time : 2018/12/20 10:16
* Description : 空白 ViewImpl,PresenterImpl。
*/
public
class
BlankContract
{
public
interface
ViewImpl
extends
BaseMvpViewImpl
{
}
public
interface
PresenterImpl
extends
BaseMvpPresenterImpl
{
}
}
utillibrary/src/main/java/com/blackhao/utillibrary/time/TimeUtil.java
0 → 100644
浏览文件 @
9b2e1219
package
com.blackhao.utillibrary.time
;
import
android.text.format.Time
;
import
android.util.Log
;
import
java.io.IOException
;
import
java.net.URL
;
import
java.net.URLConnection
;
import
java.text.ParseException
;
import
java.text.SimpleDateFormat
;
import
java.util.Calendar
;
import
java.util.Date
;
import
java.util.GregorianCalendar
;
import
java.util.Locale
;
/**
* Author : BlackHao
* Time : 2016/8/13 14:05
* Description : 时间类型转换工具类
*/
public
class
TimeUtil
{
/**
* 默认的时间 String 模式
*/
private
static
final
String
DEFAULT_PATTERN
=
"yyyy-MM-dd HH:mm:ss"
;
/**
* 获取当前时间,并返回 String类型的数据
*
* @return 当前时间
*/
public
static
String
getCurrentTime
()
{
return
getCurrentTime
(
DEFAULT_PATTERN
);
}
/**
* 获取当前时间,并返回 String类型的数据
*
* @return 当前时间
*/
public
static
String
getCurrentTime
(
String
pattern
)
{
String
currentTime
;
Date
curDate
=
new
Date
(
System
.
currentTimeMillis
());
//获取当前时间
SimpleDateFormat
formatter
;
formatter
=
new
SimpleDateFormat
(
pattern
,
Locale
.
CHINA
);
currentTime
=
formatter
.
format
(
curDate
);
return
currentTime
;
}
/**
* 通过传入的 Date类型时间,并返回String类型的数据
*/
public
static
String
formatDateToString
(
Date
curDate
,
String
pattern
)
{
String
time
;
SimpleDateFormat
formatter
;
formatter
=
new
SimpleDateFormat
(
pattern
,
Locale
.
CHINA
);
time
=
formatter
.
format
(
curDate
);
return
time
;
}
/**
* 通过传入的 Date类型时间,并返回 String类型的数据
*/
public
static
String
formatDateToString
(
Date
curDate
)
{
return
formatDateToString
(
curDate
,
DEFAULT_PATTERN
);
}
/**
* 根据毫秒数返回年月日时分秒
*/
public
static
int
[]
formatMsecToTimeInfo
(
long
msec
)
{
int
[]
dates
=
new
int
[
6
];
Time
t
=
new
Time
();
t
.
set
(
msec
);
dates
[
0
]
=
t
.
year
;
dates
[
1
]
=
t
.
month
+
1
;
dates
[
2
]
=
t
.
monthDay
;
dates
[
3
]
=
t
.
hour
;
dates
[
4
]
=
t
.
minute
;
dates
[
5
]
=
t
.
second
;
return
dates
;
}
/**
* 通过枚举来返回当前的 int类型的时间类型(年,月,日,时,分,秒,周几)
*/
public
static
int
getTimeType
(
long
msec
,
TimeType
type
)
{
int
time
=
0
;
Time
t
=
new
Time
();
t
.
set
(
msec
);
// 取得当前系统时间
switch
(
type
)
{
case
YEAR:
time
=
t
.
year
;
break
;
case
MONTH:
time
=
t
.
month
;
break
;
case
DAY:
time
=
t
.
monthDay
;
break
;
case
HOUR:
time
=
t
.
hour
;
break
;
case
MINUTE:
time
=
t
.
minute
;
break
;
case
SECOND:
time
=
t
.
second
;
break
;
case
WEEKDAY:
time
=
t
.
weekDay
;
break
;
}
return
time
;
}
public
enum
TimeType
{
YEAR
,
MONTH
,
DAY
,
HOUR
,
MINUTE
,
SECOND
,
WEEKDAY
}
/**
* 将 String("yyyy-MM-dd HH:mm:ss")转换成 Date
*/
public
static
Date
formatStrToDate
(
String
str
)
{
return
formatStrToDate
(
str
,
DEFAULT_PATTERN
);
}
/**
* 将 String转换成 Date
*/
public
static
Date
formatStrToDate
(
String
str
,
String
pattern
)
{
Date
date
;
try
{
SimpleDateFormat
formatter
=
new
SimpleDateFormat
(
pattern
,
Locale
.
CHINA
);
date
=
formatter
.
parse
(
str
);
return
date
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
null
;
}
/**
* 将毫秒转化成固定格式的时间
*/
public
static
String
formatMsecToString
(
long
msec
)
{
return
formatMsecToString
(
msec
,
DEFAULT_PATTERN
);
}
/**
* 将毫秒转化成固定格式的时间
*/
public
static
String
formatMsecToString
(
long
msec
,
String
pattern
)
{
Date
date
=
new
Date
();
try
{
date
.
setTime
(
msec
);
}
catch
(
NumberFormatException
nfe
)
{
nfe
.
printStackTrace
();
}
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
pattern
,
Locale
.
CHINA
);
return
sdf
.
format
(
date
);
}
/**
* 将字符串转化成毫秒
*/
public
static
long
formatStringToMsec
(
String
str
,
String
pattern
)
{
Calendar
c
=
Calendar
.
getInstance
();
try
{
c
.
setTime
(
new
SimpleDateFormat
(
pattern
,
Locale
.
CHINA
).
parse
(
str
));
return
c
.
getTimeInMillis
();
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
}
return
0
;
}
/**
* 将字符串转化成毫秒
*/
public
static
long
formatStringToMsec
(
String
str
)
{
return
formatStringToMsec
(
str
,
DEFAULT_PATTERN
);
}
/**
* 毫秒转成 时:分:秒
*/
public
static
String
formatMsec
(
long
ms
)
{
int
ss
=
1000
;
int
mi
=
ss
*
60
;
int
hh
=
mi
*
60
;
long
hour
=
ms
/
hh
;
long
minute
=
(
ms
-
hour
*
hh
)
/
mi
;
long
second
=
(
ms
-
hour
*
hh
-
minute
*
mi
)
/
ss
;
String
strHour
=
hour
<
10
?
"0"
+
hour
:
""
+
hour
;
//小时
String
strMinute
=
minute
<
10
?
"0"
+
minute
:
""
+
minute
;
//分钟
String
strSecond
=
second
<
10
?
"0"
+
second
:
""
+
second
;
//秒
return
strHour
+
":"
+
strMinute
+
":"
+
strSecond
;
}
/**
* 判断日期是否在两个指定日期之内
*
* @param targetDate 需要判断的日期
* @param startDate 开始日期
* @param endDate 结束日期
* @param pattern 时间模式
*/
public
static
boolean
isBetweenTwoDays
(
String
targetDate
,
String
startDate
,
String
endDate
,
String
pattern
)
{
SimpleDateFormat
df
=
new
SimpleDateFormat
(
pattern
,
Locale
.
CHINA
);
try
{
Date
dt1
=
df
.
parse
(
startDate
);
Date
dt2
=
df
.
parse
(
endDate
);
Date
target
=
df
.
parse
(
targetDate
);
return
dt1
.
getTime
()
<=
target
.
getTime
()
&&
dt2
.
getTime
()
>=
target
.
getTime
();
}
catch
(
Exception
exception
)
{
exception
.
printStackTrace
();
}
return
false
;
}
/**
* 判断日期是否在两个指定日期之内
*
* @param targetDate 需要判断的日期
* @param startDate 开始日期
* @param endDate 结束日期
*/
public
static
boolean
isBetweenTwoDays
(
String
targetDate
,
String
startDate
,
String
endDate
)
{
return
isBetweenTwoDays
(
targetDate
,
startDate
,
endDate
,
DEFAULT_PATTERN
);
}
/**
* 获取指定网站的日期时间(必须在子线程调用),用于获取网络时间
*/
public
static
long
getWebsiteTime
()
{
try
{
String
webUrl
[]
=
{
"http://www.bjtime.cn"
,
//bjTime
"http://www.baidu.com"
,
//百度
"http://www.taobao.com"
,
//淘宝
"http://www.ntsc.ac.cn"
,
//中国科学院国家授时中心
"http://www.time.ac.cn/"
};
for
(
String
aWebUrl
:
webUrl
)
{
URL
url
=
new
URL
(
aWebUrl
);
// 取得资源对象
URLConnection
uc
=
url
.
openConnection
();
// 生成连接对象
uc
.
setConnectTimeout
(
5
*
1000
);
uc
.
connect
();
// 发出连接
// 读取网站日期时间
if
(
uc
.
getDate
()
>
formatStringToMsec
(
"2016-01-01 00:00:00"
))
{
//只有网络时间大于2016/1/1才表示时间正常
return
uc
.
getDate
();
}
}
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
return
-
1
;
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录