Take the 2-minute tour ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

I'm facing this error in displaying a List View. The problem is in the adapter but I couldn't find the solution. This in my logcat :

FATAL EXCEPTION: main
java.lang.NullPointerException
at com.client.alm.WorkItemAdapter.getView(WorkItemAdapter.java:68)
at android.widget.AbsListView.obtainView(AbsListView.java:2159)
at android.widget.ListView.measureHeightOfChildren(ListView.java:1246)
at android.widget.ListView.onMeasure(ListView.java:1158)
at android.view.View.measure(View.java:15513)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4827)

and this is my adapter :

import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.client.alm.model.WorkItem;
import com.client.alm.model.WorkItemContainer;

public class WorkItemAdapter extends ArrayAdapter<WorkItem> {

    private WorkItemContainer container;
    private Context context;
    int layoutResourceId;

    public WorkItemAdapter(Context context, int layoutResourceId,
            WorkItemContainer container) {
        super(context, layoutResourceId, container.getWorkitems());
        this.layoutResourceId = layoutResourceId;
        this.context = context;
        this.container = container;
    }

    static class ViewHolder {
        ImageView imageType;
        TextView type;
        TextView priority;
        ImageView imagePriority;
        TextView key;
        ImageView imageStatus;
        TextView status;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        ViewHolder holder = null;

        if (row == null) {
            LayoutInflater inflater = LayoutInflater.from(context);
            row = inflater.inflate(layoutResourceId, parent, false);

            holder = new ViewHolder();
            holder.imageType = (ImageView) row
                    .findViewById(R.id.imageTypeWorkitem);
            holder.type = (TextView) row.findViewById(R.id.typeWorkitem);
            holder.imagePriority = (ImageView) row
                    .findViewById(R.id.imagePriority);
            holder.key = (TextView) row.findViewById(R.id.key);
            holder.imageStatus = (ImageView) row.findViewById(R.id.imageStatus);
            holder.status = (TextView) row.findViewById(R.id.status);

            row.setTag(holder);
        } else {
            holder = (ViewHolder) row.getTag();
        }

        WorkItem workitem = container.getWorkitems().get(position);
        holder.type.setText(workitem.getType());
        // holder.imageType.setImageResource(workitem.getIcon());
        holder.priority.setText(workitem.getPriority());
        holder.key.setText(workitem.getKey());
        holder.status.setText(workitem.getStatus());

        return row;
    }

}

and this how I call the adapter in my activity :

WorkItemContainer container = gson.fromJson(resultat,
                    WorkItemContainer.class);

            /**
             * Updating parsed JSON data into ListView
             * */
            WorkItemAdapter adaptateur = new WorkItemAdapter(
                    WorkItemActivity.this, R.layout.workitemitem, container);

            ListView listViewWorkitem = (ListView) findViewById(R.id.list);

            listViewWorkitem.setAdapter(adaptateur);
            super.onPostExecute(resultat);

I would greatly appreciate your help. Thanks in advance.

share|improve this question
 
Could you please tell us what line number 68 of WorkItemAdapter is? –  edoardotognoni Apr 30 '13 at 15:28
 
line number 68 is this one :holder.priority.setText(workitem.getPriority()); –  Wijden Apr 30 '13 at 15:30
add comment

1 Answer

up vote 6 down vote accepted

That's because when you inflate your view:

if (row == null) {
        LayoutInflater inflater = LayoutInflater.from(context);
        row = inflater.inflate(layoutResourceId, parent, false);

        holder = new ViewHolder();
        holder.imageType = (ImageView) row
                .findViewById(R.id.imageTypeWorkitem);
        holder.type = (TextView) row.findViewById(R.id.typeWorkitem);
        holder.imagePriority = (ImageView) row
                .findViewById(R.id.imagePriority);
        holder.key = (TextView) row.findViewById(R.id.key);
        holder.imageStatus = (ImageView) row.findViewById(R.id.imageStatus);
        holder.status = (TextView) row.findViewById(R.id.status);

        row.setTag(holder);

you don't initialize the priority field.

share|improve this answer
 
So what i have to do –  Wijden Apr 30 '13 at 15:46
1  
just add this code before row.setTag: holder.priority = (TextView) row.findViewById(R.id.priority); –  edoardotognoni Apr 30 '13 at 15:50
 
Yes of course I'm really dumb I wasn't seeing it, I'm sorry for asking a stupid question. –  Wijden Apr 30 '13 at 15:56
 
It happens to everyone, don't worry :) –  edoardotognoni Apr 30 '13 at 15:56
 
Thank you very much –  Wijden Apr 30 '13 at 15:58
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.