73 lines
1.8 KiB
Plaintext
73 lines
1.8 KiB
Plaintext
|
package com.novelbook.android.netapi;
|
||
|
|
||
|
import java.util.Random;
|
||
|
|
||
|
|
||
|
import org.json.JSONArray;
|
||
|
import org.json.JSONException;
|
||
|
import org.json.JSONObject;
|
||
|
|
||
|
public class RandomHost {
|
||
|
|
||
|
private static final int MAX = 5;
|
||
|
private static final Random random = new Random();
|
||
|
//private static final Map<String, int[]> indexsMap = new HashMap<String, int[]>();
|
||
|
|
||
|
private JSONObject hosts = null;
|
||
|
private String uri = null;
|
||
|
|
||
|
private int[] indexs = new int[10];
|
||
|
|
||
|
public RandomHost(JSONObject hosts, String uri) throws JSONException {
|
||
|
this.hosts = hosts;
|
||
|
this.uri = uri;
|
||
|
String hostName = UrlFactory.getHost(uri);
|
||
|
indexs = new int[MAX];
|
||
|
JSONArray us = hosts.getJSONArray(hostName);
|
||
|
int maxFixIndex = us == null ||us.length()==0 ? 0 :us.length();
|
||
|
if (maxFixIndex > 0) {
|
||
|
randomFill(indexs, 0, 0, maxFixIndex - 1);
|
||
|
}
|
||
|
for (int i = maxFixIndex; i < MAX; i++) {
|
||
|
indexs[i] = i;
|
||
|
}
|
||
|
//randomFill(indexs, maxFixIndex, maxFixIndex, MAX - 1);
|
||
|
}
|
||
|
|
||
|
private static boolean in(int[] values, int maxIndex, int value) {
|
||
|
for (int i = 0; i <= maxIndex; i++) {
|
||
|
if (values[i] == value) return true;
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
private static void randomFill(int[] indexs, int fromIndex, int min, int max) {
|
||
|
for (int i = min; i <= max; i++) {
|
||
|
while (true) {
|
||
|
int value = random.nextInt(max + 1);
|
||
|
if (value < min) continue;
|
||
|
if (in(indexs, fromIndex + i - min - 1, value)) continue;
|
||
|
indexs[ fromIndex + i - min] = value;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private int currentIndex = 0;
|
||
|
public String next() {
|
||
|
if (indexs == null || indexs.length == 0) return "";
|
||
|
if (currentIndex >= indexs.length) {
|
||
|
return "";
|
||
|
}
|
||
|
else {
|
||
|
try {
|
||
|
return UrlFactory.getUrl(hosts, uri, indexs[currentIndex++]);
|
||
|
} catch (JSONException e) {
|
||
|
e.printStackTrace();
|
||
|
}
|
||
|
}
|
||
|
return "";
|
||
|
}
|
||
|
}
|