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.
fonte
2016-10-05 10:49:30
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
Ma non l'ho chiamato dal thread e funziona bene per me. Potete per favore chiarirlo. Grazie. –
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