2009-07-21 9 views

Répondre

5

vous pouvez utiliser le code suivant pour télécharger une image:

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(); 

Nécessite l'autorisation suivante dans AndroidManifest.xml:

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

Et cast la connexion à HttpURLConnection si vous souhaitez définir les en-têtes et lire le code d'état. – ThomasRS

5

Il existe une bibliothèque cliente HTTP qui peut être prise en charge dans Android maintenant, mais pour tout contrôle de grain fin, vous pouvez utiliser l'URL & HttpURLConnection. le code ressemblera à quelque chose comme ceci:

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); 

où getResponse() ressemble à quelque chose comme ça, dans votre cas, vous obtenez un tas de données binaires en arrière, vous voudrez peut-être changer le StringBuffer à un tableau d'octets et tronquer les lectures par un incrément plus grand.

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 ""; 
} 

Comme vous parlez de données d'image qui peut être grand, d'autres choses que vous devez être assidues à propos dans Android est de vous libérer votre mémoire dès que vous le pouvez, vous avez seulement 16 Mo de tas jouer avec pour toutes les applications et il épuise rapidement et le GC vous conduira les noix si vous n'êtes pas vraiment bon de redonner des ressources mémoire

+0

Est-ce que l'émulateur lors de l'exécution sur le bureau permettent à l'application de se connecter l'Internet ?? Je pense que mon émulateur ne permet pas à l'appareil de se connecter à Internet. –

+1

oui, la pile réseau sera émulée – jottos

11

Ne pas oublier de donner à l'application l'autorisation de se connecter au Web,

dans le AndroidManifest.xml:

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