0
大家歡樂週五!Android:當網絡連接發生變化時,DNS Java SRV查找失敗
我的Android應用程序依靠DNS Java(http://www.dnsjava.org/doc/)執行SRV查找。我們剛剛發現,如果網絡連接發生變化(從LTE切換到WiFi或反之亦然),則從此以後的每次查找都會永久超時,無論新網絡上是否再次建立互聯網連接。有時候,這可以通過切換回舊網絡來解決,但如果更改次數過多,則無法恢復。以下是我們在下面使用的代碼。
如果我可以提供任何其他細節,請讓我知道。非常感謝幫助!
private static class ConfigUpdater extends AsyncTask<Void, Void, JsonConfig> {
private static final String SRV_RUE_CONFIG_PREFIX = "_rueconfig._tls.";
ConfigListener listener;
String request_url;
String query_url;
String username, password;
String errorMsg;
public ConfigUpdater(String url, String username, String password, ConfigListener listener) {
this.username = username;
this.password = password;
this.listener = listener;
query_url = SRV_RUE_CONFIG_PREFIX + url;
errorMsg = "Failed to Login";
org.xbill.DNS.ResolverConfig.refresh();
}
@Override
protected JsonConfig doInBackground(Void... params) {
Record[] records;// = new Record[0];
try {
Lookup configLookup = new Lookup(query_url, Type.SRV);
configLookup.setCache(null);
records = configLookup.run();
} catch (TextParseException e) {
e.printStackTrace();
return null;
}
if(records != null && records.length > 0) {
for (Record record : records) {
SRVRecord srv = (SRVRecord) record;
String hostname = srv.getTarget().toString().replaceFirst("\\.$", "");
request_url = "https://" + hostname + "/config/v1/config.json";
Log.d("Auto Config request_url: "+request_url);
}
try {
String reponse_str = getFromHttpURLConnection();
Log.d("Auto Config JSON: "+reponse_str);
return parseJson(username, reponse_str, request_url);
} catch (Throwable e){
Log.d("Issue parsing json");
e.printStackTrace();
}
}
return null;
}
謝謝!它適用於ResolverConfig.refresh(); 我的代碼連接發生了變化:org.xbill.DNS.ResolverConfig.refresh(); lookup.setResolver(new ExtendedResolver()); –