2013-02-14 10 views
8

Sto cercando una funzione di base. Sto provando a progettare un'applicazione e tutto ciò che voglio è caricare un'immagine da un URL. Ho trovato alcune domande e siti Web, ma sembrano tutti vecchi e datati, ma quello che penso di avere problemi è il collegamento del codice all'attività main.xml per ImageView.App per Android Immagine di visualizzazione da URL

Qualsiasi suggerimento o collegamento che abbia io apprezzo molto, grazie.

risposta

11

Ecco, è così che la visualizzazione delle immagini dal url nella visualizzazione dell'immagine
si deve chiamare questo codice da filo diverso thread principale

ImageView img = (ImageView) findViewById(R.id.imageView1); 
try { 
     URL url = new URL("Your URL"); 
     //try this url = "http://0.tqn.com/d/webclipart/1/0/5/l/4/floral-icon-5.jpg" 
     HttpGet httpRequest = null; 

     httpRequest = new HttpGet(url.toURI()); 

     HttpClient httpclient = new DefaultHttpClient(); 
     HttpResponse response = (HttpResponse) httpclient 
       .execute(httpRequest); 

     HttpEntity entity = response.getEntity(); 
     BufferedHttpEntity b_entity = new BufferedHttpEntity(entity); 
     InputStream input = b_entity.getContent(); 

     Bitmap bitmap = BitmapFactory.decodeStream(input); 

     img.setImageBitmap(bitmap); 

    } catch (Exception ex) { 

    } 

Fare attenzione a non dimenticare di circondare il codice con try catch (ho già fatto in questo codice)

oppure è possibile utilizzare WebView per caricare un'immagine da url

WebView web = (WebView) findViewById(R.id.webView1); 
web.loadUrl("Your Url"); 

se si sta cercando di caricare l'immagine dall'URL cartella Assets avrà inizio come questo "file: ///android_asset/yourimage.jpg"
altro normale internet URL come questo "http://0.tqn.com/d/webclipart/1/0/5/l/4/floral-icon-5.jpg"

speranza questo funziona per voi Good Luck

+1

Provo a modificare il tuo post ma penso che in qualche modo la risposta non è ancora stata aggiornata. Puoi inserire una nota aggiuntiva nella risposta con caratteri in grassetto che menzionano che devi chiamare questo codice dal thread diverso dal thread principale. – VendettaDroid

+0

Ma non l'ho chiamato dal thread e funziona bene per me. Potete per favore chiarirlo. Grazie. –

+1

Android ha ora una politica rigorosa su qualsiasi comunicazione di rete. Dovresti provare di nuovo questo codice. Il codice che hai scritto può richiedere un po 'di tempo per ottenere l'immagine dall'url remoto a seconda della velocità della rete e della dimensione dell'immagine. Se chiami questo codice dall'interfaccia utente, c'è la possibilità che il tuo thread dell'interfaccia utente venga bloccato e ti fornisca ANR. Prova questo codice su ICS se puoi. Probabilmente dovrebbe dare un'eccezione "NetWorkOnMainThread". oppure puoi semplicemente cercare su Google questa eccezione. – VendettaDroid

0

È possibile scattare l'immagine e al vostro fianco php convertirlo in un Base64 e poi sul lato Android decodificarlo in un'immagine.

0

La procedura consigliata per scaricare l'immagine deve essere eseguita sullo sfondo Thread, in modo che non interrompa il thread principale, quindi aggiorna l'interfaccia utente secondo necessità.

public class MainActivity estende AppCompatActivity {

FrameLayout frameLayout; 
ImageView imageView; 
ProgressBar progressBar; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    frameLayout= (FrameLayout) findViewById(R.id.containerlayout); 
    imageView= (ImageView) findViewById(R.id.imageView); 
    progressBar= (ProgressBar) findViewById(R.id.progressBar); 

    String url="http://www.flat-e.com/flate5/wp-content/uploads/cover-960x857.jpg"; 
    MyTask myTask= new MyTask(); 
    myTask.execute(url); 
} 
class MyTask extends AsyncTask<String, Void, Bitmap> { 

    @Override 
    protected void onPreExecute() { 
     progressBar.setVisibility(View.VISIBLE); 
    } 

    @Override 
    protected Bitmap doInBackground(String... voids) { 

     Bitmap bitmap=null; 
     try { 
      URL url =new URL(voids[0]); 
      HttpURLConnection connection= (HttpURLConnection) url.openConnection(); 
      InputStream inputStream= connection.getInputStream(); 
      bitmap = BitmapFactory.decodeStream(inputStream); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return bitmap; 
    } 

    @Override 
    protected void onPostExecute(Bitmap bitmap) { 
     progressBar.setVisibility(View.GONE); 
     imageView.setImageBitmap(bitmap); 

    } 
} 

}

Qui, in questo esempio ho creato un MyTask classe interna che estende l'AsyncTask dove ho fatto tutte le mie operazioni di rete. Assicurati di aggiungere l'autorizzazione Usa nel file manifest.

Spero che questo funzioni anche per te.