I am trying to get the getter method from one class into the Adapter Class and when try to access that getter method adapter class it throws NPE , i got ( Attempt to invoke virtual method 'java.util.Iterator java.util.ArrayList.iterator()' on a null object reference ) when i try to loop over the getter method
So i am uploading few images as status and storing them in firebase database , i checked the database for reference , and they are stored there but when i try to load(more precisely to see those statuses in my app) those statuses the app crashes by giving me a NPE
The NPE is in the For loop of BindViewHolder
Adapter code:
package com.example.baatcheet.Adapters;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.example.baatcheet.Activities.MainActivity;
import com.example.baatcheet.Models.Status;
import com.example.baatcheet.Models.userStatus;
import com.example.baatcheet.R;
import com.example.baatcheet.databinding.ItemStatusBinding;
import com.google.firebase.crashlytics.buildtools.reloc.com.google.common.base.Predicates;
import com.google.firebase.crashlytics.buildtools.reloc.com.google.common.collect.Iterables;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import omari.hamza.storyview.StoryView;
import omari.hamza.storyview.callback.StoryClickListeners;
import omari.hamza.storyview.model.MyStory;
import xute.storyview.StoryModel;
public class TopStatusAdapter extends RecyclerView.Adapter<TopStatusAdapter.TopStatusVIewHolder> {
Context context;
private final ArrayList<userStatus> userStatuses;
public TopStatusAdapter(Context context , ArrayList<userStatus> userStatuses){
this.context = context;
this.userStatuses = userStatuses;
}
@NonNull
@Override
public TopStatusVIewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.item_status, parent , false);
return new TopStatusVIewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull TopStatusVIewHolder holder, int position) {
userStatus userStatus = userStatuses.get(position);
holder.binding.circularStatusView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ArrayList<MyStory> myStories = new ArrayList<>();
for (Status status : userStatus.getStatuses()) {
myStories.removeAll(Collections.singletonList(null));
myStories.add(new MyStory(
status.getImageUrl()
));
}
new StoryView.Builder(((MainActivity)context).getSupportFragmentManager())
.setStoriesList(myStories) // Required
.setStoryDuration(10000) // Default is 2000 Millis (2 Seconds)
.setTitleText(userStatus.getName()) // Default is Hidden
.setSubtitleText("") // Default is Hidden
.setTitleLogoUrl(userStatus.getProfileImage()) // Default is Hidden
.setStoryClickListeners(new StoryClickListeners() {
@Override
public void onDescriptionClickListener(int position) {
//your action
}
@Override
public void onTitleIconClickListener(int position) {
//your action
}
}) // Optional Listeners
.build() // Must be called before calling show method
.show();
}
});
}
@Override
public int getItemCount() {
return userStatuses.size();
}
public class TopStatusVIewHolder extends RecyclerView.ViewHolder {
ItemStatusBinding binding;
public TopStatusVIewHolder(@NonNull View itemView) {
super(itemView);
binding = ItemStatusBinding.bind(itemView);
}
}
}
getter and setter class :
package com.example.baatcheet.Models;
import java.util.ArrayList;
public class userStatus {
private String name , profileImage;
private long lastUpdated;
private ArrayList<Status> statuses;
public userStatus() {
}
public userStatus(String name, String profileImage, long lastUpdated, ArrayList<Status> statuses){
this.name = name;
this.profileImage = profileImage;
this.lastUpdated = lastUpdated;
this.statuses = statuses;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getProfileImage() {
return profileImage;
}
public void setProfileImage(String profileImage) {
this.profileImage = profileImage;
}
public long getLastUpdated() {
return lastUpdated;
}
public void setLastUpdated(long lastUpdated) {
this.lastUpdated = lastUpdated;
}
public ArrayList<Status> getStatuses() {
return statuses;
}
public void setStatuses(ArrayList<Status> statuses) {
this.statuses = statuses;
}
}
status class :
package com.example.baatcheet.Models;
public class Status {
private String imageUrl;
private long timeStamp;
public Status() {
}
public Status(String imageUrl, long timeStamp) {
this.imageUrl = imageUrl;
this.timeStamp = timeStamp;
}
public String getImageUrl() {
return imageUrl;
}
public void setImageUrl(String imageUrl) {
this.imageUrl = imageUrl;
}
public long getTimeStamp() {
return timeStamp;
}
public void setTimeStamp(long timeStamp) {
this.timeStamp = timeStamp;
}
}
log cat :
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.baatcheet, PID: 6814
java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.Iterator java.util.ArrayList.iterator()' on a null object reference
at com.example.baatcheet.Adapters.TopStatusAdapter$1.onClick(TopStatusAdapter.java:60)
at android.view.View.performClick(View.java:7870)
at android.view.View.performClickInternal(View.java:7839)
at android.view.View.access$3600(View.java:886)
at android.view.View$PerformClick.run(View.java:29363)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7807)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1047)
I/Process: Sending signal. PID: 6814 SIG: 9