Autore Topic: ImageView con immagine da sito web  (Letto 1276 volte)

Offline roccia80

  • Utente junior
  • **
  • Post: 89
  • Respect: 0
    • Mostra profilo
ImageView con immagine da sito web
« il: 29 Giugno 2012, 08:00:03 CEST »
0
Ciao ragazzi,
sto cercando di realizzare una piccola app android che faccia da RssReader per un sito web. E' composta da uno splashscreen e da due semplici activity: quella con la lista delle news e quella di visualizzazione di testo e dettagli di ogni singola news.
Nella prima activity, la lista delle news è una ListView con CustomAdapter e ogni componente della lista è formato da immagine news + testo news. Ovviamente, dell'immagine, conosco solamente l'url (es.: http://miosito.it/images/1.jpg). In una prima soluzione, caricavo l'immagine dalla rete utilizzando il seguente codice:
Codice (Java): [Seleziona]
public static Drawable LoadImageFromWebOperations_(String url)
    {
        try{
                InputStream is = (InputStream) new URL(url).getContent();
                Drawable d = Drawable.createFromStream(is, "src name");
                return d;
        }catch (Exception e) {
                System.out.println("Exc="+e);
                return null;
        }
    }
Ma la lista, che contiene 10 news, era molto lenta nello scorrimento, quasi inutilizzabile.

Allora ho deciso di cambiare metodo e di scaricare, durante il lancio della app, i dati del feed rss e anche le immagini con il seguente codice:
Codice (Java): [Seleziona]
        public static Bitmap VisualImage(String folder,String filename) {
                String path = Environment.getExternalStorageDirectory().toString() + "/" + folder + "/" + filename;
                Bitmap bmp = BitmapFactory.decodeFile(path);
                return bmp;
        }
       
        public static void DownloadImage(String imageUrl, String folder)      
    {
        InputStream is = null;
        if((imageUrl == null) || (imageUrl.length() == 0) || (imageUrl == " "))
        {
            System.out.println("No need to download images now");
        }
        else
        {
            System.gc();
            String ImageName = null;
            URL myFileUrl =null;
            String path = Environment.getExternalStorageDirectory().toString() + "/" + folder + "/";

            FileOutputStream outStream = null;
            File file = new File(path);

            if(!file.exists())
                file.mkdirs();  

            File outputFile;

            try {  
                myFileUrl= new URL(imageUrl.trim());
                HttpURLConnection conn= (HttpURLConnection)myFileUrl.openConnection();
                conn.setRequestMethod("GET");
                conn.setDoInput(true);
                conn.setConnectTimeout(20000);
                conn.connect();
                is = conn.getInputStream();
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                    e.printStackTrace();
            }

            int index = (imageUrl.split("/").length)-1;
            ImageName = imageUrl.split("/")[index];

            try {
                outputFile = new File(file, ImageName);

                if(outputFile.exists())                
                {
                        System.out.println("No need to download image it already exist");
                    outputFile.delete();
                }
                outputFile.createNewFile();

                outStream = new FileOutputStream(outputFile);
                BufferedInputStream bis = new BufferedInputStream(is);

                ByteArrayBuffer baf = new ByteArrayBuffer(50);

                int current = 0;
                while ((current = bis.read()) != -1)
                    baf.append((byte) current);
               
                outStream.write(baf.toByteArray());
                outStream.close();

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }  
        }
    }  

Secondo voi, quale può essere l'approccio migliore? Fare download del materiale o basarsi sulla connessione attiva e far visualizzare immagini direttamente dalla rete? Ogni consiglio, anche su come migliorare gli script sopra riportati, sono ben accetti. Grazie Ciao

Offline andre9004

  • Nuovo arrivato
  • *
  • Post: 33
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Lg Optimus Hub
  • Sistema operativo:
    Windows 7
Re:ImageView con immagine da sito web
« Risposta #1 il: 29 Giugno 2012, 11:07:27 CEST »
0
io faccio cosi...

Codice (Java): [Seleziona]
                Bitmap getBitmapFromURL(String src) {
                        try {
                                URL url = new URL(src);
                                HttpURLConnection connection = (HttpURLConnection) url
                                                .openConnection();
                                connection.setDoInput(true);
                                connection.connect();
                                InputStream input = connection.getInputStream();
                                Bitmap myBitmap = BitmapFactory.decodeStream(input);
                                return myBitmap;
                        } catch (Exception e) {
                                e.printStackTrace();
                                return null;
                        }
                }

ciaoo

Offline gabric

  • Utente senior
  • ****
  • Post: 613
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Re:ImageView con immagine da sito web
« Risposta #2 il: 29 Giugno 2012, 17:18:55 CEST »
0
 Ma in questo modo non rischi d riempire la mia memoria del tuo cell? Si dovrebbe metter un controllo per la eliminare il le foto all'uscita

Offline roccia80

  • Utente junior
  • **
  • Post: 89
  • Respect: 0
    • Mostra profilo
Re:ImageView con immagine da sito web
« Risposta #3 il: 29 Giugno 2012, 19:29:37 CEST »
0
Ma in questo modo non rischi d riempire la mia memoria del tuo cell? Si dovrebbe metter un controllo per la eliminare il le foto all'uscita

Le immagini vengono salvate su sdcard. Ogni volta che si lancia l'applicazione o quando si preme il pulsante "aggiorna", vengono eliminate le immagini presenti e salvate solo quelle delle news presenti attualmente nel feed rss.

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:ImageView con immagine da sito web
« Risposta #4 il: 30 Giugno 2012, 11:53:44 CEST »
0
Dai un occhio a questa libreria, è fatta apposta per fare il download ed il caching delle immagini:

https://github.com/novoda/ImageLoader