2015-10-06 4 views
0

Я не могу понять, как заставить этот код работать в AsyncTask, я искал несколько примеров, но он продолжает сбой. Я нашел этот простой код в Интернете, и я хочу его адаптировать, чтобы получить URL-адрес из текстового поля и получить код HTML. Я узнал, что это должно быть в AsyncTask, иначе это не сработает, но даже в AsyncTask я не могу заставить его работать. Вот мой код:Как я могу сделать этот код AsyncTask?

String ETURL = ETURLInput.getText().toString(); 

try { 
    URL TestURL = new URL(ETURL); 

    BufferedReader bufferReader = new BufferedReader(
        new InputStreamReader(TestURL.openStream())); 

    String outputCode; 
    while ((outputCode = bufferReader.readLine()) != null) 
    TVCode.setText(outputCode); 
    bufferReader.close(); 
} catch (Exception e) { 
    TVCode.setText("Oops, something went wrong.") 

} 

} 

Это код, который необходимо выполнить внутри ActionListener. Поэтому, когда я нажимаю кнопку, он должен выполнить этот код в AsyncTask.

Надеюсь, кто-то может мне помочь в этом.

+0

Как угадать, ваш 'AsyncTask' рушится, потому что вы пытаетесь обновить пользовательский интерфейс (с помощью ваших' setText' вызовов) от 'doInBackground' , Ваша ошибка из 'LogCat', и код для вашей попытки переместить этот код в' AsyncTask' поможет. – PPartisan

+0

@PPartisan Спасибо за ваш ответ. Я пробовал это, и я получаю следующие ошибки: вызвано: java.net.MalformedURLException: протокол не найден: ,,,, java.lang.RuntimeException: Произошла ошибка при выполнении doInBackground() ,,,,, java.lang. SecurityException: Permission denied (отсутствует разрешение INTERNET?). Я правильно использую интернет-разрешение, поэтому я понятия не имею, почему он дает эту ошибку. – JI38D

+0

В этом случае вы видели другие ответы, связанные с этим сообщением об ошибке? То есть [Разрешение отклонено (отсутствует разрешение INTERNET?)] (Http://stackoverflow.com/questions/25135595/permission-denied-missing-internet-permission) – PPartisan

ответ

0

Вы забыли добавить openConnection, добавьте это: URLConnection conn = TestURL.openConnection(); после создания вашего объекта URL.

Чтобы заставить его работать с помощью асинхронизации, вы можете сохранить свою строку в переменной класса, возвращая ее в doInBackGround и используя ее в своем onPostExecute.

Пример метода вы можете создать в вашем AsyncTask:

protected String getContentUrl(String URL) { 
    String line=null; 
    String result=""; 
    try { 
    try { 
     URL url; 
     // get URL content 
     url = new URL(URL); 
     URLConnection conn = url.openConnection(); 

     // open the stream and put it into BufferedReader 
     BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
     line=br.readLine(); 
     while (line!= null) { 
     result=result+line; 
     line=br.readLine(); 
     } 
     //System.out.print(result); 
     br.close(); 

     return result; 
    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    } catch (Exception e) { 
    e.printStackTrace(); 
    } 

    return null; 

Тогда вы получите свой результат этот путь на doInBackGround:

getContentUrl(YOUR URL HERE) 

сохранить это значение в виде строки, и вернуть его. Затем вы можете использовать его в onPostExecute

Надеются, что это помогает :)

Смежные вопросы