0

This code work on api 23 but in api 27 does not. It shows me this message:

Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference

Can someone please help?

I can't solve this. I am stuck over 1 week now.

the code is:

public class AdapterMenuList extends BaseAdapter {

    private Activity activity;

    public AdapterMenuList(Activity act) {
        this.activity = act;
    }

    public int getCount() {
        return ActivityMenuList.Menu_ID.size();
    }

    public Object getItem(int position) {
        return position;
    }

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

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

        ViewHolder holder;

        if(convertView == null){
            LayoutInflater inflater = (LayoutInflater) activity
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.lsv_item_menu_list, null);
            holder = new ViewHolder();

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

        holder.nameProduct = convertView.findViewById(R.id.nameProduct);
        holder.price50Text = convertView.findViewById(R.id.price50Text);
        holder.price100Text = convertView.findViewById(R.id.price100Text);
        holder.imgThumb = convertView.findViewById(R.id.imgThumb);

        holder.nameProduct.setText(ActivityMenuList.Menu_name.get(position));
        if(ActivityMenuList.Category_ID == 1 ){
            holder.price50Text.setText("Pret 50 Tb: "+ActivityMenuList.Menu_price50.get(position)+" "+ActivityMenuList.Currency);
            holder.price100Text.setText("Pret 100 Tb: "+ActivityMenuList.Menu_price100.get(position)+" "+ActivityMenuList.Currency);
        }else{
            holder.price50Text.setText("Pret: "+ActivityMenuList.Menu_price50.get(position)+" "+ActivityMenuList.Currency);
            holder.price100Text.setVisibility(View.GONE);
        }
        Picasso.with(activity).load(Config.ADMIN_PANEL_URL+"/"+ActivityMenuList.Menu_image.get(position)).placeholder(R.drawable.loading).into(holder.imgThumb);

        return convertView;
    }

    static class ViewHolder {
        TextView nameProduct, price50Text, price100Text;
        ImageView imgThumb;
    }


}
AskNilesh
  • 67,701
  • 16
  • 123
  • 163
  • This is not duplicate. It is something else. Read the question first please – Iulian Nistor Aug 07 '18 at 09:58
  • Yes it is. You're trying to call `setText()` on a `TextView` that doesn't exist. Check you're referencing your `TextView`s correctly in `getView()`. – Michael Dodd Aug 07 '18 at 10:04
  • But TextView exists here: – Iulian Nistor Aug 07 '18 at 10:14
  • Is it crashing on `nameProduct` though? And what if you add a log to the line above e.g. `if (holder.nameProduct == null) Log.e("AdapterMenuList", "nameProduct is NULL!");`? – Michael Dodd Aug 07 '18 at 10:18
  • Also, do you have any [different layout files](https://developer.android.com/training/multiscreen/screensizes#available-width) in different `res/layout` buckets? e.g. `res/layout-600dp` – Michael Dodd Aug 07 '18 at 10:19
  • It's show's this message: E/AdapterMenuList: nameProduct is NULL! – Iulian Nistor Aug 07 '18 at 10:22
  • Yep, as I suspected, you're not able to find that `TextView` on API 27. The duplicate is valid. What different variations of `res/layout-` do you have? – Michael Dodd Aug 07 '18 at 10:23
  • 1
    Yes i forgot about my different variations of res/layout. I maked the changes and now my app works fine. Thank you so much Michael Dodd for opening my eyes and for the info – Iulian Nistor Aug 07 '18 at 10:28

0 Answers0