-1

I have a problem, been searching since yesterday, I post the code:

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_show_wishes);

    mListView = (ListView) findViewById(R.id.listId);

    refreshData();

}

private void refreshData() {

    wishes.clear();

    dbHandler = new DatabaseHandler(getApplicationContext());

    ArrayList<MyWishes> wishesFromDB = dbHandler.getWishes();

    for (int i = 0; i < wishesFromDB.size(); i++){

        String title = wishesFromDB.get(i).getTitle();
        String content = wishesFromDB.get(i).getContent();
        String date = wishesFromDB.get(i).getRecordDate();

        MyWishes myWishes = new MyWishes();

        myWishes.setTitle(title);
        myWishes.setContent(content);
        myWishes.setRecordDate(date);

        wishes.add(myWishes);

    }

    dbHandler.close();

    mWishAdapter = new WishAdapter(showWishesActivity.this, R.layout.list_row, wishes);
    mListView.setAdapter(mWishAdapter);
    mWishAdapter.notifyDataSetChanged();
}

public class WishAdapter extends ArrayAdapter<MyWishes>{

    Activity activity;
    MyWishes wish;
    ArrayList<MyWishes> mData = new ArrayList<>();
    int layoutRessource;

    public WishAdapter(Activity act, int resource, ArrayList<MyWishes> data) {
        super(act, resource, data);
        activity = act;
        layoutRessource = resource;
        mData = data;
        notifyDataSetChanged();
    }

    @Override
    public int getCount() {
        return mData.size();
    }

    @Override
    public int getPosition(MyWishes item) {
        return super.getPosition(item);
    }

    @Nullable
    @Override
    public MyWishes getItem(int position) {
        return mData.get(position);
    }

    @Override
    public long getItemId(int position) {
        return super.getItemId(position);
    }

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

        View row = convertView;
        ViewHolder holder = null;

        if (row == null || (row.getTag()) == null){

            LayoutInflater inflater = LayoutInflater.from(activity);
            row = inflater.inflate(layoutRessource, null);

            holder = new ViewHolder();

            holder.mTitle = (TextView) findViewById(R.id.titre);
            holder.mDate = (TextView) findViewById(R.id.date);

            row.setTag(holder);
        }else {

            holder = (ViewHolder) row.getTag();
        }

        holder.mMyWishes = getItem(position);

        holder.mTitle.setText(holder.mMyWishes.getTitle());
        holder.mDate.setText(holder.mMyWishes.getRecordDate());

        return row;
    }

    class ViewHolder{

        MyWishes mMyWishes;
        TextView mTitle;
        TextView mContent;
        TextView mDate;
        TextView mId;
    }
}

on the getView method, I get a NullPointerException on holder.setText.`

I post the xml too:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:padding="12dp"
android:background="#90f96666">

<ImageView
    android:id="@+id/imageViewDatabaseId"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@android:drawable/ic_menu_agenda"/>

<TextView
    android:id="@+id/titre"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="The title"
    android:textStyle="bold"
    android:layout_toRightOf="@+id/imageViewDatabaseId"
    android:layout_marginLeft="20dp"/>

<TextView
    android:id="@+id/date"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="The detail"
    android:layout_toRightOf="@+id/imageViewDatabaseId"
    android:layout_below="@+id/titleId"
    android:layout_marginTop="3dp"
    android:layout_marginLeft="40dp"
    android:textStyle="italic"/>

    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
                                                                                 at wishlist.yassine.com.mywishlist.showWishesActivity$WishAdapter.getView(showWishesActivity.java:133)

I dont understand the problem, anyone can help me please, thank you for your time.

Gabriele Mariotti
  • 320,139
  • 94
  • 887
  • 841
Agent_M
  • 1
  • 1

5 Answers5

1

Instead of this

holder.mTitle = (TextView) findViewById(R.id.titre);

Try this

holder.mTitle = (TextView) convertView.findViewById(R.id.titre);
Vivek Mishra
  • 5,669
  • 9
  • 46
  • 84
0
    if (row == null || (row.getTag()) == null){
        LayoutInflater inflater = LayoutInflater.from(activity);
        row = inflater.inflate(layoutRessource, null);
        holder = new ViewHolder();
        holder.mTitle = (TextView) row.findViewById(R.id.titre);
        holder.mDate = (TextView) row.findViewById(R.id.date);
        row.setTag(holder);
       }
sasikumar
  • 12,540
  • 3
  • 28
  • 48
0

Your view is not initialized inside getView. So:

Remove this:

        holder.mTitle = (TextView) findViewById(R.id.titre);
        holder.mDate = (TextView) findViewById(R.id.date);

With this:

        holder.mTitle = (TextView) row.findViewById(R.id.titre);
        holder.mDate = (TextView) row.findViewById(R.id.date);
W4R10CK
  • 5,502
  • 2
  • 19
  • 30
0

In ur getView use this:

    holder.mTitle = (TextView)row.findViewById(R.id.titre);


    holder.mDate = (TextView)row.findViewById(R.id.date);
Avinash Roy
  • 953
  • 1
  • 8
  • 25
0

you have miss the view to reference

listview replace every item to your specify layout

then getview method in return view of listview item

you can use like

holder.mTitle = (TextView) row.findViewById(R.id.titre);

row is a view of layout

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

        View row = convertView;
        ViewHolder holder = null;

        if (row == null || (row.getTag()) == null){

            LayoutInflater inflater = LayoutInflater.from(activity);
            row = inflater.inflate(layoutRessource, null);
            holder = new ViewHolder();

            holder.mTitle = (TextView) row.findViewById(R.id.titre);
            holder.mDate = (TextView) row.findViewById(R.id.date);

            row.setTag(holder);
        }else {

            holder = (ViewHolder) row.getTag();
        }

        holder.mMyWishes = getItem(position);

        holder.mTitle.setText(holder.mMyWishes.getTitle());
        holder.mDate.setText(holder.mMyWishes.getRecordDate());

        return row;
    }

    class ViewHolder{

        MyWishes mMyWishes;
        TextView mTitle;
        TextView mContent;
        TextView mDate;
        TextView mId;
    }
rafsanahmad007
  • 23,683
  • 6
  • 47
  • 62
vishal
  • 542
  • 6
  • 12