Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
门心叼龙
MVPArms
提交
6d9193b2
M
MVPArms
项目概览
门心叼龙
/
MVPArms
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
MVPArms
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
6d9193b2
编写于
4月 10, 2017
作者:
J
jessyan
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
improve RequestInterceptor
上级
ea698bbf
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
64 addition
and
49 deletion
+64
-49
app/build.gradle
app/build.gradle
+2
-2
app/src/main/java/common/WEApplication.java
app/src/main/java/common/WEApplication.java
+3
-3
arms/src/main/java/com/jess/arms/di/module/ClientModule.java
arms/src/main/java/com/jess/arms/di/module/ClientModule.java
+6
-8
arms/src/main/java/com/jess/arms/di/module/GlobeConfigModule.java
.../main/java/com/jess/arms/di/module/GlobeConfigModule.java
+1
-2
arms/src/main/java/com/jess/arms/http/RequestInterceptor.java
.../src/main/java/com/jess/arms/http/RequestInterceptor.java
+52
-34
未找到文件。
app/build.gradle
浏览文件 @
6d9193b2
...
...
@@ -61,8 +61,8 @@ dependencies {
annotationProcessor
rootProject
.
ext
.
dependencies
[
"butterknife-compiler"
]
compile
rootProject
.
ext
.
dependencies
[
"paginate"
]
//arms
//
compile project(':arms')
compile
'me.jessyan:arms:1.2.5'
compile
project
(
':arms'
)
//
compile 'me.jessyan:arms:1.2.5'
//test
testCompile
rootProject
.
ext
.
dependencies
[
"junit"
]
debugCompile
rootProject
.
ext
.
dependencies
[
"canary-debug"
]
...
...
app/src/main/java/common/WEApplication.java
浏览文件 @
6d9193b2
...
...
@@ -112,7 +112,7 @@ public class WEApplication extends BaseApplication {
JSONObject
object
=
(
JSONObject
)
array
.
get
(
0
);
String
login
=
object
.
getString
(
"login"
);
String
avatar_url
=
object
.
getString
(
"avatar_url"
);
Timber
.
tag
(
TAG
).
w
(
"
result ------>"
+
login
+
" || avatar_url------>
"
+
avatar_url
);
Timber
.
tag
(
TAG
).
w
(
"
Result ------> "
+
login
+
" || Avatar_url------>
"
+
avatar_url
);
}
}
catch
(
JSONException
e
)
{
...
...
@@ -135,10 +135,10 @@ public class WEApplication extends BaseApplication {
return
response
;
}
// 这里可以在请求服务器之前可以拿到request,做一些操作比如给request统一添加token或者header
// 这里可以在请求服务器之前可以拿到request,做一些操作比如给request统一添加token或者header
以及数据加密等操作
@Override
public
Request
onHttpRequestBefore
(
Interceptor
.
Chain
chain
,
Request
request
)
{
//如果需要再请求服务器之前做一些操作,则重新返回一个做过操作的的requeat如增加header,不做操作则
返回request
//如果需要再请求服务器之前做一些操作,则重新返回一个做过操作的的requeat如增加header,不做操作则
直接返回request参数
//return chain.request().newBuilder().header("token", tokenId)
// .build();
...
...
arms/src/main/java/com/jess/arms/di/module/ClientModule.java
浏览文件 @
6d9193b2
...
...
@@ -3,7 +3,8 @@ package com.jess.arms.di.module;
import
android.app.Application
;
import
com.jess.arms.base.AppManager
;
import
com.jess.arms.http.RequestIntercept
;
import
com.jess.arms.http.GlobeHttpHandler
;
import
com.jess.arms.http.RequestInterceptor
;
import
com.jess.arms.utils.DataHelper
;
import
java.io.File
;
...
...
@@ -68,15 +69,14 @@ public class ClientModule {
@Singleton
@Provides
OkHttpClient
provideClient
(
OkHttpClient
.
Builder
okHttpClient
,
Interceptor
intercept
,
List
<
Interceptor
>
interceptors
)
{
,
List
<
Interceptor
>
interceptors
,
GlobeHttpHandler
handler
)
{
OkHttpClient
.
Builder
builder
=
okHttpClient
.
connectTimeout
(
TIME_OUT
,
TimeUnit
.
SECONDS
)
.
readTimeout
(
TIME_OUT
,
TimeUnit
.
SECONDS
)
.
addInterceptor
(
chain
->
chain
.
proceed
(
handler
.
onHttpRequestBefore
(
chain
,
chain
.
request
())))
.
addNetworkInterceptor
(
intercept
);
if
(
interceptors
!=
null
&&
interceptors
.
size
()
>
0
)
{
//如果外部提供了interceptor的数组则遍历添加
for
(
Interceptor
interceptor
:
interceptors
)
{
builder
.
addInterceptor
(
interceptor
);
}
interceptors
.
forEach
(
builder:
:
addInterceptor
);
}
return
builder
.
build
();
...
...
@@ -97,11 +97,9 @@ public class ClientModule {
}
@Singleton
@Provides
Interceptor
provideIntercept
(
RequestIntercept
intercept
)
{
Interceptor
provideIntercept
or
(
RequestInterceptor
intercept
)
{
return
intercept
;
//打印请求信息的拦截器
}
...
...
arms/src/main/java/com/jess/arms/di/module/GlobeConfigModule.java
浏览文件 @
6d9193b2
...
...
@@ -71,9 +71,8 @@ public class GlobeConfigModule {
/**
* 提供缓存
地址
* 提供缓存
文件
*/
@Singleton
@Provides
File
provideCacheFile
(
Application
application
)
{
...
...
arms/src/main/java/com/jess/arms/http/RequestIntercept.java
→
arms/src/main/java/com/jess/arms/http/RequestIntercept
or
.java
浏览文件 @
6d9193b2
...
...
@@ -2,6 +2,7 @@ package com.jess.arms.http;
import
android.support.annotation.NonNull
;
import
com.jess.arms.utils.CharactorHandler
;
import
com.jess.arms.utils.ZipHelper
;
import
java.io.IOException
;
...
...
@@ -22,18 +23,16 @@ import okio.Buffer;
import
okio.BufferedSource
;
import
timber.log.Timber
;
import
static
com
.
jess
.
arms
.
utils
.
CharactorHandler
.
jsonFormat
;
/**
* Created by jess on 7/1/16.
*/
@Singleton
public
class
RequestIntercept
implements
Interceptor
{
public
class
RequestIntercept
or
implements
Interceptor
{
private
GlobeHttpHandler
mHandler
;
@Inject
public
RequestIntercept
(
GlobeHttpHandler
handler
)
{
public
RequestIntercept
or
(
GlobeHttpHandler
handler
)
{
this
.
mHandler
=
handler
;
}
...
...
@@ -41,21 +40,14 @@ public class RequestIntercept implements Interceptor {
public
Response
intercept
(
Chain
chain
)
throws
IOException
{
Request
request
=
chain
.
request
();
if
(
mHandler
!=
null
)
//在请求服务器之前可以拿到request,做一些操作比如给request添加header,如果不做操作则返回参数中的request
request
=
mHandler
.
onHttpRequestBefore
(
chain
,
request
);
Buffer
requestbuffer
=
new
Buffer
();
if
(
request
.
body
()
!=
null
)
{
request
.
body
().
writeTo
(
requestbuffer
);
}
else
{
Timber
.
tag
(
"Request"
).
w
(
"request.body() == null"
);
}
//打印url信息
Timber
.
tag
(
"Request"
).
w
(
"Sending Request %s on %n Params ---> %s%n Connection ---> %s%n Headers ---> %s"
,
request
.
url
()
Timber
.
tag
(
getTag
(
request
,
"Request_Info"
)).
w
(
"Params : 「 %s 」%nConnection : 「 %s 」%nHeaders : %n「 %s 」"
,
request
.
body
()
!=
null
?
parseParams
(
request
.
body
(),
requestbuffer
)
:
"null"
,
chain
.
connection
()
,
request
.
headers
());
...
...
@@ -64,43 +56,66 @@ public class RequestIntercept implements Interceptor {
Response
originalResponse
=
chain
.
proceed
(
request
);
long
t2
=
System
.
nanoTime
();
//打印响应时间
Timber
.
tag
(
"Response"
).
w
(
"Received response in %.1fms
%n%s"
,
(
t2
-
t1
)
/
1
e6d
,
originalResponse
.
headers
());
Timber
.
tag
(
getTag
(
request
,
"Response_Info"
)).
w
(
"Received response in [ %.1fms ]
%n%s"
,
(
t2
-
t1
)
/
1
e6d
,
originalResponse
.
headers
());
//读取服务器返回的结果
ResponseBody
responseBody
=
originalResponse
.
body
();
BufferedSource
source
=
responseBody
.
source
();
source
.
request
(
Long
.
MAX_VALUE
);
// Buffer the entire body.
Buffer
buffer
=
source
.
buffer
();
String
bodyString
=
null
;
if
(
isJson
(
responseBody
))
{
BufferedSource
source
=
responseBody
.
source
();
source
.
request
(
Long
.
MAX_VALUE
);
// Buffer the entire body.
Buffer
buffer
=
source
.
buffer
();
//获取content的压缩类型
String
encoding
=
originalResponse
.
headers
()
.
get
(
"Content-Encoding"
);
Buffer
clone
=
buffer
.
clone
();
//获取content的压缩类型
String
encoding
=
originalResponse
.
headers
()
.
get
(
"Content-Encoding"
);
//解析response content
bodyString
=
parseContent
(
responseBody
,
encoding
,
clone
);
Buffer
clone
=
buffer
.
clone
();
String
bodyString
;
Timber
.
tag
(
getTag
(
request
,
"Response_Result"
)).
w
(
CharactorHandler
.
jsonFormat
(
bodyString
));
//解析response content
}
else
{
Timber
.
tag
(
getTag
(
request
,
"Response_Result"
)).
w
(
"The result isn't json"
);
}
if
(
mHandler
!=
null
)
//这里可以比客户端提前一步拿到服务器返回的结果,可以做一些操作,比如token超时,重新获取
return
mHandler
.
onHttpResultResponse
(
bodyString
,
chain
,
originalResponse
);
return
originalResponse
;
}
public
String
getTag
(
Request
request
,
String
tag
)
{
return
"「 "
+
request
.
url
()
+
" 」"
+
tag
;
}
/**
* 解析服务器响应的内容
*
* @param responseBody
* @param encoding
* @param clone
* @return
*/
private
String
parseContent
(
ResponseBody
responseBody
,
String
encoding
,
Buffer
clone
)
{
if
(
encoding
!=
null
&&
encoding
.
equalsIgnoreCase
(
"gzip"
))
{
//content使用gzip压缩
bodyString
=
ZipHelper
.
decompressForGzip
(
clone
.
readByteArray
());
//解压
return
ZipHelper
.
decompressForGzip
(
clone
.
readByteArray
());
//解压
}
else
if
(
encoding
!=
null
&&
encoding
.
equalsIgnoreCase
(
"zlib"
))
{
//content使用zlib压缩
bodyString
=
ZipHelper
.
decompressToStringForZlib
(
clone
.
readByteArray
());
//解压
return
ZipHelper
.
decompressToStringForZlib
(
clone
.
readByteArray
());
//解压
}
else
{
//content没有被压缩
Charset
charset
=
Charset
.
forName
(
"UTF-8"
);
MediaType
contentType
=
responseBody
.
contentType
();
if
(
contentType
!=
null
)
{
charset
=
contentType
.
charset
(
charset
);
}
bodyString
=
clone
.
readString
(
charset
);
return
clone
.
readString
(
charset
);
}
Timber
.
tag
(
"Result"
).
w
(
jsonFormat
(
bodyString
));
if
(
mHandler
!=
null
)
//这里可以比客户端提前一步拿到服务器返回的结果,可以做一些操作,比如token超时,重新获取
return
mHandler
.
onHttpResultResponse
(
bodyString
,
chain
,
originalResponse
);
return
originalResponse
;
}
@NonNull
...
...
@@ -111,4 +126,7 @@ public class RequestIntercept implements Interceptor {
return
"null"
;
}
public
boolean
isJson
(
ResponseBody
responseBody
)
{
return
responseBody
.
contentType
().
toString
().
contains
(
"json"
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录