pda/zhuike/.svn/pristine/b3/b321ead8f3a94906cff14c81e11...

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 "";
}
}