-1

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


Faiz
  • 3
  • 3

0 Answers0