Skip to content

Commit 218d297

Browse files
authored
Merge pull request #492 from YangSen-qn/multi-region
server config retry interval to [2min, 5min]
2 parents 87bf7cf + c9d7b2a commit 218d297

File tree

13 files changed

+99
-53
lines changed

13 files changed

+99
-53
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
#Changelog
2+
## 8.5.2(2022-11-24)
3+
* 支持 multi 区域
4+
* 优化 Server 配置拉去逻辑
5+
26
## 8.5.1(2022-10-21)
37
* 移除雾存储区域:华东一区
48
* 新增首尔和华东浙江 2 区 Region

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ https://github.com/qiniudemo/qiniu-lab-android
1515

1616
| Qiniu SDK 版本 | 最低 Android版本 | 依赖库版本 |
1717
|------------ |-----------------|------------------------|
18+
| 8.5.2 | Android 4.0+ | okhttp 4+ |
1819
| 8.5.1 | Android 4.0+ | okhttp 4+ |
1920
| 8.5.0 | Android 4.0+ | okhttp 4+ |
2021
| 8.4.* | Android 4.0+ | okhttp 4+ |
@@ -35,7 +36,7 @@ https://github.com/qiniudemo/qiniu-lab-android
3536
| 7.0.7 | Android 2.2+ | android-async-http 1.4.8 |
3637

3738
### 注意
38-
* 推荐使用最新版:8.5.1
39+
* 推荐使用最新版:8.5.2
3940
* 7.6.2 ~ 8.3.2 AndroidNetwork.getMobileDbm()可以获取手机信号强度,需要如下权限(API>=18时生效)
4041
```
4142
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

library/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ dependencies {
6161
implementation 'com.squareup.okhttp3:okhttp:4.9.1'
6262

6363
// implementation 'com.squareup.okhttp3:okhttp:3.12.+'
64-
implementation 'com.qiniu:happy-dns:2.0.0'
64+
implementation 'com.qiniu:happy-dns:2.0.1'
6565
// for javax.annotation.Nullable use in custom MultipartBody and Headers implements.
6666
// implementation 'com.google.code.findbugs:jsr305:3.0.2'
6767
implementation 'org.conscrypt:conscrypt-android:2.2.1'

library/src/androidTest/java/com/qiniu/android/TestConfig.java

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,27 +10,26 @@ public final class TestConfig {
1010
// TODO: 2020-05-09 bad token for testPutBytesWithFixedZoneUseBackupDomains
1111
// 华东上传凭证
1212
public static final String bucket_z0 = "kodo-phone-zone0-space";
13-
14-
public static final String token_z0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:Qxeb7v5PXIrih_gwR-6pD1KsGgg=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTAtc3BhY2UiLCJkZWFkbGluZSI6MTY2OTUzNDk3OCwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9";
13+
public static final String token_z0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:gk-emjEYF779GyuD2PLjrJGNeWw=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTAtc3BhY2UiLCJkZWFkbGluZSI6MTY3NDgwMTE1NSwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9";
1514
// 华北上传凭证
1615
public static final String bucket_z1 = "kodo-phone-zone1-space";
17-
public static final String token_z1 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:crF2Xi7Zxcs6y9OIwmbZ_9QdAtA=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTEtc3BhY2UiLCJkZWFkbGluZSI6MTY2OTUzNDk3OCwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9";
16+
public static final String token_z1 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:Vo4gv4uabU3RKpH0R-PxhU6tj6c=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTEtc3BhY2UiLCJkZWFkbGluZSI6MTY3NDgwMTE1NSwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9";
1817
// 华南上传凭证
1918
public static final String bucket_z2 = "kodo-phone-zone2-space";
20-
public static final String token_z2 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:leoDnGLMa0wfqQ4GGb3yqWjLw5Y=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTItc3BhY2UiLCJkZWFkbGluZSI6MTY2OTUzNDk3OCwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9";
19+
public static final String token_z2 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:juVQn2wvtbrFEy-J2Etq-JqO6UE=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTItc3BhY2UiLCJkZWFkbGluZSI6MTY3NDgwMTE1NSwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9";
2120
// 北美上传凭证
2221
public static final String bucket_na0 = "kodo-phone-zone-na0-space";
23-
public static final String token_na0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:4WqbwsnKFgWO6vZMr8V6tVMNZ50=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZS1uYTAtc3BhY2UiLCJkZWFkbGluZSI6MTY2OTUzNDk3OCwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9";
22+
public static final String token_na0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:PDQxd9wAWd7_jV8UMR9dxnVtAac=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZS1uYTAtc3BhY2UiLCJkZWFkbGluZSI6MTY3NDgwMTE1NSwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9";
2423
// 东南亚上传凭证
2524
public static final String bucket_as0 = "kodo-phone-zone-as0-space";
26-
public static final String token_as0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:YjOnS0SLd0P1Z5VG_3Oxfls0KeA=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZS1hczAtc3BhY2UiLCJkZWFkbGluZSI6MTY2OTUzNDk3OCwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9";
25+
public static final String token_as0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:Aj9HN9lRqpQzyX3EVno7BjMBkv8=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZS1hczAtc3BhY2UiLCJkZWFkbGluZSI6MTY3NDgwMTE1NSwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9";
2726
// 华北浙江2上传凭证
2827
public static final String bucket_cn_east_2 = "kodo-phone-cn-east-2";
29-
public static final String token_cn_east_2 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:ogrnSltO4Vdsrcsk4XNCR9t63tQ=:eyJzY29wZSI6ImtvZG8tcGhvbmUtY24tZWFzdC0yIiwiZGVhZGxpbmUiOjE2Njk1MzQ5NzgsICJyZXR1cm5Cb2R5Ijoie1wiZm9vXCI6JCh4OmZvbyksIFwiYmFyXCI6JCh4OmJhciksIFwibWltZVR5cGVcIjokKG1pbWVUeXBlKSwgXCJoYXNoXCI6JChldGFnKSwgXCJrZXlcIjokKGtleSksIFwiZm5hbWVcIjokKGZuYW1lKX0ifQ==";
28+
public static final String token_cn_east_2 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:PDr1-LvnJ53Are_ZhhDVF4HwOPY=:eyJzY29wZSI6ImtvZG8tcGhvbmUtY24tZWFzdC0yIiwiZGVhZGxpbmUiOjE2NzQ4MDExNTUsICJyZXR1cm5Cb2R5Ijoie1wiZm9vXCI6JCh4OmZvbyksIFwiYmFyXCI6JCh4OmJhciksIFwibWltZVR5cGVcIjokKG1pbWVUeXBlKSwgXCJoYXNoXCI6JChldGFnKSwgXCJrZXlcIjokKGtleSksIFwiZm5hbWVcIjokKGZuYW1lKX0ifQ==";
3029
// 韩国亚太上传凭证
3130
public static final String bucket_ap_northeast_1 = "kodo-phone-ap-northeast-1";
32-
public static final String token_ap_northeast_1 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:yI8KG27WvY9QSLv669-yv9Ac1mY=:eyJzY29wZSI6ImtvZG8tcGhvbmUtYXAtbm9ydGhlYXN0LTEiLCJkZWFkbGluZSI6MTY2OTUzNDk3OCwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9";
33-
public static final String invalidBucketToken = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:KVBTuAcbmqx0ji81VQRwPzLgUEY=:eyJzY29wZSI6InpvbmVfaW52YWxpZCIsImRlYWRsaW5lIjoxNjY5NTM0OTc4LCAicmV0dXJuQm9keSI6IntcImZvb1wiOiQoeDpmb28pLCBcImJhclwiOiQoeDpiYXIpLCBcIm1pbWVUeXBlXCI6JChtaW1lVHlwZSksIFwiaGFzaFwiOiQoZXRhZyksIFwia2V5XCI6JChrZXkpLCBcImZuYW1lXCI6JChmbmFtZSl9In0=";
31+
public static final String token_ap_northeast_1 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:StRMMkmKvNZMCo6zTrUjaLO529E=:eyJzY29wZSI6ImtvZG8tcGhvbmUtYXAtbm9ydGhlYXN0LTEiLCJkZWFkbGluZSI6MTY3NDgwMTE1NSwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9";
32+
public static final String invalidBucketToken = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:mJ6Z0JLK5op1_d0FdU0JrjIHKog=:eyJzY29wZSI6InpvbmVfaW52YWxpZCIsImRlYWRsaW5lIjoxNjc0ODAxMTU1LCAicmV0dXJuQm9keSI6IntcImZvb1wiOiQoeDpmb28pLCBcImJhclwiOiQoeDpiYXIpLCBcIm1pbWVUeXBlXCI6JChtaW1lVHlwZSksIFwiaGFzaFwiOiQoZXRhZyksIFwia2V5XCI6JChrZXkpLCBcImZuYW1lXCI6JChmbmFtZSl9In0=";
3433

3534
// -----------
3635
public static final String ak = "bjtWBQXrcxgo7HWwlC_bgHg81j352_GhgBGZPeOW";

library/src/main/java/com/qiniu/android/collect/ReportItem.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ public void setReport(Object value, String key){
1616
if (key == null || value == null){
1717
return;
1818
}
19+
if (value instanceof String && ((String) value).length() > 1024) {
20+
value = ((String) value).substring(0, 1024);
21+
}
1922
keyValues.put(key, value);
2023
}
2124

library/src/main/java/com/qiniu/android/common/AutoZone.java

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import org.json.JSONObject;
1111

1212
import java.util.ArrayList;
13+
import java.util.Arrays;
1314
import java.util.Collections;
1415
import java.util.List;
1516
import java.util.concurrent.ConcurrentHashMap;
@@ -23,6 +24,7 @@ public final class AutoZone extends Zone {
2324
*/
2425
private String[] ucServers;
2526
private ArrayList<RequestTransaction> transactions = new ArrayList<>();
27+
private FixedZone defaultZone;
2628

2729
private static final SingleFlight SingleFlight = new SingleFlight();
2830

@@ -39,17 +41,17 @@ public void setUcServers(String[] ucServers) {
3941
}
4042
}
4143

44+
public void setDefaultZones(FixedZone[] zones) {
45+
defaultZone = FixedZone.combineZones(zones);
46+
}
47+
4248
public List<String> getUcServerList() {
4349
if (ucServers != null && ucServers.length > 0) {
4450
ArrayList<String> serverList = new ArrayList<>();
4551
Collections.addAll(serverList, ucServers);
4652
return serverList;
4753
} else {
48-
ArrayList<String> serverList = new ArrayList<>();
49-
serverList.add(Config.preQueryHost02);
50-
serverList.add(Config.preQueryHost00);
51-
serverList.add(Config.preQueryHost01);
52-
return serverList;
54+
return Arrays.asList(Config.preQueryHosts());
5355
}
5456
}
5557

@@ -61,7 +63,7 @@ private String[] getUcServerArray() {
6163
if (ucServers != null && ucServers.length > 0) {
6264
return ucServers;
6365
} else {
64-
return new String[]{Config.preQueryHost00, Config.preQueryHost01};
66+
return Config.preQueryHosts();
6567
}
6668
}
6769

@@ -70,7 +72,8 @@ public ZonesInfo getZonesInfo(UpToken token) {
7072
if (token == null) {
7173
return null;
7274
}
73-
ZonesInfo zonesInfo = GlobalCache.getInstance().zonesInfoForKey(token.index());
75+
final String cacheKey = token.index();
76+
ZonesInfo zonesInfo = GlobalCache.getInstance().zonesInfoForKey(cacheKey);
7477
if (zonesInfo != null) {
7578
try {
7679
zonesInfo = (ZonesInfo) zonesInfo.clone();
@@ -137,12 +140,20 @@ public void complete(Object value) {
137140
completeHandler.complete(ResponseInfo.ParseError, responseInfo, requestMetrics);
138141
}
139142
} else {
140-
if (responseInfo.isNetworkBroken()) {
143+
if (responseInfo != null && responseInfo.isNetworkBroken()) {
141144
completeHandler.complete(ResponseInfo.NetworkError, responseInfo, requestMetrics);
142145
} else {
143-
ZonesInfo zonesInfoP = FixedZone.localsZoneInfo().getZonesInfo(token);
144-
if (zonesInfoP.isValid()) {
145-
GlobalCache.getInstance().cache(zonesInfoP, cacheKey);
146+
ZonesInfo info = null;
147+
if (defaultZone != null) {
148+
ZonesInfo infoP = defaultZone.getZonesInfo(token);
149+
if (infoP != null && infoP.isValid()) {
150+
infoP.toTemporary();
151+
info = infoP;
152+
}
153+
}
154+
155+
if (info != null) {
156+
GlobalCache.getInstance().cache(info, cacheKey);
146157
completeHandler.complete(0, responseInfo, requestMetrics);
147158
} else {
148159
completeHandler.complete(ResponseInfo.ParseError, responseInfo, requestMetrics);

library/src/main/java/com/qiniu/android/common/Config.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,10 @@ public final class Config {
7272
public static String preQueryHost01 = "api.qiniu.com";
7373
public static String preQueryHost02 = "kodo-config.qiniuapi.com";
7474

75+
public static String[] preQueryHosts() {
76+
return new String[]{preQueryHost00, preQueryHost02, preQueryHost01};
77+
}
78+
7579
/**
7680
* 当网络切换到 wifi 下,切换到此设置
7781
*/

library/src/main/java/com/qiniu/android/common/Constants.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33

44
public final class Constants {
5-
public static final String VERSION = "8.5.1";
5+
public static final String VERSION = "8.5.2";
66

77
public static final String UTF_8 = "utf-8";
88
}

library/src/main/java/com/qiniu/android/common/FixedZone.java

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -64,18 +64,28 @@ public final class FixedZone extends Zone {
6464
private ZonesInfo zonesInfo;
6565

6666
public static FixedZone localsZoneInfo() {
67-
ArrayList<FixedZone> localsZone = new ArrayList<>();
68-
localsZone.add((FixedZone)zone0);
69-
localsZone.add((FixedZone)zoneCnEast2);
70-
localsZone.add((FixedZone)zone1);
71-
localsZone.add((FixedZone)zone2);
72-
localsZone.add((FixedZone)zoneNa0);
73-
localsZone.add((FixedZone)zoneApNorthEast1);
74-
localsZone.add((FixedZone)zoneAs0);
67+
FixedZone[] localsZone = new FixedZone[]{
68+
(FixedZone) zone0, (FixedZone) zoneCnEast2,
69+
(FixedZone) zone1, (FixedZone) zone2,
70+
(FixedZone) zoneNa0, (FixedZone) zoneApNorthEast1,
71+
(FixedZone) zoneAs0,
72+
};
73+
74+
FixedZone zone = combineZones(localsZone);
75+
if (zone != null) {
76+
zone.zonesInfo.toTemporary();
77+
}
78+
return zone;
79+
}
80+
81+
public static FixedZone combineZones(FixedZone[] zones) {
82+
if (zones == null || zones.length == 0) {
83+
return null;
84+
}
7585

7686
ArrayList<ZoneInfo> zoneInfoArray = new ArrayList<>();
77-
for (FixedZone zone : localsZone){
78-
if (zone.zonesInfo != null && zone.zonesInfo.zonesInfo != null){
87+
for (FixedZone zone : zones) {
88+
if (zone.zonesInfo != null && zone.zonesInfo.zonesInfo != null) {
7989
zoneInfoArray.addAll(zone.zonesInfo.zonesInfo);
8090
}
8191
}
@@ -90,7 +100,7 @@ public FixedZone(ZoneInfo zoneInfo) {
90100
this.zonesInfo = new ZonesInfo(zoneInfoList);
91101
}
92102

93-
public FixedZone(ZonesInfo zonesInfo){
103+
public FixedZone(ZonesInfo zonesInfo) {
94104
this.zonesInfo = zonesInfo;
95105
}
96106

@@ -116,7 +126,7 @@ private ZonesInfo createZonesInfo(String[] upDomains,
116126

117127
List<String> upDomainsList = new ArrayList<String>(Arrays.asList(upDomains));
118128
List<String> oldUpDomainsList = null;
119-
if (oldUpDomains != null && oldUpDomains.length > 0){
129+
if (oldUpDomains != null && oldUpDomains.length > 0) {
120130
oldUpDomainsList = new ArrayList<String>(Arrays.asList(oldUpDomains));
121131
} else {
122132
oldUpDomainsList = new ArrayList<>();
@@ -139,7 +149,7 @@ public ZonesInfo getZonesInfo(UpToken token) {
139149

140150
@Override
141151
public void preQuery(UpToken token, QueryHandler completeHandler) {
142-
if (completeHandler != null){
152+
if (completeHandler != null) {
143153
completeHandler.complete(0, null, null);
144154
}
145155
}

library/src/main/java/com/qiniu/android/common/ZonesInfo.java

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import org.json.JSONObject;
55

66
import java.util.ArrayList;
7+
import java.util.Arrays;
78

89
public class ZonesInfo implements Cloneable {
910

@@ -23,24 +24,36 @@ public ZonesInfo(ArrayList<ZoneInfo> zonesInfo, boolean isTemporary) {
2324

2425
public static ZonesInfo createZonesInfo(JSONObject jsonObject) {
2526
ArrayList<ZoneInfo> zonesInfo = new ArrayList<>();
26-
try {
27-
if (jsonObject != null) {
27+
if (jsonObject != null) {
28+
try {
2829
JSONArray hosts = jsonObject.getJSONArray("hosts");
2930
for (int i = 0; i < hosts.length(); i++) {
3031
ZoneInfo zoneInfo = ZoneInfo.buildFromJson(hosts.getJSONObject(i));
3132
if (zoneInfo != null && zoneInfo.isValid()) {
3233
zonesInfo.add(zoneInfo);
3334
}
3435
}
36+
37+
} catch (Exception ignored) {
3538
}
36-
} catch (Exception ignored) {
3739
}
3840

3941
return new ZonesInfo(zonesInfo);
4042
}
4143

4244
public boolean isValid() {
43-
return zonesInfo != null && zonesInfo.size() > 0 && zonesInfo.get(0).isValid();
45+
if (zonesInfo == null || zonesInfo.size() == 0) {
46+
return false;
47+
}
48+
49+
boolean valid = true;
50+
for (ZoneInfo info : zonesInfo) {
51+
if (!info.isValid()) {
52+
valid = false;
53+
break;
54+
}
55+
}
56+
return valid;
4457
}
4558

4659
// 是否为临时 zone, 临时 zone,不建议长期使用
@@ -57,7 +70,7 @@ protected Object clone() throws CloneNotSupportedException {
5770
ArrayList<ZoneInfo> infos = new ArrayList<>();
5871
if (zonesInfo != null && zonesInfo.size() > 0) {
5972
for (ZoneInfo zoneInfo : zonesInfo) {
60-
infos.add((ZoneInfo)zoneInfo.clone());
73+
infos.add((ZoneInfo) zoneInfo.clone());
6174
}
6275
}
6376
ZonesInfo info = new ZonesInfo(infos);

0 commit comments

Comments
 (0)