I have attached my adapter to my main activity's onCreate, after loading the user data to a model class named (Users.java) and then passing this ArrayList to the adapter.I am using Firestore. It was working earlier but then after a few tests it stopped working. App crashes as soon as main activity is loaded. Please help. Thanks in advance.
MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// To make App Bar from Action Bar (AppComp)
Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
setSupportActionBar(myToolbar);
mAuth = FirebaseAuth.getInstance();
mRecyclerView = findViewById(R.id.recyclerView);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
// Check if user is signed in (non null) and update UI accordingly.
FirebaseUser currentUser = mAuth.getCurrentUser();
if (currentUser == null) {
Intent authIntent = new Intent(MainActivity.this, SignUpActivity.class);
startActivity(authIntent);
finish();
} else {
mUsers = new ArrayList<>();
db.collection("users")
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
Log.d(TAG, document.getId() + " => " + document.getData());
Users users = document.toObject(Users.class);
mUsers.add(users);
}
mAdapter = new UsersAdapter(MainActivity.this, mUsers);
mRecyclerView.setAdapter(mAdapter);
ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar9);
progressBar.setVisibility(View.INVISIBLE);
} else {
Log.d(TAG, "Error getting documents: ", task.getException());
}
}
});
}
}
UsersAdapter.java
public class UsersAdapter extends RecyclerView.Adapter<UsersAdapter.UsersViewHolder> {
private Context mContext;
private List<Users> mUsers;
public UsersAdapter(Context context, List<Users> users) {
mContext = context;
mUsers = users;
}
@NonNull
@Override
public UsersViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(mContext).inflate(R.layout.users_card, parent, false);
return new UsersViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull UsersViewHolder holder, int position) {
Users currentUser = mUsers.get(position);
holder.textViewName.setText(currentUser.getUserName());
Picasso.get()
.load(currentUser.getUserImageUrl())
.fit()
.centerCrop()
.into(holder.imageViewPhoto);
}
@Override
public int getItemCount() {
return mUsers.size();
}
public class UsersViewHolder extends RecyclerView.ViewHolder{
public ImageView imageViewPhoto;
public TextView textViewName;
public UsersViewHolder(View itemView) {
super(itemView);
imageViewPhoto = itemView.findViewById(R.id.user_image);
textViewName = itemView.findViewById(R.id.user_name);
}
}
}
Logcat
E/RecyclerView: No adapter attached; skipping layout
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.sandeeppradhan.sailors, PID: 3286
java.lang.IllegalArgumentException: Path must not be empty.
at com.squareup.picasso.Picasso.load(Picasso.java:332)
at com.example.sandeeppradhan.sailors.UsersAdapter.onBindViewHolder(UsersAdapter.java:39)
at com.example.sandeeppradhan.sailors.UsersAdapter.onBindViewHolder(UsersAdapter.java:17)
try doing this
mRecyclerView = findViewById(R.id.recyclerView);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
in
mUsers = new ArrayList<>();
db.collection("users")
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
Log.d(TAG, document.getId() + " => " + document.getData());
Users users = document.toObject(Users.class);
mUsers.add(users);
}
//HERE
mAdapter = new UsersAdapter(MainActivity.this, mUsers);
mRecyclerView.setAdapter(mAdapter);
ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar9);
progressBar.setVisibility(View.INVISIBLE);
} else {
Log.d(TAG, "Error getting documents: ", task.getException());
}
}
});
}
Also make sure that your string with the url of the image isn't empty, in that case if some users haven't a imgurl just do a try catch in onBindViewHolder our just check of the image is empty with an if