Od jakiegoś czasu szukam sposobu na asynchroniczne pobieranie wielu obrazów i przechowywanie ich w tablicy. Mam świetny przykład tego, który jest używany na listach, ale chciałbym mieć sposób na ich pobranie i wykorzystanie ich później. Dziękuje za przeczytanie. Każda sugestia byłaby bardzo mile widziana.

2
MR Mido 24 czerwiec 2011, 22:32

2 odpowiedzi

Najlepsza odpowiedź

Spróbuj czegoś takiego:

public void onClick(View v) {
    new DownloadImageTask().execute("http://example.com/image.png");
}

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
     protected Bitmap doInBackground(String... urls) {
         return loadImageFromNetwork(urls[0]);
     }

     protected void onPostExecute(Bitmap result) {
         //Do something with bitmap eg:
         mImageView.setImageBitmap(result);
     }
 }

 private Bitmap loadImageFromNetwork(String url){
      try {
          Bitmap bitmap = BitmapFactory.decodeStream((InputStream)new URL(imageURL).getContent());
          return bitmap;
      } catch (Exception e) {
          e.printStackTrace();
    }
 }
5
Kenny 24 czerwiec 2011, 23:32
Dziękuję za szybką odpowiedź, ale wydaje mi się, że pojawia się błąd: protected Bitmap doInBackground(String...urls) { return loadImageFromNetwork(urls[0]); } Narzeka na instrukcję return: " return loadImageFromNetwork(urls[0]);"
 – 
MR Mido
24 czerwiec 2011, 23:04
Ponieważ później w kodzie, który ustawisz: private void loadImageFromNetwork(String url)
 – 
MR Mido
24 czerwiec 2011, 23:05
Przepraszam tak, edytowałem kod, aby to poprawić, teraz loadImageFromNetwork zwraca bitmapę! Ups!
 – 
Kenny
24 czerwiec 2011, 23:33
Przepraszam, że trochę oszukałem kod i działa. Dziękuję Ci!!!
 – 
MR Mido
28 czerwiec 2011, 04:22
Dzięki za to niezwykle proste rozwiązanie! A+++ zaimplementowałbym ponownie
 – 
Thomson Comer
20 wrzesień 2011, 23:53

Musisz zmienić nowy URL(imageURL) -> nowy URL(url)

I umieść zwracany typ, pod "e.printStackTrace();" (zwróć null;)

Sprawdziłem, czy działa.

0
user3274243 5 luty 2014, 12:11