user1991
user1991

Reputation: 179

GridView NullPointerException

Where am I going wrong? Why this null pointer exception

    private class GridAdapter extends BaseAdapter {
    private LayoutInflater inflater;

    public GridAdapter(Context context) {
        Logger.d(TAG, "GridAdapter");
        inflater = LayoutInflater.from(context);
    }

    @Override
    public int getCount() {
        Logger.d("SIZE",""+AppConstants.getMenuList().size());
        return AppConstants.getMenuList().size();
    }

    @Override
    public Object getItem(int i) {
        return AppConstants.getMenuList().get(i);
    }

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

    class ViewHolder {
        TextView title;
        RelativeLayout layout;
        ImageView image;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        View view;
        if (convertView == null) {
            view = inflater.inflate(R.layout.inflater_grid_layout, null);
            ViewHolder viewHolder = new ViewHolder();
            viewHolder.layout = (RelativeLayout) view.findViewById(R.id.igl_layout);
            viewHolder.title = (TextView) view.findViewById(R.id.igl_name);
            viewHolder.image = (ImageView) view.findViewById(R.id.igl_image);
            view.setTag(viewHolder);
        } else {
            view = convertView;
        }
        final ViewHolder holder = (ViewHolder) view.getTag();
        MenuModel item = (MenuModel) getItem(position);
        holder.layout.setBackgroundColor(item.getColor());      //NULL POINTER HERE
        holder.title.setText(item.getName());
        holder.image.setImageResource(item.getImage());
        return view;
    }
}

This is my LogCat:

java.lang.NullPointerException at in.abm.indiape.fragments.GridMenuScreen$GridAdapter.getView(GridMenuScreen.java:115) at android.widget.AbsListView.obtainView(AbsListView.java:2624) at android.widget.GridView.onMeasure(GridView.java:1045) at android.view.View.measure(View.java:16831) at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:728) at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:477) at android.view.View.measure(View.java:16831)

Upvotes: 0

Views: 1340

Answers (1)

Raghunandan
Raghunandan

Reputation: 133560

You setTag to view not toconvertView. In the else part you have view = convertView;.

Then you have view.getTag() which probably returns null when convertView is not null as suggested by prosper k.

There is no need to use View view you can directly use convertView.

So Change getView to

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
     ViewHolder viewHolder;
    if (convertView == null) {
        convertView= inflater.inflate(R.layout.inflater_grid_layout, null);
        viewHolder = new ViewHolder();
        viewHolder.layout = (RelativeLayout) convertView.findViewById(R.id.igl_layout);
        viewHolder.title = (TextView) convertView.findViewById(R.id.igl_name);
        viewHolder.image = (ImageView) convertView.findViewById(R.id.igl_image);
        convertView.setTag(viewHolder); // setTag if convertView is null
    } else {
        viewHolder = (ViewHolder)convertView.getTag();
        // get tag if convertView is not null
    }

    MenuModel item = (MenuModel) getItem(position);
    // update ui elements 
    viewHolder.layout.setBackgroundColor(item.getColor());      
    viewHolder.title.setText(item.getName());
    viewHolder.image.setImageResource(item.getImage());
    return convertView;
}

Upvotes: 1

Related Questions