here is the adapter class. When the adapter is only initialized, i.e. it runs for the first time, then it gets into the if condition in the getView method and everything is displayed normally. When you update the listview, falls into else. NPE is dropped on viewHolder.name_rate.setText(modelData.getName());
public class AdapterModelData extends ArrayAdapter<ModelData> { private List<ModelData> modelDataList; private LayoutInflater inflater; private int layout; private Context mContext; public AdapterModelData(Context context, int resources, List<ModelData> modelData) { super(context, resources, modelData); this.layout = resources; this.modelDataList = modelData; this.inflater = LayoutInflater.from(context); } static class ViewHolder{ TextView name_rate; TextView rate; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if (convertView == null) { // LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(this.layout, parent, false); viewHolder = new ViewHolder(); viewHolder.name_rate = (TextView) convertView.findViewById(R.id.name_rate); viewHolder.rate = (TextView) convertView.findViewById(R.id.rate); } else{ viewHolder = (ViewHolder) convertView.getTag(); } ModelData modelData = modelDataList.get(position); viewHolder.name_rate.setText(modelData.getName()); viewHolder.rate.setText(Double.toString(modelData.getValue())); return convertView; } public void Refresh(){ this.notifyDataSetChanged(); } }