Ошибка отображения изображения из интернета на Android [дубликат]

На этот вопрос уже есть ответ:

Я пытаюсь отобразить изображение из Интернета со следующим кодом:

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-адресов, и я все еще получаю ту же ошибку

1
задан 07.07.2016, 13:41
2 ответа

Ты входишь в систему в главном трэде. Ты должен перемещать эту просьбу во второстепенный трэд. Для этого ты можешь использовать один 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/

Приветствие.

0
ответ дан 24.11.2019, 13:53

Ошибка

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 в использовании Ттпурльконнектион де Андроид

0
ответ дан 24.11.2019, 13:53