2009-07-21 10 views

risposta

5

è possibile utilizzare il seguente codice per scaricare un'immagine:

URLConnection connection = uri.toURL().openConnection(); 
connection.connect(); 
InputStream is = connection.getInputStream(); 
BufferedInputStream bis = new BufferedInputStream(is, 8 * 1024); 
Bitmap bmp = BitmapFactory.decodeStream(bis); 
bis.close(); 
is.close(); 

Richiede la seguente autorizzazione in AndroidManifest.xml:

<uses-permission android:name="android.permission.INTERNET" /> 
+0

E inoltrare la connessione a HttpURLConnection se si desidera impostare le intestazioni e leggere il codice di stato. – ThomasRS

5

Esiste una libreria client HTTP che potrebbe essere supportata in Android ora, ma per qualsiasi controllo a grana fine è possibile utilizzare l'URL & HttpURLConnection. il codice sarà simile a questa:

URL connectURL = new URL(<your URL goes here>); 
HttpURLConnection conn = (HttpURLConnection)connectURL.openConnection(); 

// do some setup 
conn.setDoInput(true); 
conn.setDoOutput(true); 
conn.setUseCaches(false); 
conn.setRequestMethod("GET"); 

// connect and flush the request out 
conn.connect(); 
conn.getOutputStream().flush(); 

// now fetch the results 
String response = getResponse(conn); 

dove getResponse() simile a questa, nel tuo caso hai trovato un mucchio di dati binari indietro si potrebbe desiderare di cambiare lo StringBuffer ad un array di byte e pezzo le letture da un incremento maggiore.

private String getResponseOrig(HttpURLConnection conn) 
{ 
    InputStream is = null; 
    try 
    { 
     is = conn.getInputStream(); 
     // scoop up the reply from the server 
     int ch; 
     StringBuffer sb = new StringBuffer(); 
     while((ch = is.read()) != -1) { 
      sb.append((char)ch); 
     } 
     return sb.toString(); 
    } 
    catch(Exception e) 
    { 
     Log.e(TAG, "biffed it getting HTTPResponse"); 
    } 
    finally 
    { 
     try { 
     if (is != null) 
      is.close(); 
     } catch (Exception e) {} 
    } 

    return ""; 
} 

Come si sta parlando di dati di immagine che può essere di grandi dimensioni, le altre cose che dovete essere assidui circa in Android è fare in modo di rilasciare la memoria non appena si può, hai solo 16 MB di memoria riservata per giocare con per tutte le applicazioni e si esaurisce velocemente e il GC sarà farti impazzire se non si è veramente buono di restituire le risorse di memoria

+0

fa l'emulatore quando si esegue sul desktop consentono l'applicazione a cui connettersi internet ?? Penso che il mio emulatore non permetta al dispositivo di connettersi a internet. –

+1

sì, lo stack di rete verrà emulato – jottos

11

Non dimenticate di dare l'applicazione del permesso di connettersi al Web,

nel AndroidManifest.xml:

<uses-permission android:name="android.permission.INTERNET" />