NullPointerException: Attempt to invoke virtual method 'int java.util.ArrayList.size()' on a null object reference
157,801
Solution 1
You should initialize yours recordings. You are passing to adapter null
ArrayList<String> recordings = null; //You are passing this null
Solution 2
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.
Solution 3
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);
Author by
android enthusiast
Updated on March 10, 2021Comments
-
android enthusiast about 3 years
I'm a newbie to
Fragments
and customListView
adapters. Can anyone give me a hand please?I've got my
Fragment
where I have myListView
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!!!
-
Selvin over 9 yearshe doesn't have compile time error so this is not a problem (he has in fact a different code ?)
-
android enthusiast over 9 yearsI 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 reference
-
M D over 9 years@AdrianAntal add some records in your
ArrayList
like.recordings.add("ABC");
recordings.add("AXYZ");
and so on... -
s.j almost 5 yearsi declare variable as you did but still getting error
-
Tyler2P about 3 yearsHi 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.