I am developing an application in which I am using recycler view. When I am trying to display recycler view from a fragment I am getting this error 'Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
at Adapters.PostAdapter.getItemCount'
Why is this error occurring and how can I fix this?
What I have tried:
My HomeFragment.java Code:
package
Fragments;
import
android.os.Bundle;
import
androidx.annotation.ContentView;
import
androidx.annotation.NonNull;
import
androidx.annotation.Nullable;
import
androidx.fragment.app.Fragment;
import
androidx.recyclerview.widget.LinearLayoutManager;
import
androidx.recyclerview.widget.RecyclerView;
import
android.view.LayoutInflater;
import
android.view.View;
import
android.view.ViewGroup;
import
com.smart.instagram.R;
import
java.util.ArrayList;
import
java.util.List;
import
Adapters.PostAdapter;
import
Models.PostsModel;
public
class
HomeFragment
extends
Fragment {
RecyclerView story_rv;
RecyclerView posts_rv;
LinearLayoutManager layoutManager;
List<PostsModel> postsList;
PostAdapter postAdapter;
public
HomeFragment() {
@Override
public
View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View parentHolder = inflater.inflate(R.layout.fragment_home, container, false);
return
parentHolder;
@Override
public
void
onViewCreated(
@NonNull
View view,
@Nullable
Bundle savedInstanceState) {
super
.onViewCreated(view, savedInstanceState);
story_rv = getView().findViewById(R.id.story_rv);
posts_rv = getView().findViewById(R.id.post_rv);
postAdapter =
new
PostAdapter(postsList);
layoutManager =
new
LinearLayoutManager(getContext());
layoutManager.setOrientation(RecyclerView.VERTICAL);
posts_rv.setLayoutManager(layoutManager);
posts_rv.setAdapter(postAdapter);
postsList =
new
ArrayList<>();
postsList.add(
new
PostsModel(R.drawable.story1,
"
Elisa Shermon"
, R.drawable.ic_baseline_more_vert_24, R.drawable.story1
, R.drawable.ic_baseline_favorite_border_24,
"
2.1K"
, R.drawable.ic_baseline_chat_bubble_24,
"
230"
,
R.drawable.ic_baseline_send_24,
"
100"
, R.drawable.ic_baseline_bookmark_border_24));
postsList.add(
new
PostsModel(R.drawable.story2,
"
Justin Christian"
, R.drawable.ic_baseline_more_vert_24, R.drawable.story2
, R.drawable.ic_baseline_favorite_border_24,
"
9.6K"
, R.drawable.ic_baseline_chat_bubble_24,
"
890"
,
R.drawable.ic_baseline_send_24,
"
409"
, R.drawable.ic_baseline_bookmark_border_24));
postsList.add(
new
PostsModel(R.drawable.story3,
"
Travel Bug"
, R.drawable.ic_baseline_more_vert_24, R.drawable.story3
, R.drawable.ic_baseline_favorite_border_24,
"
2.1M"
, R.drawable.ic_baseline_chat_bubble_24,
"
230K"
,
R.drawable.ic_baseline_send_24,
"
900K"
, R.drawable.ic_baseline_bookmark_border_24));
postsList.add(
new
PostsModel(R.drawable.story4,
"
Nick Jonas"
, R.drawable.ic_baseline_more_vert_24, R.drawable.story4
, R.drawable.ic_baseline_favorite_border_24,
"
4M"
, R.drawable.ic_baseline_chat_bubble_24,
"
450K"
,
R.drawable.ic_baseline_send_24,
"
453"
, R.drawable.ic_baseline_bookmark_border_24));
postsList.add(
new
PostsModel(R.drawable.story5,
"
The Gaming Beast"
, R.drawable.ic_baseline_more_vert_24, R.drawable.story5
, R.drawable.ic_baseline_favorite_border_24,
"
2.1K"
, R.drawable.ic_baseline_chat_bubble_24,
"
230"
,
R.drawable.ic_baseline_send_24,
"
100"
, R.drawable.ic_baseline_bookmark_border_24));
postsList.add(
new
PostsModel(R.drawable.story6,
"
Food Spot"
, R.drawable.ic_baseline_more_vert_24, R.drawable.story1
, R.drawable.ic_baseline_favorite_border_24,
"
2.1K"
, R.drawable.ic_baseline_chat_bubble_24,
"
230"
,
R.drawable.ic_baseline_send_24,
"
100"
, R.drawable.ic_baseline_bookmark_border_24));
My PostAdapter Code:-
package
Adapters;
import
android.view.LayoutInflater;
import
android.view.View;
import
android.view.ViewGroup;
import
android.widget.ImageView;
import
android.widget.TextView;
import
androidx.annotation.NonNull;
import
androidx.recyclerview.widget.RecyclerView;
import
com.smart.instagram.R;
import
java.util.List;
import
Models.PostsModel;
public
class
PostAdapter
extends
RecyclerView.Adapter<PostAdapter.ViewHolder> {
public
List<PostsModel> postList;
public
PostAdapter(List<PostsModel>postList){
this
.postList = postList;
@NonNull
@Override
public
ViewHolder onCreateViewHolder(
@NonNull
ViewGroup parent,
int
viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.posts_rv, parent, false);
return
new
ViewHolder(view);
@Override
public
void
onBindViewHolder(
@NonNull
ViewHolder holder,
int
position) {
int
profile_pic = postList.get(position).getProfile_pic();
int
more = postList.get(position).getMore();
int
post_image = postList.get(position).getPost_image();
int
like = postList.get(position).getLike();
int
share = postList.get(position).getShare();
int
comment = postList.get(position).getComment();
int
bookmark = postList.get(position).getBookmark();
String
user_name = postList.get(position).getUser_name();
String
like_no = postList.get(position).getLike_no();
String
share_no = postList.get(position).getShare_no();
String
comment_no = postList.get(position).getComment_no();
holder.setData(profile_pic, more, post_image, like, share, comment, bookmark,
user_name, like_no, comment_no, share_no);
@Override
public
int
getItemCount() {
return
postList.size();
public
class
ViewHolder
extends
RecyclerView.ViewHolder{
private
ImageView profile_img, post_img, more_img, like_img, comment_img, share_img, bookmark_img;
private
TextView name, like_nos, comment_nos, share_nos;
public
ViewHolder(
@NonNull
View itemView) {
super
(itemView);
profile_img = itemView.findViewById(R.id.profile_pic);
name = itemView.findViewById(R.id.user_name);
more_img = itemView.findViewById(R.id.more);
post_img = itemView.findViewById(R.id.post_image);
like_img = itemView.findViewById(R.id.like);
like_nos = itemView.findViewById(R.id.like_no);
share_img = itemView.findViewById(R.id.share);
share_nos = itemView.findViewById(R.id.share_no);
comment_img = itemView.findViewById(R.id.comment);
comment_nos = itemView.findViewById(R.id.comment_no);
bookmark_img = itemView.findViewById(R.id.bookmark);
public
void
setData(
int
profile_pic,
int
more,
int
post_image,
int
like,
int
share,
int
comment,
int
bookmark,
String
user_name,
String
like_no,
String
comment_no,
String
share_no) {
profile_img.setImageResource(profile_pic);
more_img.setImageResource(more);
post_img.setImageResource(post_image);
like_img.setImageResource(like);
share_img.setImageResource(share);
comment_img.setImageResource(comment);
bookmark_img.setImageResource(bookmark);
name.setText(user_name);
like_nos.setText(like_no);
comment_nos.setText(comment_no);
share_nos.setText(share_no);
public
void
onViewCreated(
@NonNull
View view,
@Nullable
Bundle savedInstanceState) {
super
.onViewCreated(view, savedInstanceState);
story_rv = getView().findViewById(R.id.story_rv);
posts_rv = getView().findViewById(R.id.post_rv);
postAdapter =
new
PostAdapter(postsList);
You pass an uninitialised object to the
PostAdapter
constructor. So when you call
postAdapter.getItemCount()
it throws the error, because the reference is null. You must initialise the list before you create the adapter.
Read the question carefully.
Understand that English isn't everyone's first language so be lenient of bad
spelling and grammar.
If a question is poorly phrased then either ask for clarification, ignore it, or
edit the question
and fix the problem. Insults are not welcome.
Don't tell someone to read the manual. Chances are they have and don't get it.
Provide an answer or move on to the next question.
Let's work to help developers, not make them feel stupid.