1

I want to load text and image (stored as image path) from mysql db to listview. I am able top fetch the text but the image is not loading. Gone through a lot of tutorial and SO questions but not able to resolve it.

I tried with Bitmap like below

 Bitmap bmImg = BitmapFactory.decodeFile("path of your img1");
 imageView.setImageBitmap(bmImg);

not working. Tried with File file = ... also but that also not working. Below is the complete code with latest change but that throws an network exception.

public class MovieAdapter extends BaseAdapter{

private final sharedcollect sc;
private final ArrayList<Mdetails> mdetails;

public MovieAdapter(sharedcollect sc, ArrayList<Mdetails> mdetails) {
    this.sc = sc;
    this.mdetails = mdetails;
}

@Override
public int getCount() {
    return mdetails.size();
}

@Override
public Object getItem(int position) {
    return mdetails.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    Mdetails md = mdetails.get(position);
   String moviename = md.moviename;
    String year = md.year;
    String imdbrating = md.irating;
    String rottenrating = md.rating;
    String genere = md.genere;
    String Image = md.Image;
    Bitmap bimage;


    View view= LayoutInflater.from(sc).inflate(R.layout.custlayout,null);
    TextView mname = (TextView)view.findViewById(R.id.moviename);
    TextView myear = (TextView)view.findViewById(R.id.year);
    TextView iname = (TextView)view.findViewById(R.id.irating);
    TextView rname = (TextView)view.findViewById(R.id.rating);
    TextView gname = (TextView)view.findViewById(R.id.genere);

    bimage = getBitmapFromURL(Image);
    ImageView iview= (ImageView)view.findViewById(R.id.imageView);

   mname.setText(moviename);
    myear.setText(" "+year);
    iname.setText("  "+irating  );
    rname.setText("  "+rating);
    gname.setText("        " + genere);
    iview.setImageBitmap(bimage);

    return view;
}

public static Bitmap getBitmapFromURL(String image) {

    try {
        URL url = new URL(image);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setDoInput(true);
        connection.connect();
        InputStream input = connection.getInputStream();
        Bitmap myBitmap = BitmapFactory.decodeStream(input);
        return myBitmap;
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
   }
 } 

What is wrong with this code?

LOGCAT:

   FATAL EXCEPTION: main
   Process: com.moviefilter.as, PID: 20319
   android.os.NetworkOnMainThreadException
        at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147)
        at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:110)
        at libcore.io.IoBridge.connectErrno(IoBridge.java:137)
        at libcore.io.IoBridge.connect(IoBridge.java:122)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:456)
        at java.net.Socket.connect(Socket.java:882)
        at com.android.okhttp.internal.Platform.connectSocket(Platform.java:174)
        at com.android.okhttp.Connection.connect(Connection.java:152)
        at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:276)
        at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:211)
        at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:382)
        at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:106)
        at com.moviefilter.allmovieratings.MovieAdapter.getBitmapFromURL(MovieAdapter.java:85)
        at com.moviefilter.allmovieratings.MovieAdapter.getView(MovieAdapter.java:66)
        at android.widget.AbsListView.obtainView(AbsListView.java:2347)
        at android.widget.ListView.measureHeightOfChildren(ListView.java:1270)
        at android.widget.ListView.onMeasure(ListView.java:1182)
        at android.view.View.measure(View.java:17547)
        at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:727)
        at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:463)
        at android.view.View.measure(View.java:17547)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
        at android.support.v7.internal.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:124)
        at android.view.View.measure(View.java:17547)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
        at android.support.v7.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:393)
        at android.view.View.measure(View.java:17547)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
        at android.view.View.measure(View.java:17547)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
        at android.view.View.measure(View.java:17547)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
        at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2615)
        at android.view.View.measure(View.java:17547)
        at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2015)
        at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1173)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1379)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1061)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5885)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
        at android.view.Choreographer.doCallbacks(Choreographer.java:580)
        at android.view.Choreographer.doFrame(Choreographer.java:550)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5254)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
user2269164
  • 1,095
  • 2
  • 15
  • 31

2 Answers2

0

Make sure you have added the internet permission to manifest file. For images I would recommend using the popular Picasso library. You can load the image using a single statement like Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView); It handles image loading and caching automatically.

Edit: This exception is caused when you try to do network operation on main thread. You need to use something like AsyncTask for network operations. You can use this example for loading using AsyncTask. If you want simple solution to this, use the library I mentioned above.

Community
  • 1
  • 1
Yogesh Umesh Vaity
  • 41,009
  • 21
  • 145
  • 105
0

try this.It will solve your error

     Thread thread = new Thread(new Runnable(){
                @Override
                public void run() {
                    try {                                                                       

                            Bitmap mIcon11 = null;                              
                            // create instance of InputStream and pass URL
                            InputStream in = new java.net.URL(imagelink).openStream();
                            // decode stream and initialize bitmap
                            mIcon11 = BitmapFactory.decodeStream(in);

                            in.close();

                        }


                        //Your code goes here
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
Jagjit Singh
  • 1,909
  • 1
  • 14
  • 19