Рассмотрим следующий код (который получает ответ от HTTP-запроса и печатает его). ПРИМЕЧАНИЕ. Этот код работает в стандартном приложении Java. Проблема возникает только при использовании кода в приложении Android.
public class RetrieveHTMLTest {
public static void main(String [] args) {
getListing(args[0);
}
public static void getListing(String stringURL) {
HttpURLConnection conn = null;
String html = "";
String line = null;
BufferedReader reader = null;
URL url = null;
try {
url = new URL(stringURL);
conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(6000);
conn.setReadTimeout(6000);
conn.setRequestMethod("GET");
reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
conn.connect();
while ((line = reader.readLine()) != null) {
html = html + line;
}
System.out.println(html);
reader.close();
conn.disconnect();
} catch (Exception ex) {
ex.printStackTrace();
} finally {
}
}
}
Если я предоставлю URL:
http://somehost/somepath/
Следующий код работает нормально. Но если я изменю URL на:
http://somehost/somepath [комментарий] /
Код генерирует исключение тайм-аута из-за символов «[» и «]».
Если я изменю URL-адрес на:
http://somehost/somepath%20%5Ba%20comment%5D/
Код работает отлично. Опять же, потому что символы "[" и "]" отсутствуют.
У меня вопрос, как мне получить URL:
http://somehost/somepath [комментарий] /
в следующем формате:
http://somehost/somepath%20%5Ba%20comment%5D/
Кроме того, следует ли мне продолжать использовать HttpURLConnection в Android, поскольку он не может принимать URL со специальными символами? Если стандарт всегда конвертировать URL перед использованием HttpURLConnection?