1

I am using firebase to retrieve the data to RecyclerView so I have used these method blew but It gives me an error:

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

Heres my Adapter:

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.PostViewHolder> {
public ArrayList<Getting_Posts> mdataSet;

public RecyclerAdapter(ArrayList<Getting_Posts> dataSet) {
    mdataSet = dataSet;
}

@Override
public RecyclerAdapter.PostViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View inflatedView = LayoutInflater.from(parent.getContext()).inflate(R.layout.post_card_design, parent, false);
    return new RecyclerAdapter.PostViewHolder(inflatedView);}

@Override
public void onBindViewHolder(PostViewHolder holder, int position) {
    Getting_Posts post = mdataSet.get(position);}

@Override
public int getItemCount() {
    return mdataSet.size();}

public void add(int position, Getting_Posts post) {
    mdataSet.add(position, post);
    notifyItemInserted(position);}

public class PostViewHolder extends RecyclerView.ViewHolder {
    TextView Name;
    public PostViewHolder(View inflatedView) {
        super(inflatedView);
        Name = (TextView) inflatedView.findViewById(R.id.PostUsername);}}}

And here's my activity class:

private RecyclerView mPostList;
ArrayList<Getting_Posts> posts;
private RecyclerAdapter mAdapter;

    mPostList = (RecyclerView) v.findViewById(R.id.MainPostList);
    mPostList.setHasFixedSize(true);
    mPostList.setItemAnimator(new DefaultItemAnimator());
    LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
    mPostList.setLayoutManager(layoutManager);
    mAdapter = new RecyclerAdapter(posts);
    mPostList.setAdapter(mAdapter);
    mAuth = FirebaseAuth.getInstance();
    mCurrentUser = mAuth.getCurrentUser();

    //Firebase
    mDatabase = FirebaseDatabase.getInstance().getReference().child("Posts");
    mDatabaseFriends = FirebaseDatabase.getInstance().getReference().child("Following").child(mCurrentUser.getUid());

    return v;
}


@Override
public void onStart() {

    mDatabaseFriends.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot following : dataSnapshot.getChildren()) {
                mDatabase.orderByChild("UID").equalTo(following.getKey()).addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        Getting_Posts model = dataSnapshot.getValue(Getting_Posts.class);

                        mAdapter.add(mAdapter.mdataSet.size(), dataSnapshot.getValue(Getting_Posts.class));
                        mAdapter.notifyDataSetChanged();}

                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }});}}

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
    super.onStart();
}}

And here's my Getter and setter class:

public class GettingTester {

private String Name;

public GettingTester(String Name) {
    this.Name = Name;
}

public String getName() {
    return Name;
}

public void setName(String name) {
    Name = name;
}

And finally here's my json:

"Following" : {
    "ORBBKfZAAUhqI1h7ojQDzYOjgkp1" : { 
       "pypD1SYZkbcYesk09WuMUY1AkTf1": true,
      //I need to show this UID posts only but,
  },
  "Posts" : {
    "-KduqnVVczZf5uibQiZ-" : {
      "Describe" : "gg",
      "Time" : 14881230655,
      "UID" : "pypD1SYZkbcYesk09WuMUY1AkTf1",
      "Username" : "Jone",
      "Wallpaper" : "https://firebasestorage.googleapis.com/v0/b/test-3f4c5.appspot.com/o/Posts%2Fcropped906285501.jpg?alt=media&token=0c1a3a3d-6e48-4c4e-ba59-f5646bf8965f"
    },
    "-Ke5gJ00CxbjhOuhzLIx" : {
      "Describe" : "hajj",
      "Time" : 1488318465,
      "UID" : "pypD1SYZkbcYesk09WuMUY1AkTf1",
      "Username" : "Dom",
      "Wallpaper" : "https://firebasestorage.googleapis.com/v0/b/test-3f4c5.appspot.com/o/Posts%2Fcropped1717103943.jpg?alt=media&token=a85b2488-5ac7-49a7-9ad0-dbf4e6f29389"
    },
    "-KeCuiFmUCpN19zwsTsR" : {
      "Describe" : "a",
      "Profile" : "https://lh4.googleusercontent.com/-suB77riNoX8/AAAAAAAAAAI/AAAAAAAAAAA/ADPlhfKMzINn-Ki538Sqf6SRGaXC81-WuQ/s200-c/photo.jpg",
      "Time" : 1488439652,
      "UID" : "z2SNUlLd6mQM8nnlkU2VUws5Ggl2",
      "Username" : "Dom",
      "Wallpaper" : "https://firebasestorage.googleapis.com/v0/b/test-3f4c5.appspot.com/o/Posts%2Fcropped1913886685.jpg?alt=media&token=c8ad26b2-8f09-453b-b48a-aad9e4d8b5c3"
    },
}
I need to show posts for following users only.

2
  • Is the information vulnerable in the json snippet? You may want hide your API/Master keys Commented Mar 10, 2017 at 12:15
  • Yep it was snipped .. Commented Mar 10, 2017 at 12:19

1 Answer 1

1

In this code:

mAdapter.add(mAdapter.mdataSet.size(), dataSnapshot.getValue(Getting_Posts.class));

The first time above code executed, mdataSet is null. Why is that? Because the only code that modify mdataSet before above code is from RecyclerAdapter (mAdapter)'s init:

mAdapter = new RecyclerAdapter(posts);

There mdataSet object is copying the value of posts object, that we know, is indeed null.

Simply put value to the posts object will make this wokrs:

ArrayList<Getting_Posts> posts = new ArrayList<>();

Hope this helps

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.