diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5ca2bfd0..9219c15a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,8 @@
#Changelog
+## 8.5.2(2022-11-24)
+* 支持 multi 区域
+* 优化 Server 配置拉去逻辑
+
## 8.5.1(2022-10-21)
* 移除雾存储区域:华东一区
* 新增首尔和华东浙江 2 区 Region
diff --git a/README.md b/README.md
index e70070d5..e4d61a80 100644
--- a/README.md
+++ b/README.md
@@ -15,6 +15,7 @@ https://github.com/qiniudemo/qiniu-lab-android
| Qiniu SDK 版本 | 最低 Android版本 | 依赖库版本 |
|------------ |-----------------|------------------------|
+| 8.5.2 | Android 4.0+ | okhttp 4+ |
| 8.5.1 | Android 4.0+ | okhttp 4+ |
| 8.5.0 | Android 4.0+ | okhttp 4+ |
| 8.4.* | Android 4.0+ | okhttp 4+ |
@@ -35,7 +36,7 @@ https://github.com/qiniudemo/qiniu-lab-android
| 7.0.7 | Android 2.2+ | android-async-http 1.4.8 |
### 注意
-* 推荐使用最新版:8.5.1
+* 推荐使用最新版:8.5.2
* 7.6.2 ~ 8.3.2 AndroidNetwork.getMobileDbm()可以获取手机信号强度,需要如下权限(API>=18时生效)
```
diff --git a/library/build.gradle b/library/build.gradle
index bf1f0720..74af114b 100755
--- a/library/build.gradle
+++ b/library/build.gradle
@@ -61,7 +61,7 @@ dependencies {
implementation 'com.squareup.okhttp3:okhttp:4.9.1'
// implementation 'com.squareup.okhttp3:okhttp:3.12.+'
- implementation 'com.qiniu:happy-dns:2.0.0'
+ implementation 'com.qiniu:happy-dns:2.0.1'
// for javax.annotation.Nullable use in custom MultipartBody and Headers implements.
// implementation 'com.google.code.findbugs:jsr305:3.0.2'
implementation 'org.conscrypt:conscrypt-android:2.2.1'
diff --git a/library/src/androidTest/java/com/qiniu/android/TestConfig.java b/library/src/androidTest/java/com/qiniu/android/TestConfig.java
index 9ab66283..7f566a84 100644
--- a/library/src/androidTest/java/com/qiniu/android/TestConfig.java
+++ b/library/src/androidTest/java/com/qiniu/android/TestConfig.java
@@ -10,27 +10,26 @@ public final class TestConfig {
// TODO: 2020-05-09 bad token for testPutBytesWithFixedZoneUseBackupDomains
// 华东上传凭证
public static final String bucket_z0 = "kodo-phone-zone0-space";
-
- public static final String token_z0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:Qxeb7v5PXIrih_gwR-6pD1KsGgg=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTAtc3BhY2UiLCJkZWFkbGluZSI6MTY2OTUzNDk3OCwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9";
+ public static final String token_z0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:gk-emjEYF779GyuD2PLjrJGNeWw=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTAtc3BhY2UiLCJkZWFkbGluZSI6MTY3NDgwMTE1NSwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9";
// 华北上传凭证
public static final String bucket_z1 = "kodo-phone-zone1-space";
- public static final String token_z1 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:crF2Xi7Zxcs6y9OIwmbZ_9QdAtA=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTEtc3BhY2UiLCJkZWFkbGluZSI6MTY2OTUzNDk3OCwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9";
+ public static final String token_z1 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:Vo4gv4uabU3RKpH0R-PxhU6tj6c=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTEtc3BhY2UiLCJkZWFkbGluZSI6MTY3NDgwMTE1NSwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9";
// 华南上传凭证
public static final String bucket_z2 = "kodo-phone-zone2-space";
- public static final String token_z2 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:leoDnGLMa0wfqQ4GGb3yqWjLw5Y=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTItc3BhY2UiLCJkZWFkbGluZSI6MTY2OTUzNDk3OCwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9";
+ public static final String token_z2 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:juVQn2wvtbrFEy-J2Etq-JqO6UE=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTItc3BhY2UiLCJkZWFkbGluZSI6MTY3NDgwMTE1NSwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9";
// 北美上传凭证
public static final String bucket_na0 = "kodo-phone-zone-na0-space";
- public static final String token_na0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:4WqbwsnKFgWO6vZMr8V6tVMNZ50=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZS1uYTAtc3BhY2UiLCJkZWFkbGluZSI6MTY2OTUzNDk3OCwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9";
+ public static final String token_na0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:PDQxd9wAWd7_jV8UMR9dxnVtAac=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZS1uYTAtc3BhY2UiLCJkZWFkbGluZSI6MTY3NDgwMTE1NSwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9";
// 东南亚上传凭证
public static final String bucket_as0 = "kodo-phone-zone-as0-space";
- public static final String token_as0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:YjOnS0SLd0P1Z5VG_3Oxfls0KeA=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZS1hczAtc3BhY2UiLCJkZWFkbGluZSI6MTY2OTUzNDk3OCwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9";
+ public static final String token_as0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:Aj9HN9lRqpQzyX3EVno7BjMBkv8=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZS1hczAtc3BhY2UiLCJkZWFkbGluZSI6MTY3NDgwMTE1NSwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9";
// 华北浙江2上传凭证
public static final String bucket_cn_east_2 = "kodo-phone-cn-east-2";
- public static final String token_cn_east_2 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:ogrnSltO4Vdsrcsk4XNCR9t63tQ=:eyJzY29wZSI6ImtvZG8tcGhvbmUtY24tZWFzdC0yIiwiZGVhZGxpbmUiOjE2Njk1MzQ5NzgsICJyZXR1cm5Cb2R5Ijoie1wiZm9vXCI6JCh4OmZvbyksIFwiYmFyXCI6JCh4OmJhciksIFwibWltZVR5cGVcIjokKG1pbWVUeXBlKSwgXCJoYXNoXCI6JChldGFnKSwgXCJrZXlcIjokKGtleSksIFwiZm5hbWVcIjokKGZuYW1lKX0ifQ==";
+ public static final String token_cn_east_2 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:PDr1-LvnJ53Are_ZhhDVF4HwOPY=:eyJzY29wZSI6ImtvZG8tcGhvbmUtY24tZWFzdC0yIiwiZGVhZGxpbmUiOjE2NzQ4MDExNTUsICJyZXR1cm5Cb2R5Ijoie1wiZm9vXCI6JCh4OmZvbyksIFwiYmFyXCI6JCh4OmJhciksIFwibWltZVR5cGVcIjokKG1pbWVUeXBlKSwgXCJoYXNoXCI6JChldGFnKSwgXCJrZXlcIjokKGtleSksIFwiZm5hbWVcIjokKGZuYW1lKX0ifQ==";
// 韩国亚太上传凭证
public static final String bucket_ap_northeast_1 = "kodo-phone-ap-northeast-1";
- public static final String token_ap_northeast_1 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:yI8KG27WvY9QSLv669-yv9Ac1mY=:eyJzY29wZSI6ImtvZG8tcGhvbmUtYXAtbm9ydGhlYXN0LTEiLCJkZWFkbGluZSI6MTY2OTUzNDk3OCwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9";
- public static final String invalidBucketToken = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:KVBTuAcbmqx0ji81VQRwPzLgUEY=:eyJzY29wZSI6InpvbmVfaW52YWxpZCIsImRlYWRsaW5lIjoxNjY5NTM0OTc4LCAicmV0dXJuQm9keSI6IntcImZvb1wiOiQoeDpmb28pLCBcImJhclwiOiQoeDpiYXIpLCBcIm1pbWVUeXBlXCI6JChtaW1lVHlwZSksIFwiaGFzaFwiOiQoZXRhZyksIFwia2V5XCI6JChrZXkpLCBcImZuYW1lXCI6JChmbmFtZSl9In0=";
+ public static final String token_ap_northeast_1 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:StRMMkmKvNZMCo6zTrUjaLO529E=:eyJzY29wZSI6ImtvZG8tcGhvbmUtYXAtbm9ydGhlYXN0LTEiLCJkZWFkbGluZSI6MTY3NDgwMTE1NSwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9";
+ public static final String invalidBucketToken = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:mJ6Z0JLK5op1_d0FdU0JrjIHKog=:eyJzY29wZSI6InpvbmVfaW52YWxpZCIsImRlYWRsaW5lIjoxNjc0ODAxMTU1LCAicmV0dXJuQm9keSI6IntcImZvb1wiOiQoeDpmb28pLCBcImJhclwiOiQoeDpiYXIpLCBcIm1pbWVUeXBlXCI6JChtaW1lVHlwZSksIFwiaGFzaFwiOiQoZXRhZyksIFwia2V5XCI6JChrZXkpLCBcImZuYW1lXCI6JChmbmFtZSl9In0=";
// -----------
public static final String ak = "bjtWBQXrcxgo7HWwlC_bgHg81j352_GhgBGZPeOW";
diff --git a/library/src/main/java/com/qiniu/android/collect/ReportItem.java b/library/src/main/java/com/qiniu/android/collect/ReportItem.java
index 3517354e..97a2ba37 100644
--- a/library/src/main/java/com/qiniu/android/collect/ReportItem.java
+++ b/library/src/main/java/com/qiniu/android/collect/ReportItem.java
@@ -16,6 +16,9 @@ public void setReport(Object value, String key){
if (key == null || value == null){
return;
}
+ if (value instanceof String && ((String) value).length() > 1024) {
+ value = ((String) value).substring(0, 1024);
+ }
keyValues.put(key, value);
}
diff --git a/library/src/main/java/com/qiniu/android/common/AutoZone.java b/library/src/main/java/com/qiniu/android/common/AutoZone.java
index 10dd6bc9..f40c06fc 100644
--- a/library/src/main/java/com/qiniu/android/common/AutoZone.java
+++ b/library/src/main/java/com/qiniu/android/common/AutoZone.java
@@ -10,6 +10,7 @@
import org.json.JSONObject;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
@@ -23,6 +24,7 @@ public final class AutoZone extends Zone {
*/
private String[] ucServers;
private ArrayList transactions = new ArrayList<>();
+ private FixedZone defaultZone;
private static final SingleFlight SingleFlight = new SingleFlight();
@@ -39,17 +41,17 @@ public void setUcServers(String[] ucServers) {
}
}
+ public void setDefaultZones(FixedZone[] zones) {
+ defaultZone = FixedZone.combineZones(zones);
+ }
+
public List getUcServerList() {
if (ucServers != null && ucServers.length > 0) {
ArrayList serverList = new ArrayList<>();
Collections.addAll(serverList, ucServers);
return serverList;
} else {
- ArrayList serverList = new ArrayList<>();
- serverList.add(Config.preQueryHost02);
- serverList.add(Config.preQueryHost00);
- serverList.add(Config.preQueryHost01);
- return serverList;
+ return Arrays.asList(Config.preQueryHosts());
}
}
@@ -61,7 +63,7 @@ private String[] getUcServerArray() {
if (ucServers != null && ucServers.length > 0) {
return ucServers;
} else {
- return new String[]{Config.preQueryHost00, Config.preQueryHost01};
+ return Config.preQueryHosts();
}
}
@@ -70,7 +72,8 @@ public ZonesInfo getZonesInfo(UpToken token) {
if (token == null) {
return null;
}
- ZonesInfo zonesInfo = GlobalCache.getInstance().zonesInfoForKey(token.index());
+ final String cacheKey = token.index();
+ ZonesInfo zonesInfo = GlobalCache.getInstance().zonesInfoForKey(cacheKey);
if (zonesInfo != null) {
try {
zonesInfo = (ZonesInfo) zonesInfo.clone();
@@ -137,12 +140,20 @@ public void complete(Object value) {
completeHandler.complete(ResponseInfo.ParseError, responseInfo, requestMetrics);
}
} else {
- if (responseInfo.isNetworkBroken()) {
+ if (responseInfo != null && responseInfo.isNetworkBroken()) {
completeHandler.complete(ResponseInfo.NetworkError, responseInfo, requestMetrics);
} else {
- ZonesInfo zonesInfoP = FixedZone.localsZoneInfo().getZonesInfo(token);
- if (zonesInfoP.isValid()) {
- GlobalCache.getInstance().cache(zonesInfoP, cacheKey);
+ ZonesInfo info = null;
+ if (defaultZone != null) {
+ ZonesInfo infoP = defaultZone.getZonesInfo(token);
+ if (infoP != null && infoP.isValid()) {
+ infoP.toTemporary();
+ info = infoP;
+ }
+ }
+
+ if (info != null) {
+ GlobalCache.getInstance().cache(info, cacheKey);
completeHandler.complete(0, responseInfo, requestMetrics);
} else {
completeHandler.complete(ResponseInfo.ParseError, responseInfo, requestMetrics);
diff --git a/library/src/main/java/com/qiniu/android/common/Config.java b/library/src/main/java/com/qiniu/android/common/Config.java
index d792f420..ced13da2 100644
--- a/library/src/main/java/com/qiniu/android/common/Config.java
+++ b/library/src/main/java/com/qiniu/android/common/Config.java
@@ -72,6 +72,10 @@ public final class Config {
public static String preQueryHost01 = "api.qiniu.com";
public static String preQueryHost02 = "kodo-config.qiniuapi.com";
+ public static String[] preQueryHosts() {
+ return new String[]{preQueryHost00, preQueryHost02, preQueryHost01};
+ }
+
/**
* 当网络切换到 wifi 下,切换到此设置
*/
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 5fe44c28..c619d00a 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.5.1";
+ public static final String VERSION = "8.5.2";
public static final String UTF_8 = "utf-8";
}
diff --git a/library/src/main/java/com/qiniu/android/common/FixedZone.java b/library/src/main/java/com/qiniu/android/common/FixedZone.java
index d4d0caab..b5bf09d2 100644
--- a/library/src/main/java/com/qiniu/android/common/FixedZone.java
+++ b/library/src/main/java/com/qiniu/android/common/FixedZone.java
@@ -64,18 +64,28 @@ public final class FixedZone extends Zone {
private ZonesInfo zonesInfo;
public static FixedZone localsZoneInfo() {
- ArrayList localsZone = new ArrayList<>();
- localsZone.add((FixedZone)zone0);
- localsZone.add((FixedZone)zoneCnEast2);
- localsZone.add((FixedZone)zone1);
- localsZone.add((FixedZone)zone2);
- localsZone.add((FixedZone)zoneNa0);
- localsZone.add((FixedZone)zoneApNorthEast1);
- localsZone.add((FixedZone)zoneAs0);
+ FixedZone[] localsZone = new FixedZone[]{
+ (FixedZone) zone0, (FixedZone) zoneCnEast2,
+ (FixedZone) zone1, (FixedZone) zone2,
+ (FixedZone) zoneNa0, (FixedZone) zoneApNorthEast1,
+ (FixedZone) zoneAs0,
+ };
+
+ FixedZone zone = combineZones(localsZone);
+ if (zone != null) {
+ zone.zonesInfo.toTemporary();
+ }
+ return zone;
+ }
+
+ public static FixedZone combineZones(FixedZone[] zones) {
+ if (zones == null || zones.length == 0) {
+ return null;
+ }
ArrayList zoneInfoArray = new ArrayList<>();
- for (FixedZone zone : localsZone){
- if (zone.zonesInfo != null && zone.zonesInfo.zonesInfo != null){
+ for (FixedZone zone : zones) {
+ if (zone.zonesInfo != null && zone.zonesInfo.zonesInfo != null) {
zoneInfoArray.addAll(zone.zonesInfo.zonesInfo);
}
}
@@ -90,7 +100,7 @@ public FixedZone(ZoneInfo zoneInfo) {
this.zonesInfo = new ZonesInfo(zoneInfoList);
}
- public FixedZone(ZonesInfo zonesInfo){
+ public FixedZone(ZonesInfo zonesInfo) {
this.zonesInfo = zonesInfo;
}
@@ -116,7 +126,7 @@ private ZonesInfo createZonesInfo(String[] upDomains,
List upDomainsList = new ArrayList(Arrays.asList(upDomains));
List oldUpDomainsList = null;
- if (oldUpDomains != null && oldUpDomains.length > 0){
+ if (oldUpDomains != null && oldUpDomains.length > 0) {
oldUpDomainsList = new ArrayList(Arrays.asList(oldUpDomains));
} else {
oldUpDomainsList = new ArrayList<>();
@@ -139,7 +149,7 @@ public ZonesInfo getZonesInfo(UpToken token) {
@Override
public void preQuery(UpToken token, QueryHandler completeHandler) {
- if (completeHandler != null){
+ if (completeHandler != null) {
completeHandler.complete(0, null, null);
}
}
diff --git a/library/src/main/java/com/qiniu/android/common/ZonesInfo.java b/library/src/main/java/com/qiniu/android/common/ZonesInfo.java
index 4fb890d5..53bed240 100644
--- a/library/src/main/java/com/qiniu/android/common/ZonesInfo.java
+++ b/library/src/main/java/com/qiniu/android/common/ZonesInfo.java
@@ -4,6 +4,7 @@
import org.json.JSONObject;
import java.util.ArrayList;
+import java.util.Arrays;
public class ZonesInfo implements Cloneable {
@@ -23,8 +24,8 @@ public ZonesInfo(ArrayList zonesInfo, boolean isTemporary) {
public static ZonesInfo createZonesInfo(JSONObject jsonObject) {
ArrayList zonesInfo = new ArrayList<>();
- try {
- if (jsonObject != null) {
+ if (jsonObject != null) {
+ try {
JSONArray hosts = jsonObject.getJSONArray("hosts");
for (int i = 0; i < hosts.length(); i++) {
ZoneInfo zoneInfo = ZoneInfo.buildFromJson(hosts.getJSONObject(i));
@@ -32,15 +33,27 @@ public static ZonesInfo createZonesInfo(JSONObject jsonObject) {
zonesInfo.add(zoneInfo);
}
}
+
+ } catch (Exception ignored) {
}
- } catch (Exception ignored) {
}
return new ZonesInfo(zonesInfo);
}
public boolean isValid() {
- return zonesInfo != null && zonesInfo.size() > 0 && zonesInfo.get(0).isValid();
+ if (zonesInfo == null || zonesInfo.size() == 0) {
+ return false;
+ }
+
+ boolean valid = true;
+ for (ZoneInfo info : zonesInfo) {
+ if (!info.isValid()) {
+ valid = false;
+ break;
+ }
+ }
+ return valid;
}
// 是否为临时 zone, 临时 zone,不建议长期使用
@@ -57,7 +70,7 @@ protected Object clone() throws CloneNotSupportedException {
ArrayList infos = new ArrayList<>();
if (zonesInfo != null && zonesInfo.size() > 0) {
for (ZoneInfo zoneInfo : zonesInfo) {
- infos.add((ZoneInfo)zoneInfo.clone());
+ infos.add((ZoneInfo) zoneInfo.clone());
}
}
ZonesInfo info = new ZonesInfo(infos);
diff --git a/library/src/main/java/com/qiniu/android/http/dns/DnsPrefetcher.java b/library/src/main/java/com/qiniu/android/http/dns/DnsPrefetcher.java
index 5ab5c7df..433b2db7 100644
--- a/library/src/main/java/com/qiniu/android/http/dns/DnsPrefetcher.java
+++ b/library/src/main/java/com/qiniu/android/http/dns/DnsPrefetcher.java
@@ -1,7 +1,6 @@
package com.qiniu.android.http.dns;
import com.qiniu.android.common.Config;
-import com.qiniu.android.common.FixedZone;
import com.qiniu.android.common.Zone;
import com.qiniu.android.common.ZoneInfo;
import com.qiniu.android.common.ZonesInfo;
diff --git a/library/src/main/java/com/qiniu/android/storage/serverConfig/ServerConfigMonitor.java b/library/src/main/java/com/qiniu/android/storage/serverConfig/ServerConfigMonitor.java
index 631e4e73..e926b35b 100644
--- a/library/src/main/java/com/qiniu/android/storage/serverConfig/ServerConfigMonitor.java
+++ b/library/src/main/java/com/qiniu/android/storage/serverConfig/ServerConfigMonitor.java
@@ -6,6 +6,7 @@
import com.qiniu.android.transaction.TransactionManager;
import java.util.List;
+import java.util.Random;
public class ServerConfigMonitor {
private static final String TransactionKey = "ServerConfig";
@@ -42,7 +43,9 @@ public synchronized static void startMonitor() {
return;
}
- TransactionManager.Transaction transaction = new TransactionManager.Transaction(TransactionKey, 0, 10, new Runnable() {
+ Random random = new Random();
+ int interval = 120 + random.nextInt(240);
+ TransactionManager.Transaction transaction = new TransactionManager.Transaction(TransactionKey, 0, interval, new Runnable() {
@Override
public void run() {
configMonitor.monitor();
diff --git a/library/src/main/java/com/qiniu/android/storage/serverConfig/ServerConfigSynchronizer.java b/library/src/main/java/com/qiniu/android/storage/serverConfig/ServerConfigSynchronizer.java
index 19911a1f..e8eb52e4 100644
--- a/library/src/main/java/com/qiniu/android/storage/serverConfig/ServerConfigSynchronizer.java
+++ b/library/src/main/java/com/qiniu/android/storage/serverConfig/ServerConfigSynchronizer.java
@@ -51,6 +51,7 @@ public void complete(ResponseInfo responseInfo, UploadRegionRequestMetrics reque
}
private static synchronized RequestTransaction createServerConfigTransaction() {
+ // 只上传传才会有 Token,当有上传时才做请求,避免不必要的请求
if (serverConfigTransaction != null) {
return null;
}
@@ -60,12 +61,11 @@ private static synchronized RequestTransaction createServerConfigTransaction() {
token = UpToken.getInvalidToken();
}
- List servers = new ArrayList<>();
+ List servers = null;
if (Hosts != null && Hosts.length > 0) {
- servers.addAll(Arrays.asList(Hosts));
+ servers = Arrays.asList(Hosts);
} else {
- servers.add(Config.preQueryHost00);
- servers.add(Config.preQueryHost01);
+ servers = Arrays.asList(Config.preQueryHosts());
}
serverConfigTransaction = new RequestTransaction(servers, token);
return serverConfigTransaction;
@@ -110,12 +110,11 @@ private static synchronized RequestTransaction createServerUserConfigTransaction
return null;
}
- List servers = new ArrayList<>();
+ List servers = null;
if (Hosts != null && Hosts.length > 0) {
- servers.addAll(Arrays.asList(Hosts));
+ servers = Arrays.asList(Hosts);
} else {
- servers.add(Config.preQueryHost00);
- servers.add(Config.preQueryHost01);
+ servers = Arrays.asList(Config.preQueryHosts());
}
serverUserConfigTransaction = new RequestTransaction(servers, token);
return serverUserConfigTransaction;
@@ -125,9 +124,9 @@ private static synchronized void destroyServerUserConfigTransaction() {
serverUserConfigTransaction = null;
}
- interface ServerConfigHandler {
+ interface ServerConfigHandler {
void handle(ServerConfig config);
- }
+ }
interface ServerUserConfigHandler {
void handle(ServerUserConfig config);