Не удается получить расширенный URL-адрес с данного сокращенного URL-адреса - PullRequest
0 голосов
/ 12 мая 2018

Мне дан сокращенный URL, и я хочу получить расширенную форму.Приведенная ниже функция Java используется для достижения этой цели.

public String expand(String shortenedUrl){
        URL url = null;
        try {
            url = new URL(shortenedUrl);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        // open connection
        HttpURLConnection httpURLConnection = null;
        try {
            httpURLConnection = (HttpURLConnection) url.openConnection(Proxy.NO_PROXY);
        } catch (IOException e) {
            e.printStackTrace();
        }

        // stop following browser redirect
        httpURLConnection.setInstanceFollowRedirects(false);
        // extract location header containing the actual destination URL
        String expandedURL = httpURLConnection.getHeaderField("Location");
        httpURLConnection.disconnect();


        return expandedURL;
    }

Код отлично работает в Eclipse, но то же самое не работает в Android.

String expandedURL = httpURLConnection.getHeaderField("Location");

Приведенная выше строка выдает java.lang.RuntimeException: Unable to start activity ComponentInfo.И ошибка указана на вышеуказанную строку.Если я удалю вышеуказанную строку, ошибки не возникнет.Даже я не могу использовать функцию getResponseCode().

int status = 0;
    try {
        status = httpURLConnection.getResponseCode();
    } catch (IOException e) {
        e.printStackTrace();
    }

Эта часть кода также имеет ту же проблему.работает в затмении, но не в Android.

Любая помощь будет принята с благодарностью.

Редактировать: Код с использованием функции выше,

ExpandUrl expandUrl = new ExpandUrl();
String expandedUrl = expandUrl.expand(shortenedUrl);

Примечание. Функция раскрытия определяется внутри class ExpandUrl.

1 Ответ

0 голосов
/ 13 мая 2018

Ну, код работает в Eclipse, но не в Android. Причина в том, что вы делаете это в главном потоке и блокируете его. Android не позволит вам сделать это и выдать ошибку во время выполнения.

Я пытался реализовать ваш код, используя AsyncTask в Android. Работает нормально. Попробуйте.

Чтобы узнать больше о AsyncTask, следуйте: Документация Android на AsyncTask

Удачи!

...