0

I want to load image from url and I am using this code:

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

I am running the app in a device with android 2.3 and works fine but in other device with android 4.4 app crashes and close.

Somebody knows why? is there other code compatible?

Thanks

Here is my log cat:

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

The line who crash is:

Bitmap bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
Elena
  • 181
  • 2
  • 12

2 Answers2

2

Somebody knows why?

You should, by examining LogCat and looking at the Java stack trace associated with your crash.

In this case, I expect that you will find that you are getting a NetworkOnMainThreadException.

is there other code compatible?

There are many, many libraries for loading images off of a network asynchronously and using them to populate an ImageView. Personally, I lean towards Picasso.

Community
  • 1
  • 1
CommonsWare
  • 986,068
  • 189
  • 2,389
  • 2,491
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();
        }
    }
}

Check if helps?

Sunit2k15
  • 11
  • 2