-1

I am facing NullPointerException and my App is crashing, if I place user.getImageURL!=null then image is not displayed

public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        User user=mUser.get(position);
    holder.username.setText(user.getUsername());
   if(user.getImageURL().equals("default"))
    {
        holder.pic.setImageResource(R.mipmap.ic_launcher);

    }
    else
    {
        Glide.with(mContext).load(user.getImageURL()).into(holder.pic);
    }


}

I am facing NullPointerException and RecycleViewer complication

@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
    mUser.clear();
    for(DataSnapshot snapshot:dataSnapshot.getChildren())
    {

        User user=snapshot.getValue(User.class);
            assert user !=null;
            assert firebaseUser !=null;
       if(!user.getId().equals(firebaseUser.getUid()))
        {
            mUser.add(user);
        }
    }


    userAdapter=new UserAdapter(getContext(),mUser);
    recyclerView.setAdapter(userAdapter);
}

Please guide me if I could make any changes. And yeah I removed .setHasFixedSize(true) too, but no use.

This is my code:--> UserModel:

    public class User {
    private String id;
    private String username;
    private String imageURL;

    public User(String id, String username, String imageURL) {
        this.id = id;
        this.username = username;
        this.imageURL = imageURL;
    }

    public User() {

    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getImageURL() {
        return imageURL;
    }

    public void setImageURL(String imageURL) {
        this.imageURL = imageURL;
    }
}

UserAdapter:

    import android.content.Context;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.bumptech.glide.Glide;
import com.example.sannith.androidchats.MessageActivity;
import com.example.sannith.androidchats.Model.User;
import com.example.sannith.androidchats.R;

import java.util.List;

public class UserAdapter extends RecyclerView.Adapter<UserAdapter.ViewHolder> {

    private Context mContext;
    private List<User> mUser;

    public UserAdapter(Context mContext,List<User> mUser)
    {
        this.mUser=mUser;
        this.mContext=mContext;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view=LayoutInflater.from(mContext).inflate(R.layout.user_item,parent,false);
        return new UserAdapter.ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
            User user=mUser.get(position);
        holder.username.setText(user.getUsername());
       if(user.getImageURL().equals("default"))
        {
            holder.pic.setImageResource(R.mipmap.ic_launcher);

        }
        else
        {
            Glide.with(mContext).load(user.getImageURL()).into(holder.pic);
        }


    }

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

    public class ViewHolder extends RecyclerView.ViewHolder
    {
        public TextView username;
        public ImageView pic;

        public ViewHolder(View itemView)
        {
            super(itemView);

            username=(TextView) itemView.findViewById(R.id.username2);
            pic=(ImageView) itemView.findViewById(R.id.pic2);
        }
    }
}

UserFragment:

import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.Toast;

import com.example.sannith.androidchats.Adapter.UserAdapter;
import com.example.sannith.androidchats.Model.User;
import com.example.sannith.androidchats.R;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import java.util.ArrayList;
import java.util.List;


public class UsersFragment extends Fragment {
        private UserAdapter userAdapter;


        private RecyclerView recyclerView;
        private List<User> mUser;

        @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View view=inflater.inflate(R.layout.fragment_users,container,false);

        recyclerView=view.findViewById(R.id.recycler_view);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));

        mUser=new ArrayList<>();

        readUsers();

        return view;
    }

    private void readUsers()
    {
        final FirebaseUser firebaseUser=FirebaseAuth.getInstance().getCurrentUser();
        DatabaseReference reference=FirebaseDatabase.getInstance().getReference("Users");

        reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                mUser.clear();
                for(DataSnapshot snapshot:dataSnapshot.getChildren())
                {

                    User user=snapshot.getValue(User.class);
                        assert user !=null;
                        assert firebaseUser !=null;
                   if(!user.getId().equals(firebaseUser.getUid()))
                    {
                        mUser.add(user);
                    }
                }


                userAdapter=new UserAdapter(getContext(),mUser);
                recyclerView.setAdapter(userAdapter);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
    }
}
Sannith
  • 1
  • 2

1 Answers1

1

Perhaps User object can have imageUrl as null. So you would need to check if it is not NULL before comparing it to something:

String url = user.getImageURL();
if (url != null && url.equals("default")) {
    holder.pic.setImageResource(R.mipmap.ic_launcher);
}
Angelina
  • 1,473
  • 2
  • 16
  • 34
  • I tried this if(user.getImageURL()=!null && user.getImageURL.equals("default")) --> it stopped chrashing but the pic is not being displayed. – Sannith Sep 23 '18 at 11:39
  • because URL is NULL. Do you have it in User's object in Firebase? – Angelina Sep 23 '18 at 11:45
  • Let me be more specific,Mam can you please view the whole code i updated in my question blog on above? – Sannith Sep 23 '18 at 12:08
  • @Sannith i do not see your firebase data. Can you send screenshot? I think if you get the `user` object and it is not null and `id` is not null then it exists, but the image url is not there – Angelina Sep 23 '18 at 12:13
  • even when there is a user's image URL... one has to fetch the image in order to display it. – Martin Zeitler Sep 23 '18 at 12:19
  • Can you please text why the recycler view is not displaying any users? – Sannith Sep 23 '18 at 12:22
  • You might want to wirte this `userAdapter=new UserAdapter(getContext(),mUser);` and `recyclerView.setAdapter(userAdapter);` outside `onDataChange`. – parag pawar Sep 23 '18 at 12:23
  • Agree with @paragpawar. You need to create adapter and `onDataChange` you just call `notifyDatasetChanged` – Angelina Sep 23 '18 at 12:27
  • But I am facing null pointer Exception at if(!user.getid.equals.(firebaseurser.getUid) I mean how it turned to be null? – Sannith Sep 23 '18 at 12:32
  • Can you image of firebase database structure – parag pawar Sep 23 '18 at 12:55
  • You mean, the image from firebase Console, sir? – Sannith Sep 23 '18 at 13:17
  • @Sannith yes! structure of Firebase database object which is equal to the user – Angelina Sep 23 '18 at 13:20
  • What exactly you're trying to do with ths code ... because it seems you should be using childEventListener – parag pawar Sep 23 '18 at 13:40
  • Unable to add picture so here is the structure Email: Sannith@gmail.com ID: wxc....... Password: password User: Sannith – Sannith Sep 23 '18 at 13:45
  • Where should I use the childEventListener? – Sannith Sep 23 '18 at 13:46
  • And here not structure but Id of firebase user equal to ID of user, if the ids are unequal then add the user, because if this condition is not applied then our current user account will also be added to the list. – Sannith Sep 23 '18 at 13:48
  • The image is displayed but, the username is not displayed in the list.i can't post the pic because it says I need atleast 10 reputations inorder to post pics. – Sannith Sep 23 '18 at 14:11