На этот вопрос уже есть ответ:
Я пытаюсь отобразить изображение из Интернета со следующим кодом:
try {
final ImageView prueba2 = (ImageView) view.findViewById(R.id.pruebaImagen);
URL url = new URL("http://www.expertoanimal.com/es/images/9/7/5/img_nombres_para_perros_originales_y_bonitos_5579_paso_1_600.jpg");
Bitmap bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
prueba2.setImageBitmap(bmp);
}
catch (IOException e) {
e.printStackTrace();
}
И это дает мне следующую ошибку:
Процесс: com .dedicables.videos.dedicable, PID: 24788 android.os.NetworkOnMainThreadException на android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork (StrictMode.java:1145) на java.net.InetAddress.lookupHostByName (InetAddress )j net.InetAddress.getAllByNameImpl (InetAddress.java:236) на java.net.InetAddress.getAllByName (InetAddress.java:214) на com.android.okhttp.internal.Dns $ 1.getAllByName (Dns.java:28) android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress (RouteSelector.java:216) в com.android.okhttp.internal.http.RouteSelector.next (RouteSelector.java:122) в com.proid.ok.h HttpEngin e.connect (HttpEngine.java:292) на com.android.okhttp.internal.http.HttpEngine.sendSocketRequest (HttpEngine.java:255) на com.android.okhttp.internal.http.HttpEngine.sendRequest ( 206) по адресу com.android.okhttp.internal.http.HttpURLConnectionImpl.execute (HttpURLConnectionImpl.java:345) по адресу com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse (Httpwww.jpg) .internal.http.HttpURLConnectionImpl.getInputStream (HttpURLConnectionImpl.java:179) в com.dedicables.videos.dedicable.Views.Login.Login.onCreateView (Login.java:92)
ошибка в следующей строке:
Bitmap bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
Я пробовал несколько URL-адресов, и я все еще получаю ту же ошибку
Ты входишь в систему в главном трэде. Ты должен перемещать эту просьбу во второстепенный трэд. Для этого ты можешь использовать один AsyncTask
(в этом случае этот класс будет содержаться внутри класса, который приносит твой код)
class GetImageAsync extends AsyncTask<String, Void, Bitmap> {
@Override
protected Bitmap doInBackground(String... params) {
URL url = new URL(params[0]);
Bitmap bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
return bmp;
}
@Override
protected void onPostExecute(Bitmap bmp) {
prueba2.setImageBitmap(bmp);
}
}
Потом ты будешь должен изменять твой код, для того, чтобы ты ImageView
prueba2 был переменной класса, чтобы мочь соглашаться на нее с AsyncTask
и ты будешь должен создавать такую:
Android
он - несовершеннолетний API 11: new GetImageAsync().execute("http://www.expertoanimal.com/es/images/9/7/5/img_nombres_para_perros_originales_y_bonitos_5579_paso_1_600.jpg");
Android
он превосходящий или равен API 11: new GetImageAsync().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "http://www.expertoanimal.com/es/images/9/7/5/img_nombres_para_perros_originales_y_bonitos_5579_paso_1_600.jpg");
В этой ссылке у тебя есть достаточно больше информации на AsyncTask
: http://jarroba.com/asynctask-en-android/
Приветствие.
Ошибка
NetworkOnMainThreadException : он вызывается, когда ты стараешься реализовывать операции в главной нити (Main thread), что неправильный.
связан с, что реализует задание в главной нити, что неправильное, ты можешь использовать Asynctask или просто runOnUiThread () , что в этом случае serГ - в идеальное, так как ты реализуешь только процесс разряда.
runOnUiThread(new Runnable() {
@Override
public void run() {
try {
final ImageView prueba2 = (ImageView) view.findViewById(R.id.pruebaImagen);
URL url = new URL("http://www.expertoanimal.com/es/images/9/7/5/img_nombres_para_perros_originales_y_bonitos_5579_paso_1_600.jpg");
Bitmap bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
prueba2.setImageBitmap(bmp);
} catch (IOException e) {
e.printStackTrace();
}
}
});
могут tambiГ©n использовать AsyncTask , проверяют этот вопрос:
Ошибка android.os. NetworkOnMainThreadException в использовании Ттпурльконнектион де Андроид