2014-12-26 2 views
0

Я хочу, чтобы загрузить изображение из URL, и я использую этот код:Загрузить изображение из URL

URL url = new URL(myurl); 
Bitmap bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream()); 
imageView.setImageBitmap(bmp); 

Я бегу приложение на устройстве с Android 2.3 и работает нормально, но в другом устройстве с Android 4.4 приложение сбои и закрытие.

Кто-нибудь знает почему? есть ли другой код, совместимый?

Благодаря

Вот мой журнал кот:

12-26 15:17:01.993: E/AndroidRuntime(3878): FATAL EXCEPTION: main 
12-26 15:17:01.993: E/AndroidRuntime(3878): Process: com.my.feed, PID: 3878 
12-26 15:17:01.993: E/AndroidRuntime(3878): android.os.NetworkOnMainThreadException 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at java.net.InetAddress.lookupHostByName(InetAddress.java:385) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at java.net.InetAddress.getAllByName(InetAddress.java:214) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at com.android.okhttp.internal.Dns$1.getAllByName(Dns.java:28) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:216) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:122) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:292) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:296) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:179) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at com.my.feed.LazyAdapterComentarios.getView(LazyAdapterComentarios.java:85) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.widget.AbsListView.obtainView(AbsListView.java:2255) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.widget.ListView.measureHeightOfChildren(ListView.java:1263) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.widget.ListView.onMeasure(ListView.java:1175) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.view.View.measure(View.java:16521) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.view.View.measure(View.java:16521) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.view.View.measure(View.java:16521) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:719) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:455) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.view.View.measure(View.java:16521) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.view.View.measure(View.java:16521) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.support.v7.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:453) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.view.View.measure(View.java:16521) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.view.View.measure(View.java:16521) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.view.View.measure(View.java:16521) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2552) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.view.View.measure(View.java:16521) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1915) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1109) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1291) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:996) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5603) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761) 
12-26 15:17:01.993: E/AndroidRuntime(3878):  at android.view.Choreographer.doCallbacks(Choreographer 

линия который крах:

Bitmap bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream()); 
+0

Предоставить аварийный журнал. –

+0

можете ли вы сообщить логарифм с ошибкой при сбое приложения? –

+0

Я обновил свой вопрос с помощью журнала cat – Elena

ответ

2

Кто-нибудь знает почему?

Вы должны, по examining LogCat, и посмотреть на трассировку стека Java, связанную с вашим сбоем.

В этом случае я ожидаю, что вы обнаружите, что получаете a NetworkOnMainThreadException.

есть другой код совместимый?

Есть many, many библиотеки для загрузки изображений прочь сети асинхронно и использовать их для заполнения в ImageView. Лично я наклоняюсь к Picasso.

+0

Вы можете попробовать «Универсальный загрузчик изображений», который проще в использовании. – pozuelog

+0

Извините, я обновил свой вопрос с помощью журнала cat – Elena

0
private void callWeb(URL myurl) { 
    HttpGet httpRequest = null; 
    httpRequest = new HttpGet(myurl.toURI()); 

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

    HttpEntity entity = response.getEntity(); 
    if (entity != null) { 
     InputStream inputStream = null; 
     try { 
      inputStream = entity.getContent(); 
      BitmapFactory.Options options = new BitmapFactory.Options(); 
      // options.inSampleSize = 2; 
      final Bitmap bitmap = BitmapFactory.decodeStream(inputStream, 
        null, options); 
      return bitmap; 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      if (inputStream != null) { 
       inputStream.close(); 
      } 
      entity.consumeContent(); 
     } 
    } 
} 

Проверьте, если поможет?

Смежные вопросы