I want to pull data from my Firebase database. My table name is "cardornek". And I set the permissions for read/write.
But I get this "java.util.ArrayList.size()' on a null object reference" error. Any idea?
RecyclerViewAdapter.java
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {
private ArrayList<String> values=null;
RecyclerViewAdapter(ArrayList<String> values) {
this.values = values;
}
@Override
public RecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_view_item,parent,false));
}
@Override
public void onBindViewHolder(RecyclerViewAdapter.ViewHolder holder, int position)
{
holder.name.setText(values.get(position));
}
@Override
public int getItemCount() {
return values.size();
}
public class ViewHolder extends RecyclerView.ViewHolder
{
private TextView name;
ViewHolder(View itemView) {
super(itemView);
name = (TextView) itemView.findViewById(R.id.list_item_text);
}
}
MainActivity.java
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
new GetDataFromFirebase().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
// Read from the database
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("cardornek");
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
ArrayList<String> values = (ArrayList<String>) dataSnapshot.getValue();
recyclerView.setAdapter(new RecyclerViewAdapter(values));
}
@Override
public void onCancelled(DatabaseError databaseError) {
System.out.println("Failed to read value." + databaseError.toException());
}
});
Your problem is that (ArrayList<String>) dataSnapshot.getValue() is sometimes null and after you store values, the exception is thrown in getItemCount. If you are ok with returning 0 as size when values is null, then the solution is
@Override
public int getItemCount() {
return (values == null) ? 0 : values.size();
}
However, you might want to find out why dataSnapshot.getValue can return null. Maybe that's the real problem and the NullPointerException is just the symptom.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With