2016-01-19 3 views
0

Привет могли бы вы помочь мне выяснить, почему мое приложение перестает работать, когда я хочу, чтобы загрузить изображение из URL, вот кодAndroid-студия, загрузка изображения форма URL/приложение перестало работать

public void getOnClick(View view) throws IOException { 

    urlAdress = new URL("http://www.cosmeticsurgerytruth.com/blog/wp-  content/uploads/2010/11/Capri.jpg"); 
    InputStream is = urlAdress.openStream(); 
    filename = Uri.parse(urlAdress.toString()).getLastPathSegment(); 
    outputFile = new File(context.getCacheDir(),filename); 
    OutputStream os = new FileOutputStream(outputFile); 
    byte[] b = new byte[2048]; 
    int length; 

    while ((length = is.read(b)) != -1) { 
     os.write(b, 0, length); 

     is.close(); 
     os.close(); 

Я был также пытаясь использовать код от подобных тем, но я получаю же сообщение

Ваше приложение перестало работать

и выключается

+0

пожалуйста вывесить журнал –

+0

@vspallas У Вас есть какие-либо идеи ? Кажется, что легкая вещь –

ответ

0
Caused by: android.os.NetworkOnMainThreadException 

Проблема в том, что вы пытаетесь загрузить изображение из UIThread. Вы должны создать класс, который простирается до класса AsyncTask и сделать загрузку по методу doInBackground

private class DownloadAsync extends AsyncTask<Void, Void, Void> { 

     private Context context; 

     DownloadAsync(Context context) { 
      this.context = context; 
     } 

     @Override 
     protected Void doInBackground(Void... params) { 
      try { 

       URL urlAdress = urlAdress = new URL("http://www.cosmeticsurgerytruth.com/blog/wp-  content/uploads/2010/11/Capri.jpg"); 
       InputStream is = urlAdress.openStream(); 
       String filename = Uri.parse(urlAdress.toString()).getLastPathSegment(); 
       File outputFile = new File(context.getCacheDir(), filename); 
       OutputStream os = new FileOutputStream(outputFile); 
       byte[] b = new byte[2048]; 
       int length; 

       while ((length = is.read(b)) != -1) { 
        os.write(b, 0, length); 

        is.close(); 
        os.close(); 

        return null; 
       } 
      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

      return null; 
     } 

    } 

Затем вы можете выполнить как этот

public void getOnClick(View view){ 
    new DownloadAsync(this).execute(); 
} 
+0

спасибо человеку, но ... после нажатия кнопки ничего не происходит epic frustration –

+0

что вы имеете в виду? –

+0

i Нажмите кнопку, и я предполагаю, что изображение с url будет сохранено на моем устройстве? поэтому после того, как я нажму свою кнопку, ничего не происходит, я пытался искать файл везде на моем телефоне, но его нет :( –