Android HttpURLConnection и URL со специальными символами

Рассмотрим следующий код (который извлекает ответ из 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?

5
задан William Seemann 6 December 2011 в 04:05
поделиться