diff --git a/.idea/misc.xml b/.idea/misc.xml
index c6cc801ef..c0611141a 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -4,5 +4,5 @@
-
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
index 77573d110..880d5eb4a 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -2,8 +2,10 @@
+
+
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index cbaeaa394..afad1e9f2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,8 @@
#Changelog
+## 8.0.5 (2020-11-18)
+* 缩短Host全局冻结默认时间
+* 优化无可用Host的处理逻辑
+
## 8.0.4 (2020-11-03)
* 优化Host冻结逻辑带来客户端上传超时问题,提高上传成功率
diff --git a/README.md b/README.md
index 5dfba44da..42aca0ba5 100644
--- a/README.md
+++ b/README.md
@@ -27,7 +27,7 @@ https://github.com/qiniudemo/qiniu-lab-android
| 7.0.7 | Android 2.2+ | android-async-http 1.4.8 |
### 注意
-* 推荐使用最新版:8.0.4
+* 推荐使用最新版:8.0.5
* AndroidNetwork.getMobileDbm()可以获取手机信号强度,需要如下权限(API>=18时生效)
```
diff --git a/library/build.gradle b/library/build.gradle
index 823e084c5..4be9ddc90 100755
--- a/library/build.gradle
+++ b/library/build.gradle
@@ -49,6 +49,7 @@ android {
useLibrary 'android.test.mock'
}
+
dependencies {
implementation 'com.squareup.okhttp3:okhttp:4.2.2'
implementation 'com.qiniu:happy-dns:0.2.16'
diff --git a/library/library.iml b/library/library.iml
new file mode 100644
index 000000000..0691bbdcd
--- /dev/null
+++ b/library/library.iml
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ generateDebugSources
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/library/src/androidTest/java/com/qiniu/android/ConcurrentResumeUploadTest.java b/library/src/androidTest/java/com/qiniu/android/ConcurrentResumeUploadTest.java
index 45aa22648..963b1b05c 100644
--- a/library/src/androidTest/java/com/qiniu/android/ConcurrentResumeUploadTest.java
+++ b/library/src/androidTest/java/com/qiniu/android/ConcurrentResumeUploadTest.java
@@ -96,7 +96,7 @@ private void template(int size) throws Throwable {
final UploadOptions options = getUploadOptions();
AsyncRun.runInMain(new Runnable() { // THIS IS THE KEY TO SUCCESS
public void run() {
- uploadManager.put(f, expectKey, TestConfig.token_z0, new UpCompletionHandler() {
+ uploadManager.put(f, expectKey, TestConfig.token_na0, new UpCompletionHandler() {
public void complete(String k, ResponseInfo rinfo, JSONObject response) {
LogUtil.i(k + rinfo);
key = k;
@@ -130,14 +130,14 @@ private void template2(int size) throws Throwable {
final String expectKey = "android-resume-test2-" + size + "k";
final File f = TempFile.createFile(size);
- String[] s = new String[]{"up.qbox.me", "upload.qiniup.com"};
+ String[] s = new String[]{"upload-na0.qbox.me", "up-na0.qbox.me"};
Zone z = new FixedZone(s);
Configuration c = new Configuration.Builder()
.zone(z).useConcurrentResumeUpload(true).useHttps(true)
.build();
UploadManager uploadManager2 = new UploadManager(c);
final UploadOptions options = getUploadOptions();
- uploadManager2.put(f, expectKey, TestConfig.token_z0, new UpCompletionHandler() {
+ uploadManager2.put(f, expectKey, TestConfig.token_na0, new UpCompletionHandler() {
public void complete(String k, ResponseInfo rinfo, JSONObject response) {
LogUtil.i(k + rinfo);
key = k;
diff --git a/library/src/androidTest/java/com/qiniu/android/ResumeUploadTest.java b/library/src/androidTest/java/com/qiniu/android/ResumeUploadTest.java
index 7510cc1db..aa0fdcbee 100644
--- a/library/src/androidTest/java/com/qiniu/android/ResumeUploadTest.java
+++ b/library/src/androidTest/java/com/qiniu/android/ResumeUploadTest.java
@@ -88,7 +88,7 @@ private void template(int size, boolean useHttps) throws Throwable {
final String expectKey = "android-resume-test2-" + size + "k";
final File f = TempFile.createFile(size);
- String[] s = new String[]{"up-na0.qbox.me"};
+ String[] s = new String[]{"up-na0.qbox.me", "upload-na0.qbox.me"};
Zone z = new FixedZone(s);
Configuration.Builder builder = new Configuration.Builder()
diff --git a/library/src/androidTest/java/com/qiniu/android/RetryTest.java b/library/src/androidTest/java/com/qiniu/android/RetryTest.java
index d161278ae..feb6de651 100644
--- a/library/src/androidTest/java/com/qiniu/android/RetryTest.java
+++ b/library/src/androidTest/java/com/qiniu/android/RetryTest.java
@@ -145,7 +145,7 @@ private void template(int size, boolean hasValidHost, final CompleteHandler comp
"uptemp09.qbox.me", "uptemp10.qbox.me",
"uptemp11.qbox.me", "uptemp12.qbox.me",
"uptemp13.qbox.me", "uptemp14.qbox.me",
- "upload.qiniup.com"};
+ "upload-na0.qbox.me", "up-na0.qbox.me"};
} else {
s = new String[]{"uptemp01.qbox.me", "uptemp02.qbox.me",
"uptemp03.qbox.me", "uptemp04.qbox.me",
@@ -167,7 +167,7 @@ public void progress(String key, double percent) {
LogUtil.i(("progress:" + percent));
}
}, null);
- uploadManager.put(f, expectKey, TestConfig.token_z0, new UpCompletionHandler() {
+ uploadManager.put(f, expectKey, TestConfig.token_na0, new UpCompletionHandler() {
public void complete(String k, ResponseInfo rinfo, JSONObject response) {
diff --git a/library/src/androidTest/java/com/qiniu/android/TokenTest.java b/library/src/androidTest/java/com/qiniu/android/TokenTest.java
index e35fe096f..7382773cd 100644
--- a/library/src/androidTest/java/com/qiniu/android/TokenTest.java
+++ b/library/src/androidTest/java/com/qiniu/android/TokenTest.java
@@ -1,11 +1,8 @@
package com.qiniu.android;
import android.test.AndroidTestCase;
-
import com.qiniu.android.storage.UpToken;
-import junit.framework.Assert;
-
/**
* Created by bailong on 15/6/1.
*/
diff --git a/library/src/androidTest/java/com/qiniu/android/UploadDomainRegionTest.java b/library/src/androidTest/java/com/qiniu/android/UploadDomainRegionTest.java
new file mode 100644
index 000000000..2cb18cb03
--- /dev/null
+++ b/library/src/androidTest/java/com/qiniu/android/UploadDomainRegionTest.java
@@ -0,0 +1,28 @@
+package com.qiniu.android;
+
+import com.qiniu.android.common.FixedZone;
+import com.qiniu.android.http.request.IUploadServer;
+import com.qiniu.android.http.serverRegion.UploadDomainRegion;
+import com.qiniu.android.http.serverRegion.UploadServerFreezeManager;
+import com.qiniu.android.utils.Utils;
+
+public class UploadDomainRegionTest extends BaseTest {
+
+
+ public void testGetOneServer(){
+
+ String host = "baidu.com";
+ String type = Utils.getIpType(null, host);
+ FixedZone zone = new FixedZone(new String[]{host});
+
+ UploadDomainRegion region = new UploadDomainRegion();
+ region.setupRegionData(zone.getZonesInfo(null).zonesInfo.get(0));
+
+ UploadServerFreezeManager.getInstance().freezeHost(host, type, 100);
+
+ IUploadServer server = region.getNextServer(false, null, null);
+
+ assertNotNull(server);
+ }
+
+}
diff --git a/library/src/androidTest/java/com/qiniu/android/UploadServerFreezeManagerTest.java b/library/src/androidTest/java/com/qiniu/android/UploadServerFreezeManagerTest.java
new file mode 100644
index 000000000..1500fa8dc
--- /dev/null
+++ b/library/src/androidTest/java/com/qiniu/android/UploadServerFreezeManagerTest.java
@@ -0,0 +1,31 @@
+package com.qiniu.android;
+
+import com.qiniu.android.http.serverRegion.UploadServerFreezeManager;
+
+public class UploadServerFreezeManagerTest extends BaseTest {
+
+ public void testFreeze() {
+
+ String host = "baidu.com";
+ String type = host;
+ UploadServerFreezeManager.getInstance().freezeHost(host, type, 10);
+
+ boolean isFrozen = UploadServerFreezeManager.getInstance().isFreezeHost(host, type);
+ assertTrue(isFrozen);
+ }
+
+ public void testUnfreeze() {
+
+ String host = "baidu.com";
+ String type = host;
+ UploadServerFreezeManager.getInstance().freezeHost(host, type, 10);
+
+ boolean isFrozen = UploadServerFreezeManager.getInstance().isFreezeHost(host, type);
+ assertTrue(isFrozen);
+
+ UploadServerFreezeManager.getInstance().unfreezeHost(host, type);
+ isFrozen = UploadServerFreezeManager.getInstance().isFreezeHost(host, type);
+ assertTrue(isFrozen == false);
+
+ }
+}
diff --git a/library/src/main/java/com/qiniu/android/common/Constants.java b/library/src/main/java/com/qiniu/android/common/Constants.java
index 5d81363c5..7efa314be 100644
--- a/library/src/main/java/com/qiniu/android/common/Constants.java
+++ b/library/src/main/java/com/qiniu/android/common/Constants.java
@@ -2,7 +2,7 @@
public final class Constants {
- public static final String VERSION = "8.0.4";
+ public static final String VERSION = "8.0.5";
public static final String UTF_8 = "utf-8";
}
diff --git a/library/src/main/java/com/qiniu/android/http/ResponseInfo.java b/library/src/main/java/com/qiniu/android/http/ResponseInfo.java
index bc70e7ed8..8969e1ee4 100644
--- a/library/src/main/java/com/qiniu/android/http/ResponseInfo.java
+++ b/library/src/main/java/com/qiniu/android/http/ResponseInfo.java
@@ -17,14 +17,17 @@ public final class ResponseInfo {
@Deprecated
public static final int ResquestSuccess = 200;
public static final int RequestSuccess = 200;
+
+ public static final int UnexpectedSysCallError = -10;
+ public static final int NoUsableHostError = -9;
+ public static final int MaliciousResponseError = -8;
+ public static final int LocalIOError = -7;
public static final int ZeroSizeFile = -6;
public static final int InvalidToken = -5;
public static final int InvalidArgument = -4;
public static final int InvalidFile = -3;
public static final int Cancelled = -2;
public static final int NetworkError = -1;
- public static final int LocalIOError = -7;
- public static final int MaliciousResponseError = -8;
public static final int Crc32NotMatch = -406;
@@ -151,6 +154,18 @@ public static ResponseInfo localIOError(String desc) {
return errorInfo(LocalIOError, desc);
}
+ public static ResponseInfo maliciousResponseError(String desc) {
+ return errorInfo(MaliciousResponseError, desc);
+ }
+
+ public static ResponseInfo noUsableHostError(String desc) {
+ return errorInfo(NoUsableHostError, desc);
+ }
+
+ public static ResponseInfo unexpectedSysCallError(String desc) {
+ return errorInfo(UnexpectedSysCallError, desc);
+ }
+
public static ResponseInfo errorInfo(int statusCode, String error) {
ResponseInfo responseInfo = new ResponseInfo(null, null, statusCode, null, null, null, null, error);
return responseInfo;
diff --git a/library/src/main/java/com/qiniu/android/http/metrics/UploadRegionRequestMetrics.java b/library/src/main/java/com/qiniu/android/http/metrics/UploadRegionRequestMetrics.java
index 5aa583040..97500815c 100644
--- a/library/src/main/java/com/qiniu/android/http/metrics/UploadRegionRequestMetrics.java
+++ b/library/src/main/java/com/qiniu/android/http/metrics/UploadRegionRequestMetrics.java
@@ -19,7 +19,9 @@ public long totalElapsedTime(){
}
long time = 0;
for (UploadSingleRequestMetrics metrics : metricsList){
- time += metrics.totalElapsedTime();
+ if (metrics != null){
+ time += metrics.totalElapsedTime();
+ }
}
return time;
}
@@ -34,13 +36,22 @@ public Long bytesSend(){
}
long bytes = 0;
for (UploadSingleRequestMetrics metrics : metricsList){
- bytes += metrics.bytesSend();
+ if (metrics != null) {
+ bytes += metrics.bytesSend();
+ }
}
return bytes;
}
public void addMetricsList(ArrayList metricsList){
- this.metricsList.addAll(0, metricsList);
+ if (metricsList == null || metricsList.size() == 0){
+ return;
+ }
+ for (UploadSingleRequestMetrics metrics : metricsList) {
+ if (metrics != null){
+ this.metricsList.add(metrics);
+ }
+ }
}
public void addMetrics(UploadRegionRequestMetrics metrics){
@@ -54,7 +65,7 @@ public void addMetrics(UploadRegionRequestMetrics metrics){
String thisRegionId = metrics.region.getZoneInfo().getRegionId();
String metricsRegionId = metrics.region.getZoneInfo().getRegionId();
if (thisRegionId.equals(metricsRegionId)){
- metricsList.addAll(0, metrics.metricsList);
+ addMetricsList(metrics.metricsList);
}
}
}
diff --git a/library/src/main/java/com/qiniu/android/http/request/HttpRegionRequest.java b/library/src/main/java/com/qiniu/android/http/request/HttpRegionRequest.java
index 168081a6e..0261c666a 100644
--- a/library/src/main/java/com/qiniu/android/http/request/HttpRegionRequest.java
+++ b/library/src/main/java/com/qiniu/android/http/request/HttpRegionRequest.java
@@ -73,7 +73,7 @@ private void performRequest(IUploadServer server,
final RequestCompleteHandler completeHandler){
if (server == null || server.getHost() == null || server.getHost().length() == 0) {
- ResponseInfo responseInfo = ResponseInfo.invalidArgument("server error");
+ ResponseInfo responseInfo = ResponseInfo.noUsableHostError("server error");
completeAction(responseInfo, null, completeHandler);
return;
}
diff --git a/library/src/main/java/com/qiniu/android/http/request/HttpSingleRequest.java b/library/src/main/java/com/qiniu/android/http/request/HttpSingleRequest.java
index de12acc85..d4cfe2578 100644
--- a/library/src/main/java/com/qiniu/android/http/request/HttpSingleRequest.java
+++ b/library/src/main/java/com/qiniu/android/http/request/HttpSingleRequest.java
@@ -141,7 +141,7 @@ private void reportRequest(ResponseInfo responseInfo,
Request request,
UploadSingleRequestMetrics requestMetrics){
- if (!requestInfo.shouldReportRequestLog() || requestMetrics == null){
+ if (requestInfo == null || !requestInfo.shouldReportRequestLog() || requestMetrics == null){
return;
}
diff --git a/library/src/main/java/com/qiniu/android/http/serverRegion/UploadDomainRegion.java b/library/src/main/java/com/qiniu/android/http/serverRegion/UploadDomainRegion.java
index d4725f25f..1edd2dea4 100644
--- a/library/src/main/java/com/qiniu/android/http/serverRegion/UploadDomainRegion.java
+++ b/library/src/main/java/com/qiniu/android/http/serverRegion/UploadDomainRegion.java
@@ -49,126 +49,150 @@ public void setupRegionData(ZoneInfo zoneInfo) {
isAllFrozen = false;
ArrayList domainHostList = new ArrayList<>();
- if (zoneInfo.domains != null){
+ if (zoneInfo.domains != null) {
domainHostList.addAll(zoneInfo.domains);
}
this.domainHostList = domainHostList;
this.domainHashMap = createDomainDictionary(domainHostList);
ArrayList oldDomainHostList = new ArrayList<>();
- if (zoneInfo.old_domains != null){
+ if (zoneInfo.old_domains != null) {
oldDomainHostList.addAll(zoneInfo.old_domains);
}
- this.oldDomainHostList = domainHostList;
- this.oldDomainHashMap = createDomainDictionary(domainHostList);
+ this.oldDomainHostList = oldDomainHostList;
+ this.oldDomainHashMap = createDomainDictionary(oldDomainHostList);
}
@Override
public IUploadServer getNextServer(boolean isOldServer, ResponseInfo responseInfo, IUploadServer freezeServer) {
- if (isAllFrozen){
+ if (isAllFrozen) {
return null;
}
- if (responseInfo != null && freezeServer != null && freezeServer.getServerId() != null){
-
- // 无法连接到Host || Host不可用, 局部冻结
- if (!responseInfo.canConnectToHost() || responseInfo.isHostUnavailable()){
- UploadServerDomain domain = null;
- domain = domainHashMap.get(freezeServer.getServerId());
- if (domain != null){
- domain.freeze(freezeServer.getIp(), partialFreezeManager, GlobalConfiguration.getInstance().partialHostFrozenTime);
- }
- domain = oldDomainHashMap.get(freezeServer.getServerId());
- if (domain != null){
- domain.freeze(freezeServer.getIp(), partialFreezeManager, GlobalConfiguration.getInstance().partialHostFrozenTime);
- }
- }
- // Host不可用,全局冻结
- if (responseInfo.isHostUnavailable()){
- UploadServerDomain domain = null;
- domain = domainHashMap.get(freezeServer.getServerId());
- if (domain != null){
- domain.freeze(freezeServer.getIp(), UploadServerFreezeManager.getInstance(), GlobalConfiguration.getInstance().globalHostFrozenTime);
- }
- domain = oldDomainHashMap.get(freezeServer.getServerId());
- if (domain != null){
- domain.freeze(freezeServer.getIp(), UploadServerFreezeManager.getInstance(), GlobalConfiguration.getInstance().globalHostFrozenTime);
- }
- }
- }
+ freezeServerIfNeed(responseInfo, freezeServer);
ArrayList hostList = isOldServer ? oldDomainHostList : domainHostList;
HashMap domainInfo = isOldServer ? oldDomainHashMap : domainHashMap;
IUploadServer server = null;
for (String host : hostList) {
UploadServerDomain domain = domainInfo.get(host);
- if (domain != null){
- server = domain.getServer(new UploadServerFreezeManager[] {partialFreezeManager, UploadServerFreezeManager.getInstance()});
+ if (domain != null) {
+ server = domain.getServer(new UploadServerFreezeManager[]{partialFreezeManager, UploadServerFreezeManager.getInstance()});
}
- if (server != null){
+ if (server != null) {
break;
}
}
- if (server == null && !hasGot && hostList.size() > 0){
- int index = (int)(Math.random() * hostList.size());
+ if (server == null && !hasGot && hostList.size() > 0) {
+ int index = (int) (Math.random() * hostList.size());
String host = hostList.get(index);
UploadServerDomain domain = domainInfo.get(host);
- if (domain != null){
+ if (domain != null) {
server = domain.getOneServer();
}
+ unfreezeServer(server);
}
hasGot = true;
- if (server == null){
+ if (server == null) {
isAllFrozen = true;
}
return server;
}
- private HashMap createDomainDictionary(List hosts){
+
+ private void freezeServerIfNeed(ResponseInfo responseInfo, IUploadServer freezeServer) {
+ if (responseInfo == null || freezeServer == null || freezeServer.getServerId() == null) {
+ return;
+ }
+
+ // 无法连接到Host || Host不可用, 局部冻结
+ if (!responseInfo.canConnectToHost() || responseInfo.isHostUnavailable()) {
+ UploadServerDomain domain = null;
+ domain = domainHashMap.get(freezeServer.getServerId());
+ if (domain != null) {
+ domain.freeze(freezeServer.getIp(), partialFreezeManager, GlobalConfiguration.getInstance().partialHostFrozenTime);
+ }
+ domain = oldDomainHashMap.get(freezeServer.getServerId());
+ if (domain != null) {
+ domain.freeze(freezeServer.getIp(), partialFreezeManager, GlobalConfiguration.getInstance().partialHostFrozenTime);
+ }
+ }
+
+ // Host不可用,全局冻结
+ if (responseInfo.isHostUnavailable()) {
+ UploadServerDomain domain = null;
+ domain = domainHashMap.get(freezeServer.getServerId());
+ if (domain != null) {
+ domain.freeze(freezeServer.getIp(), UploadServerFreezeManager.getInstance(), GlobalConfiguration.getInstance().globalHostFrozenTime);
+ }
+ domain = oldDomainHashMap.get(freezeServer.getServerId());
+ if (domain != null) {
+ domain.freeze(freezeServer.getIp(), UploadServerFreezeManager.getInstance(), GlobalConfiguration.getInstance().globalHostFrozenTime);
+ }
+ }
+ }
+
+ private void unfreezeServer(IUploadServer freezeServer) {
+ if (freezeServer == null || freezeServer.getServerId() == null) {
+ return;
+ }
+
+ UploadServerDomain domain = null;
+ domain = domainHashMap.get(freezeServer.getServerId());
+ if (domain != null) {
+ domain.unfreeze(freezeServer.getIp(), new UploadServerFreezeManager[]{partialFreezeManager, UploadServerFreezeManager.getInstance()});
+ }
+ domain = oldDomainHashMap.get(freezeServer.getServerId());
+ if (domain != null) {
+ domain.unfreeze(freezeServer.getIp(), new UploadServerFreezeManager[]{partialFreezeManager, UploadServerFreezeManager.getInstance()});
+ }
+ }
+
+ private HashMap createDomainDictionary(List hosts) {
HashMap domainHashMap = new HashMap<>();
for (int i = 0; i < hosts.size(); i++) {
String host = hosts.get(i);
UploadServerDomain domain = new UploadServerDomain(host);
domainHashMap.put(host, domain);
}
- return domainHashMap;
+ return domainHashMap;
}
- private static class UploadServerDomain{
+ private static class UploadServerDomain {
private boolean isAllFrozen = false;
protected final String host;
protected ArrayList ipGroupList = new ArrayList<>();
- protected UploadServerDomain(String host){
+ protected UploadServerDomain(String host) {
this.host = host;
}
- protected IUploadServer getServer(UploadServerFreezeManager[] freezeManagerList){
- if (isAllFrozen || host == null || host.length() == 0){
+ protected IUploadServer getServer(UploadServerFreezeManager[] freezeManagerList) {
+ if (isAllFrozen || host == null || host.length() == 0) {
return null;
}
- if (ipGroupList == null || ipGroupList.size() == 0){
+ if (ipGroupList == null || ipGroupList.size() == 0) {
createIpGroupList();
}
// 解析到IP:
- if (ipGroupList != null && ipGroupList.size() > 0){
+ if (ipGroupList != null && ipGroupList.size() > 0) {
UploadServer server = null;
- for (UploadIpGroup ipGroup : ipGroupList){
+ for (UploadIpGroup ipGroup : ipGroupList) {
// 黑名单中不存在 & 未被冻结
- if (ipGroup.groupType != null && !isGroupFrozenByFreezeManagers(ipGroup.groupType, freezeManagerList)){
+ if (ipGroup.groupType != null && !isGroupFrozenByFreezeManagers(ipGroup.groupType, freezeManagerList)) {
IDnsNetworkAddress networkAddress = ipGroup.getNetworkAddress();
server = new UploadServer(host, host, networkAddress.getIpValue(), networkAddress.getSourceValue(), networkAddress.getTimestampValue());
break;
}
}
- if (server == null){
+ if (server == null) {
isAllFrozen = true;
}
return server;
@@ -177,7 +201,7 @@ protected IUploadServer getServer(UploadServerFreezeManager[] freezeManagerList)
// 未解析到IP:
// 黑名单中不存在 & 未被冻结
String groupType = Utils.getIpType(null, host);
- if (groupType != null && !isGroupFrozenByFreezeManagers(groupType, freezeManagerList)){
+ if (groupType != null && !isGroupFrozenByFreezeManagers(groupType, freezeManagerList)) {
return new UploadServer(host, host, null, null, null);
} else {
isAllFrozen = true;
@@ -185,7 +209,7 @@ protected IUploadServer getServer(UploadServerFreezeManager[] freezeManagerList)
}
}
- protected boolean isGroupFrozenByFreezeManagers(String groupType, UploadServerFreezeManager[] freezeManagerList){
+ protected boolean isGroupFrozenByFreezeManagers(String groupType, UploadServerFreezeManager[] freezeManagerList) {
if (groupType == null) {
return true;
}
@@ -203,12 +227,12 @@ protected boolean isGroupFrozenByFreezeManagers(String groupType, UploadServerFr
return isFrozen;
}
- protected UploadServer getOneServer(){
+ protected UploadServer getOneServer() {
if (host == null || host.length() == 0) {
return null;
}
if (ipGroupList != null && ipGroupList.size() > 0) {
- int index = (int)(Math.random() * ipGroupList.size());
+ int index = (int) (Math.random() * ipGroupList.size());
UploadIpGroup ipGroup = ipGroupList.get(index);
IDnsNetworkAddress inetAddress = ipGroup.getNetworkAddress();
UploadServer server = new UploadServer(host, host, inetAddress.getIpValue(), inetAddress.getSourceValue(), inetAddress.getTimestampValue());
@@ -218,51 +242,60 @@ protected UploadServer getOneServer(){
}
}
- private synchronized void createIpGroupList(){
- if (ipGroupList != null && ipGroupList.size() > 0){
- return;
- }
-
- List networkAddresses = DnsPrefetcher.getInstance().getInetAddressByHost(host);
- if (networkAddresses == null || networkAddresses.size() == 0){
- return;
- }
-
- HashMap> ipGroupInfo = new HashMap<>();
- for (IDnsNetworkAddress networkAddress : networkAddresses){
- String ipValue = networkAddress.getIpValue();
- if (ipValue == null){
- continue;
- }
- String groupType = Utils.getIpType(ipValue, host);
- if (groupType != null){
- ArrayList groupNetworkAddresses = ipGroupInfo.get(groupType);
- if (groupNetworkAddresses == null) {
- groupNetworkAddresses = new ArrayList<>();
- }
- groupNetworkAddresses.add(networkAddress);
- ipGroupInfo.put(groupType, groupNetworkAddresses);
- }
- }
-
- ArrayList ipGroupList = new ArrayList<>();
- for (String groupType : ipGroupInfo.keySet()){
- ArrayList addresses = ipGroupInfo.get(groupType);
- UploadIpGroup ipGroup = new UploadIpGroup(groupType, addresses);
- ipGroupList.add(ipGroup);
- }
- this.ipGroupList = ipGroupList;
+ private synchronized void createIpGroupList() {
+ if (ipGroupList != null && ipGroupList.size() > 0) {
+ return;
+ }
+
+ List networkAddresses = DnsPrefetcher.getInstance().getInetAddressByHost(host);
+ if (networkAddresses == null || networkAddresses.size() == 0) {
+ return;
+ }
+
+ HashMap> ipGroupInfo = new HashMap<>();
+ for (IDnsNetworkAddress networkAddress : networkAddresses) {
+ String ipValue = networkAddress.getIpValue();
+ if (ipValue == null) {
+ continue;
+ }
+ String groupType = Utils.getIpType(ipValue, host);
+ if (groupType != null) {
+ ArrayList groupNetworkAddresses = ipGroupInfo.get(groupType);
+ if (groupNetworkAddresses == null) {
+ groupNetworkAddresses = new ArrayList<>();
+ }
+ groupNetworkAddresses.add(networkAddress);
+ ipGroupInfo.put(groupType, groupNetworkAddresses);
+ }
+ }
+
+ ArrayList ipGroupList = new ArrayList<>();
+ for (String groupType : ipGroupInfo.keySet()) {
+ ArrayList addresses = ipGroupInfo.get(groupType);
+ UploadIpGroup ipGroup = new UploadIpGroup(groupType, addresses);
+ ipGroupList.add(ipGroup);
+ }
+ this.ipGroupList = ipGroupList;
}
- protected void freeze(String ip, UploadServerFreezeManager freezeManager, int frozenTime){
- if (freezeManager == null){
+ protected void freeze(String ip, UploadServerFreezeManager freezeManager, int frozenTime) {
+ if (freezeManager == null) {
return;
}
freezeManager.freezeHost(host, Utils.getIpType(ip, this.host), frozenTime);
}
+
+ protected void unfreeze(String ip, UploadServerFreezeManager[] freezeManagerList) {
+ if (freezeManagerList == null || freezeManagerList.length == 0) {
+ return;
+ }
+ for (UploadServerFreezeManager freezeManager : freezeManagerList) {
+ freezeManager.unfreezeHost(host, Utils.getIpType(ip, this.host));
+ }
+ }
}
- private static class UploadIpGroup{
+ private static class UploadIpGroup {
private final String groupType;
private final ArrayList addressList;
@@ -272,11 +305,11 @@ protected UploadIpGroup(String groupType,
this.addressList = addressList;
}
- protected IDnsNetworkAddress getNetworkAddress(){
- if (addressList == null || addressList.size() == 0){
+ protected IDnsNetworkAddress getNetworkAddress() {
+ if (addressList == null || addressList.size() == 0) {
return null;
} else {
- int index = (int)(Math.random()*addressList.size());
+ int index = (int) (Math.random() * addressList.size());
return addressList.get(index);
}
}
diff --git a/library/src/main/java/com/qiniu/android/http/serverRegion/UploadServerFreezeManager.java b/library/src/main/java/com/qiniu/android/http/serverRegion/UploadServerFreezeManager.java
index 5887f77da..4841581e2 100644
--- a/library/src/main/java/com/qiniu/android/http/serverRegion/UploadServerFreezeManager.java
+++ b/library/src/main/java/com/qiniu/android/http/serverRegion/UploadServerFreezeManager.java
@@ -3,14 +3,14 @@
import com.qiniu.android.utils.Utils;
import java.util.Date;
-import java.util.HashMap;
+import java.util.concurrent.ConcurrentHashMap;
/**
* Created by yangsen on 2020/6/3
*/
public class UploadServerFreezeManager {
- private HashMap frozenInfo = new HashMap<>();
+ private ConcurrentHashMap frozenInfo = new ConcurrentHashMap<>();
private final static UploadServerFreezeManager manager = new UploadServerFreezeManager();
public UploadServerFreezeManager(){
@@ -33,7 +33,7 @@ public boolean isFreezeHost(String host, String type){
return isFrozen;
}
- public void freezeHost(String host, String type){
+ public void freezeHost(String host, String type, int frozenTime){
if (host == null || host.length() == 0){
return;
}
@@ -43,20 +43,17 @@ public void freezeHost(String host, String type){
item = new UploadServerFreezeItem(host, type);
frozenInfo.put(infoKey, item);
}
- item.freeze();
+ item.freeze(frozenTime);
}
- public void freezeHost(String host, String type, int frozenTime){
+ public void unfreezeHost(String host, String type){
if (host == null || host.length() == 0){
return;
}
String infoKey = getItemInfoKey(host, type);
- UploadServerFreezeItem item = frozenInfo.get(infoKey);
- if (item == null){
- item = new UploadServerFreezeItem(host, type);
- frozenInfo.put(infoKey, item);
+ if (infoKey != null){
+ frozenInfo.remove(infoKey);
}
- item.freeze();
}
private String getItemInfoKey(String host, String type){
@@ -82,9 +79,10 @@ protected synchronized boolean isFrozenByDate(Date date){
return isFrozen;
}
- protected synchronized void freeze(){
- freezeDate = new Date(Utils.currentTimestamp() + 30*1000);
+ protected synchronized void freeze(int frozenTime){
+ freezeDate = new Date(Utils.currentTimestamp() + frozenTime*1000);
}
+
}
}
diff --git a/library/src/main/java/com/qiniu/android/storage/ConcurrentResumeUpload.java b/library/src/main/java/com/qiniu/android/storage/ConcurrentResumeUpload.java
index c4e78bbac..38fd53f0a 100644
--- a/library/src/main/java/com/qiniu/android/storage/ConcurrentResumeUpload.java
+++ b/library/src/main/java/com/qiniu/android/storage/ConcurrentResumeUpload.java
@@ -28,13 +28,13 @@ class ConcurrentResumeUpload extends PartsUpload {
private JSONObject uploadBlockErrorResponse;
protected ConcurrentResumeUpload(File file,
- String key,
- UpToken token,
- UploadOptions option,
- Configuration config,
- Recorder recorder,
- String recorderKey,
- UpTaskCompletionHandler completionHandler) {
+ String key,
+ UpToken token,
+ UploadOptions option,
+ Configuration config,
+ Recorder recorder,
+ String recorderKey,
+ UpTaskCompletionHandler completionHandler) {
super(file, key, token, option, config, recorder, recorderKey, completionHandler);
}
@@ -56,10 +56,10 @@ protected void startToUpload() {
@Override
public void complete() {
UploadFileInfo uploadFileInfo = getUploadFileInfo();
- if (!uploadFileInfo.isAllUploaded() || uploadBlockErrorResponseInfo != null){
- if (uploadBlockErrorResponseInfo.couldRetry() && config.allowBackupHost) {
+ if (!uploadFileInfo.isAllUploaded()) {
+ if (uploadBlockErrorResponseInfo != null && uploadBlockErrorResponseInfo.couldRetry() && config.allowBackupHost) {
boolean isSwitched = switchRegionAndUpload();
- if (!isSwitched){
+ if (!isSwitched) {
completeAction(uploadBlockErrorResponseInfo, uploadBlockErrorResponse);
}
} else {
@@ -69,9 +69,9 @@ public void complete() {
makeFile(new UploadFileCompleteHandler() {
@Override
public void complete(ResponseInfo responseInfo, JSONObject response) {
- if (responseInfo == null || !responseInfo.isOK()){
+ if (responseInfo == null || !responseInfo.isOK()) {
boolean isSwitched = switchRegionAndUpload();
- if (!isSwitched){
+ if (!isSwitched) {
completeAction(responseInfo, response);
}
} else {
@@ -108,23 +108,17 @@ public void complete() {
groupTaskThread.start();
}
- private void uploadRestBlock(UploadBlockCompleteHandler completeHandler){
+ private void uploadRestBlock(UploadBlockCompleteHandler completeHandler) {
final UploadFileInfo uploadFileInfo = getUploadFileInfo();
- if (uploadFileInfo == null){
- if (uploadBlockErrorResponseInfo == null){
- uploadBlockErrorResponseInfo = ResponseInfo.invalidArgument("file error");
- uploadBlockErrorResponse = uploadBlockErrorResponseInfo.response;
- }
+ if (uploadFileInfo == null) {
+ setErrorResponse(ResponseInfo.invalidArgument("file error"), null);
completeHandler.complete();
return;
}
IUploadRegion currentRegion = getCurrentRegion();
- if (currentRegion == null){
- if (uploadBlockErrorResponseInfo == null){
- uploadBlockErrorResponseInfo = ResponseInfo.invalidArgument("server error");
- uploadBlockErrorResponse = uploadBlockErrorResponseInfo.response;
- }
+ if (currentRegion == null) {
+ setErrorResponse(ResponseInfo.noUsableHostError("region server error"), null);
completeHandler.complete();
return;
}
@@ -160,12 +154,11 @@ public void progress(long totalBytesWritten, long totalBytesExpectedToWrite) {
private void makeBlock(final UploadFileInfo.UploadBlock block,
final UploadFileInfo.UploadData chunk,
final RequestProgressHandler progressHandler,
- final UploadBlockCompleteHandler completeHandler){
+ final UploadBlockCompleteHandler completeHandler) {
chunk.data = getDataWithChunk(chunk, block);
- if (chunk.data == null){
- uploadBlockErrorResponseInfo = ResponseInfo.localIOError("get chunk data error");
- uploadBlockErrorResponse = uploadBlockErrorResponseInfo.response;
+ if (chunk.data == null) {
+ setErrorResponse(ResponseInfo.localIOError("get chunk data error"), null);
completeHandler.complete();
return;
}
@@ -183,12 +176,13 @@ public void complete(ResponseInfo responseInfo, UploadRegionRequestMetrics reque
destroyUploadRequestTransaction(transaction);
String blockContext = null;
- if (response != null){
+ if (response != null) {
try {
blockContext = response.getString("ctx");
- } catch (JSONException e) {}
+ } catch (JSONException e) {
+ }
}
- if (responseInfo.isOK() && blockContext != null){
+ if (responseInfo.isOK() && blockContext != null) {
block.context = blockContext;
chunk.isUploading = false;
chunk.isCompleted = true;
@@ -197,21 +191,20 @@ public void complete(ResponseInfo responseInfo, UploadRegionRequestMetrics reque
} else {
chunk.isUploading = false;
chunk.isCompleted = false;
- uploadBlockErrorResponse = response;
- uploadBlockErrorResponseInfo = responseInfo;
+ setErrorResponse(responseInfo, response);
completeHandler.complete();
}
}
});
}
- private void makeFile(final UploadFileCompleteHandler completeHandler){
+ private void makeFile(final UploadFileCompleteHandler completeHandler) {
UploadFileInfo uploadFileInfo = getUploadFileInfo();
final RequestTransaction transaction = createUploadRequestTransaction();
ArrayList contextsList = uploadFileInfo.allBlocksContexts();
String[] contexts = contextsList.toArray(new String[contextsList.size()]);
- transaction.makeFile(uploadFileInfo.size, fileName, contexts, true, new RequestTransaction.RequestCompleteHandler(){
+ transaction.makeFile(uploadFileInfo.size, fileName, contexts, true, new RequestTransaction.RequestCompleteHandler() {
@Override
public void complete(ResponseInfo responseInfo, UploadRegionRequestMetrics requestMetrics, JSONObject response) {
@@ -223,39 +216,50 @@ public void complete(ResponseInfo responseInfo, UploadRegionRequestMetrics reque
});
}
- private RequestTransaction createUploadRequestTransaction(){
+ private void setErrorResponse(ResponseInfo responseInfo, JSONObject response) {
+ if (uploadBlockErrorResponseInfo == null || (responseInfo != null && responseInfo.statusCode != ResponseInfo.NoUsableHostError)) {
+ uploadBlockErrorResponseInfo = responseInfo;
+ if (response == null && responseInfo != null) {
+ uploadBlockErrorResponse = responseInfo.response;
+ } else {
+ uploadBlockErrorResponse = response;
+ }
+ }
+ }
+
+ private RequestTransaction createUploadRequestTransaction() {
RequestTransaction transaction = new RequestTransaction(config, option, getTargetRegion(), getCurrentRegion(), key, token);
uploadTransactions.add(transaction);
return transaction;
}
- private void destroyUploadRequestTransaction(RequestTransaction transaction){
- if (transaction != null){
+ private void destroyUploadRequestTransaction(RequestTransaction transaction) {
+ if (transaction != null) {
uploadTransactions.remove(transaction);
}
}
private byte[] getDataWithChunk(UploadFileInfo.UploadData chunk,
- UploadFileInfo.UploadBlock block){
+ UploadFileInfo.UploadBlock block) {
RandomAccessFile randomAccessFile = getRandomAccessFile();
- if (randomAccessFile == null || chunk == null || block == null){
+ if (randomAccessFile == null || chunk == null || block == null) {
return null;
}
- byte[] data = new byte[(int)chunk.size];
+ byte[] data = new byte[(int) chunk.size];
try {
randomAccessFile.seek((chunk.offset + block.offset));
- randomAccessFile.read(data, 0, (int)chunk.size);
+ randomAccessFile.read(data, 0, (int) chunk.size);
} catch (IOException e) {
data = null;
}
return data;
}
- private interface UploadBlockCompleteHandler{
+ private interface UploadBlockCompleteHandler {
void complete();
}
- private interface UploadFileCompleteHandler{
+ private interface UploadFileCompleteHandler {
void complete(ResponseInfo responseInfo, JSONObject response);
}
}
diff --git a/library/src/main/java/com/qiniu/android/storage/GlobalConfiguration.java b/library/src/main/java/com/qiniu/android/storage/GlobalConfiguration.java
index 3eafd5c8f..98baeda6b 100644
--- a/library/src/main/java/com/qiniu/android/storage/GlobalConfiguration.java
+++ b/library/src/main/java/com/qiniu/android/storage/GlobalConfiguration.java
@@ -31,14 +31,14 @@ public class GlobalConfiguration {
public String dnsCacheDir = Utils.sdkDirectory() + "/dnsCache/";
/**
- * Host全局冻结时间 单位:秒 默认:30 推荐范围:[10 ~ 60]
- * 当某个Host的上传失败后并且可能短时间无法恢复,会冻结该Host,globalHostFrozenTime为全局冻结时间
+ * Host全局冻结时间 单位:秒 默认:10 推荐范围:[5 ~ 30]
+ * 当某个Host的上传失败后并且可能短时间无法恢复,会冻结该Host
*/
- public int globalHostFrozenTime = 30;
+ public int globalHostFrozenTime = 10;
/**
- * Host局部冻结时间,只会影响当前长传操作 单位:秒 默认:5*60 推荐范围:[60 ~ 10*60]
- * 当某个Host的上传失败后并且可能短时间可能会恢复,会冻结该Host,partialHostFrozenTime为全局冻结时间
+ * Host局部冻结时间,只会影响当前上传操作 单位:秒 默认:5*60 推荐范围:[60 ~ 10*60]
+ * 当某个Host的上传失败后并且短时间可能会恢复,会局部冻结该Host
*/
public int partialHostFrozenTime = 5*60;
diff --git a/library/src/main/java/com/qiniu/android/storage/PartsUpload.java b/library/src/main/java/com/qiniu/android/storage/PartsUpload.java
index b43fb60f6..83f112b1c 100644
--- a/library/src/main/java/com/qiniu/android/storage/PartsUpload.java
+++ b/library/src/main/java/com/qiniu/android/storage/PartsUpload.java
@@ -159,8 +159,9 @@ private void recoverUploadInfoFromRecord(){
JSONObject info = new JSONObject(new String(data));
ZoneInfo zoneInfo = ZoneInfo.buildFromJson(info.getJSONObject(kRecordZoneInfoKey));
UploadFileInfo fileInfo = UploadFileInfo.fileFromJson(info.getJSONObject(kRecordFileInfoKey));
- if (zoneInfo != null && fileInfo != null && fileInfo.uploadBlocks != null &&
- fileInfo.uploadBlocks.size() > 0 && fileInfo.uploadBlocks.get(0).uploadDataList != null &&
+ if (zoneInfo != null && fileInfo != null &&
+ fileInfo.size == file.length() && fileInfo.modifyTime == file.lastModified() &&
+ fileInfo.uploadBlocks != null && fileInfo.uploadBlocks.size() > 0 && fileInfo.uploadBlocks.get(0).uploadDataList != null &&
fileInfo.uploadBlocks.get(0).uploadDataList.size() > 0 && fileInfo.uploadBlocks.get(0).uploadDataList.get(0).size == getUploadChunkSize()){
insertRegionAtFirstByZoneInfo(zoneInfo);
uploadFileInfo = fileInfo;
@@ -168,7 +169,7 @@ private void recoverUploadInfoFromRecord(){
} else {
recorder.del(key);
}
- } catch (JSONException e) {
+ } catch (Exception e) {
recorder.del(key);
}
}
diff --git a/library/src/main/java/com/qiniu/android/storage/ResumeUpload.java b/library/src/main/java/com/qiniu/android/storage/ResumeUpload.java
index 01272161a..0481f401c 100644
--- a/library/src/main/java/com/qiniu/android/storage/ResumeUpload.java
+++ b/library/src/main/java/com/qiniu/android/storage/ResumeUpload.java
@@ -46,8 +46,8 @@ protected void startToUpload() {
public void complete() {
UploadFileInfo uploadFileInfo = getUploadFileInfo();
- if (!uploadFileInfo.isAllUploaded() || uploadChunkErrorResponseInfo != null){
- if (uploadChunkErrorResponseInfo.couldRetry() && config.allowBackupHost) {
+ if (!uploadFileInfo.isAllUploaded()){
+ if (uploadChunkErrorResponseInfo != null && uploadChunkErrorResponseInfo.couldRetry() && config.allowBackupHost) {
boolean isSwitched = switchRegionAndUpload();
if (!isSwitched){
completeAction(uploadChunkErrorResponseInfo, uploadChunkErrorResponse);
@@ -84,20 +84,14 @@ public void run() {
private void uploadRestChunk(UploadChunkCompleteHandler completeHandler){
final UploadFileInfo uploadFileInfo = getUploadFileInfo();
if (uploadFileInfo == null){
- if (uploadChunkErrorResponseInfo == null){
- uploadChunkErrorResponseInfo = ResponseInfo.invalidArgument("file error");
- uploadChunkErrorResponse = uploadChunkErrorResponseInfo.response;
- }
+ setErrorResponse(ResponseInfo.invalidArgument("file error"), null);
completeHandler.complete();
return;
}
IUploadRegion currentRegion = getCurrentRegion();
if (currentRegion == null){
- if (uploadChunkErrorResponseInfo == null){
- uploadChunkErrorResponseInfo = ResponseInfo.invalidArgument("server error");
- uploadChunkErrorResponse = uploadChunkErrorResponseInfo.response;
- }
+ setErrorResponse(ResponseInfo.noUsableHostError("region server error"), null);
completeHandler.complete();
return;
}
@@ -137,8 +131,7 @@ private void makeBlock(final UploadFileInfo.UploadBlock block,
chunk.data = getDataWithChunk(chunk, block);
if (chunk.data == null){
- uploadChunkErrorResponseInfo = ResponseInfo.localIOError("get chunk data error");
- uploadChunkErrorResponse = uploadChunkErrorResponseInfo.response;
+ setErrorResponse(ResponseInfo.localIOError("get chunk data error"), null);
completeHandler.complete();
return;
}
@@ -169,8 +162,7 @@ public void complete(ResponseInfo responseInfo, UploadRegionRequestMetrics reque
} else {
chunk.isUploading = false;
chunk.isCompleted = false;
- uploadChunkErrorResponse = response;
- uploadChunkErrorResponseInfo = responseInfo;
+ setErrorResponse(responseInfo, response);
completeHandler.complete();
}
}
@@ -184,8 +176,7 @@ private void uploadChunk(final UploadFileInfo.UploadBlock block,
chunk.data = getDataWithChunk(chunk, block);
if (chunk.data == null){
- uploadChunkErrorResponseInfo = ResponseInfo.localIOError("get chunk data error");
- uploadChunkErrorResponse = uploadChunkErrorResponseInfo.response;
+ setErrorResponse(ResponseInfo.localIOError("get chunk data error"), null);
completeHandler.complete();
return;
}
@@ -216,8 +207,7 @@ public void complete(ResponseInfo responseInfo, UploadRegionRequestMetrics reque
} else {
chunk.isUploading = false;
chunk.isCompleted = false;
- uploadChunkErrorResponse = response;
- uploadChunkErrorResponseInfo = responseInfo;
+ setErrorResponse(responseInfo, response);
completeHandler.complete();
}
}
@@ -249,6 +239,17 @@ public void complete(ResponseInfo responseInfo, UploadRegionRequestMetrics reque
});
}
+ private void setErrorResponse(ResponseInfo responseInfo, JSONObject response) {
+ if (uploadChunkErrorResponseInfo == null || (responseInfo != null && responseInfo.statusCode != ResponseInfo.NoUsableHostError)) {
+ uploadChunkErrorResponseInfo = responseInfo;
+ if (response == null && responseInfo != null) {
+ uploadChunkErrorResponse = responseInfo.response;
+ } else {
+ uploadChunkErrorResponse = response;
+ }
+ }
+ }
+
private RequestTransaction createUploadRequestTransaction(){
RequestTransaction transaction = new RequestTransaction(config, option, getTargetRegion(), getCurrentRegion(), key, token);
uploadTransaction = transaction;
diff --git a/library/src/main/java/com/qiniu/android/utils/AndroidNetwork.java b/library/src/main/java/com/qiniu/android/utils/AndroidNetwork.java
index 775057894..d28116993 100644
--- a/library/src/main/java/com/qiniu/android/utils/AndroidNetwork.java
+++ b/library/src/main/java/com/qiniu/android/utils/AndroidNetwork.java
@@ -76,12 +76,21 @@ public static String getHostIP() {
}
public static String networkType(Context context) {
+ if (context == null){
+ return Constants.NETWORK_CLASS_UNKNOWN;
+ }
+
ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
+ if (connectivity == null) {
+ return Constants.NETWORK_CLASS_UNKNOWN;
+ }
+
NetworkInfo networkInfo = connectivity.getActiveNetworkInfo();
- if (connectivity == null || !networkInfo.isConnected()) {
+ if (networkInfo == null || !networkInfo.isConnected()) {
return Constants.NETWORK_CLASS_UNKNOWN;
}
- int netWorkType = connectivity.getActiveNetworkInfo().getType();
+
+ int netWorkType = networkInfo.getType();
if (netWorkType == ConnectivityManager.TYPE_WIFI) {
return Constants.NETWORK_WIFI;
} else if (netWorkType == ConnectivityManager.TYPE_MOBILE) {
diff --git a/library/src/main/java/com/qiniu/android/utils/Utils.java b/library/src/main/java/com/qiniu/android/utils/Utils.java
index 005aec9ac..07fa21f8b 100644
--- a/library/src/main/java/com/qiniu/android/utils/Utils.java
+++ b/library/src/main/java/com/qiniu/android/utils/Utils.java
@@ -35,11 +35,11 @@ public static String systemVersion(){
}
public static Integer getCurrentSignalStrength(){
- return null;
+ return AndroidNetwork.getMobileDbm();
}
- public static Integer getCurrentNetworkType(){
- return null;
+ public static String getCurrentNetworkType(){
+ return AndroidNetwork.networkType(ContextGetter.applicationContext());
}
public static long currentTimestamp(){