amir
amir

Reputation: 2583

custom Grid View

i have an custom Grid view adapter that get 2 parameter . firs for name of items and second for img url . and load the image with Picasso library . but when I run it and send the parameters its not working . thank you for help ; log:

    02-13 17:40:14.964: E/AndroidRuntime(1342): FATAL EXCEPTION: main
02-13 17:40:14.964: E/AndroidRuntime(1342): Process: com.plusnet.tashrifat, PID: 1342
02-13 17:40:14.964: E/AndroidRuntime(1342): java.lang.NullPointerException: uriString
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.net.Uri$StringUri.<init>(Uri.java:467)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.net.Uri$StringUri.<init>(Uri.java:457)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.net.Uri.parse(Uri.java:429)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at plusnet.tashrifat.adapter.CustomGrid.getView(CustomGrid.java:55)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.widget.AbsListView.obtainView(AbsListView.java:2255)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.widget.GridView.makeAndAddView(GridView.java:1345)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.widget.GridView.makeRow(GridView.java:345)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.widget.GridView.fillDown(GridView.java:287)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.widget.GridView.fillFromTop(GridView.java:421)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.widget.GridView.layoutChildren(GridView.java:1233)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.widget.AbsListView.onLayout(AbsListView.java:2087)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.view.View.layout(View.java:14817)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.view.ViewGroup.layout(ViewGroup.java:4631)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1055)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.view.View.layout(View.java:14817)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.view.ViewGroup.layout(ViewGroup.java:4631)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.view.View.layout(View.java:14817)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.view.ViewGroup.layout(ViewGroup.java:4631)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:678)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.view.View.layout(View.java:14817)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.view.ViewGroup.layout(ViewGroup.java:4631)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.view.View.layout(View.java:14817)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.view.ViewGroup.layout(ViewGroup.java:4631)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at com.android.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:374)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.view.View.layout(View.java:14817)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.view.ViewGroup.layout(ViewGroup.java:4631)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.view.View.layout(View.java:14817)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.view.ViewGroup.layout(ViewGroup.java:4631)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1983)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1740)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:996)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5600)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.view.Choreographer.doCallbacks(Choreographer.java:574)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.view.Choreographer.doFrame(Choreographer.java:544)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.os.Handler.handleCallback(Handler.java:733)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.os.Handler.dispatchMessage(Handler.java:95)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.os.Looper.loop(Looper.java:136)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at android.app.ActivityThread.main(ActivityThread.java:5001)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at java.lang.reflect.Method.invokeNative(Native Method)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at java.lang.reflect.Method.invoke(Method.java:515)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
02-13 17:40:14.964: E/AndroidRuntime(1342):     at dalvik.system.NativeStart.main(Native Method)

custom adapter class :

public class CustomGrid extends BaseAdapter {
private Context mContext;
private final String[] name;
private final String[] Imageid;

public CustomGrid(Context c, String[] web, String[] Imageid) {
    mContext = c;
    this.Imageid = Imageid;
    this.name = web;
}

public int getCount() {
    // TODO Auto-generated method stub
    return name.length;
}

public Object getItem(int position) {
    // TODO Auto-generated method stub
    return null;
}

public long getItemId(int position) {
    // TODO Auto-generated method stub
    return 0;
}

public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    View grid;
    LayoutInflater inflater = (LayoutInflater) mContext
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    if (convertView == null) {
        grid = new View(mContext);
        grid = inflater.inflate(R.layout.grid_single, null);
        TextView textView = (TextView) grid.findViewById(R.id.grid_text);
        ImageView imageView = (ImageView) grid
                .findViewById(R.id.grid_image);
        textView.setText(name[position]);
        Picasso.with(mContext).load(Uri.parse(Imageid[position]))
                .error(R.drawable.ic_launcher).into(imageView);
        Log.d("picasso", Imageid[position]);
    } else {
        grid = (View) convertView;
    }
    return grid;
}

}

Upvotes: 3

Views: 336

Answers (2)

Juanjo Vega
Juanjo Vega

Reputation: 1440

Your trace says "java.lang.NullPointerException: uriString", so check if you are feeding data properly using Log or even Toast.

Appart form that, your getView implementation is wrong as you are not updating views properly: You must set values every time, not just when view is created as you are doing.

This is your fixed code:

public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    View grid;
    LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    if (convertView == null) {
        grid = new View(mContext);
        grid = inflater.inflate(R.layout.grid_single, null);
    } else {
        grid = (View) convertView;
    }

    // Refresh view
    TextView textView = (TextView) grid.findViewById(R.id.grid_text);
    ImageView imageView = (ImageView) grid.findViewById(R.id.grid_image);
    textView.setText(name[position]);
    Picasso.with(mContext).load(Uri.parse(Imageid[position])).error(R.drawable.ic_launcher).into(imageView);
    Log.d("picasso", Imageid[position]);

    return grid;
}

--- EDIT ---------------------

Check value printed by:

Log.d("picasso", Imageid[position]);

If not null, then check if URI parsing is working properly:

try {
    Uri uri = Uri.parse(Imageid[position]);
    Log.d("picasso", uri.toString());
} catch (Exception ex) {
    ex.printStackTrace();
}

Also consider implementing view holder pattern in your list adapters to improve performance and get a smoother response.

Upvotes: 1

Submersed
Submersed

Reputation: 8870

Uri.parse(Imageid[position]) is throwing a null pointer exception, check the data at Imageid[position] to make sure it's not null before trying to parse it.

Upvotes: 1

Related Questions