NullPointerException: Attempt to invoke virtual method 'int java.util.ArrayList.size()' on a null object reference
Asked Answered
B

4

13

I'm a newbie to Fragments and custom ListView adapters. Can anyone give me a hand please?

I've got my Fragment where I have my ListView

public class RecordingListFragment extends Fragment implements OnItemClickListener {

    ListView mListView;
    TextView emptyView;
    Button options, delete,edit;
    ArrayList<String> recordings = null;
    RecordingsListAdapter mAdapter;

    public RecordingListFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.recording_list_fragment, container,false);

        options = (Button) rootView.findViewById(R.id.options);
        edit = (Button) rootView.findViewById(R.id.edit);
        delete = (Button) rootView.findViewById(R.id.delete);
        mListView = (ListView) rootView.findViewById(R.id.list);
        emptyView = (TextView) rootView.findViewById(R.id.empty);


        mAdapter = new RecordingsListAdapter(this, recordings);
        mListView.setAdapter(mAdapter);
        mListView.setEmptyView(emptyView);
        mListView.setOnItemClickListener(this);

        return rootView;
    }
}

and my xml for it

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:android1="http://schemas.android.com/apk/res/android"
    android:id="@+id/recording_list_fragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffff"
    android:orientation="vertical">

    <RelativeLayout
        android:layout_height="50dp"
        android:layout_width="match_parent"
        android:orientation="horizontal"
        android:background="@drawable/title" >

        <TextView
            android1:id="@+id/title"
            android1:layout_width="wrap_content"
            android1:layout_height="50dp"
            android1:layout_alignParentTop="true"
            android1:layout_centerHorizontal="true"
            android1:layout_marginStart="80dp"
            android1:gravity="center"
            android1:text="@string/app_name"
            android1:textAlignment="center"
            android1:textColor="#000000"
            android1:textStyle="bold" />

    </RelativeLayout>

    <FrameLayout
        android:layout_height="wrap_content"
        android:layout_width="match_parent">

        <ListView
            android:id="@+id/list"
            android:animateLayoutChanges="true"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
        <!--  android:divider="@null"--> 

        <TextView
            android:id="@+id/empty"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            android:text="@string/empty_list_text"
            android:paddingLeft="30dp"
            android:paddingRight="30dp"
            android:paddingTop="180dp" />

    </FrameLayout>
</LinearLayout>

and I've got my custom list item

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:orientation="horizontal" >

    <CheckedTextView
        android:id="@+id/textView"
        android:layout_width="fill_parent"
        android:layout_height="?android:attr/listPreferredItemHeight"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:gravity="center_vertical"
        android:checkMark="?android:attr/listChoiceIndicatorSingle"
        android:paddingLeft="6dip"
        android:paddingRight="6dip"
        android:textColor="#000000"
        /> 

</LinearLayout>

and finally, my Adapter

public class RecordingsListAdapter  extends BaseAdapter {
    Context ctx;
    LayoutInflater lInflater;
    ArrayList<String> recordings;

    RecordingsListAdapter(Context context, ArrayList<String> products) {
        ctx = context;
        recordings = products;
        lInflater = (LayoutInflater) ctx
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    public RecordingsListAdapter(RecordingListFragment recordingListFragment,
    ArrayList<String> recordings) {
        // TODO Auto-generated constructor stub
    }


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


    @Override
    public Object getItem(int position) {
        return recordings.get(position);
    }


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


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

        View view = convertView;
        if (view == null) {
            view = lInflater.inflate(R.layout.custom_list_item, parent, false);
        }

        return view;
    }
} 

and when I run this, I get this null pointer

11-26 11:00:45.352: E/AndroidRuntime(10191): java.lang.RuntimeException: Unable to start activity ComponentInfo{d/recordings.RecordingsActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.util.ArrayList.size()' on a null object reference
11-26 11:00:45.352: E/AndroidRuntime(10191):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
11-26 11:00:45.352: E/AndroidRuntime(10191):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
11-26 11:00:45.352: E/AndroidRuntime(10191):    at android.app.ActivityThread.access$800(ActivityThread.java:144)
11-26 11:00:45.352: E/AndroidRuntime(10191):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
11-26 11:00:45.352: E/AndroidRuntime(10191):    at android.os.Handler.dispatchMessage(Handler.java:102)
11-26 11:00:45.352: E/AndroidRuntime(10191):    at android.os.Looper.loop(Looper.java:135)
11-26 11:00:45.352: E/AndroidRuntime(10191):    at android.app.ActivityThread.main(ActivityThread.java:5221)
11-26 11:00:45.352: E/AndroidRuntime(10191):    at java.lang.reflect.Method.invoke(Native Method)
11-26 11:00:45.352: E/AndroidRuntime(10191):    at java.lang.reflect.Method.invoke(Method.java:372)
11-26 11:00:45.352: E/AndroidRuntime(10191):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
11-26 11:00:45.352: E/AndroidRuntime(10191):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
11-26 11:00:45.352: E/AndroidRuntime(10191): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.util.ArrayList.size()' on a null object reference
11-26 11:00:45.352: E/AndroidRuntime(10191):    at recordings.RecordingsListAdapter.getCount(RecordingsListAdapter.java:36)
11-26 11:00:45.352: E/AndroidRuntime(10191):    at android.widget.ListView.setAdapter(ListView.java:487)
11-26 11:00:45.352: E/AndroidRuntime(10191):    at recordings.RecordingListFragment.onCreateView(RecordingListFragment.java:47)
11-26 11:00:45.352: E/AndroidRuntime(10191):    at android.app.Fragment.performCreateView(Fragment.java:2053)
11-26 11:00:45.352: E/AndroidRuntime(10191):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:894)
11-26 11:00:45.352: E/AndroidRuntime(10191):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
11-26 11:00:45.352: E/AndroidRuntime(10191):    at android.app.BackStackRecord.run(BackStackRecord.java:833)
11-26 11:00:45.352: E/AndroidRuntime(10191):    at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1452)
11-26 11:00:45.352: E/AndroidRuntime(10191):    at android.app.Activity.performStart(Activity.java:5948)
11-26 11:00:45.352: E/AndroidRuntime(10191):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2261)
11-26 11:00:45.352: E/AndroidRuntime(10191):    ... 10 more

Thank you in advance!!!

Beffrey answered 26/11, 2014 at 11:11 Comment(2)
possible duplicate of What is a Null Pointer Exception, and how do I fix it?Coenocyte
ArrayList<String> recordings = null; you should initialize itPornography
C
23

You should initialize yours recordings. You are passing to adapter null

ArrayList<String> recordings = null; //You are passing this null
Chamorro answered 26/11, 2014 at 11:18 Comment(0)
D
11

This issue is due to ArrayList variable not being instantiated. Need to declare "recordings" variable like following, that should solve the issue;

ArrayList<String> recordings = new ArrayList<String>();

this calls default constructor and assigns empty string to the recordings variable so that it is not null anymore.

Delfeena answered 14/7, 2015 at 2:12 Comment(1)
i declare variable as you did but still getting errorJoyless
W
5

Change

 mAdapter = new RecordingsListAdapter(this, recordings);

to

 mAdapter = new RecordingsListAdapter(getActivity(), recordings);

and also make sure that recordings!=null at mAdapter = new RecordingsListAdapter(this, recordings);

Watchband answered 26/11, 2014 at 11:13 Comment(3)
he doesn't have compile time error so this is not a problem (he has in fact a different code ?)Coenocyte
I added your change + I populated recordings with some static data and I get this error `11-26 11:21:47.125: E/AndroidRuntime(11596): java.lang.RuntimeException: Unable to start activity ComponentInfo{xxxxx/recordings.RecordingsActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.util.ArrayList.add(java.lang.Object)' on a null object referenceBeffrey
@AdrianAntal add some records in your ArrayList like. recordings.add("ABC"); recordings.add("AXYZ"); and so on...Watchband
A
0

ArrayList recordings = null; //You can pass null

Apposite answered 10/3, 2021 at 7:53 Comment(1)
Hi and welcome to Stack Overflow! Please take the tour. Thanks for answering but can you also add an explanation on how your code solves the issue? Check the help center for info on how to format code.Reflation

© 2022 - 2024 — McMap. All rights reserved.