FindFriend.java
package com.example.myapplication;
import androidx.annotation.NonNull;
import androidx.appcompat.widget.Toolbar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.bumptech.glide.Glide;
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.Query;
import com.google.firebase.database.ValueEventListener;
import java.util.ArrayList;
import java.util.List;
import de.hdodenhof.circleimageview.CircleImageView;
public class Findfriend extends AppCompatActivity {
private Toolbar mtoolbar;
private Button SearchButton;
private EditText searchedittext;
ValueEventListener valueEventListener;
List<FindUSer> userslist;
FindUSer user;
private DatabaseReference alluser_refernce;
private RecyclerView searchresult;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_findfriend);
setContentView(R.layout.activity_findfriend);
searchedittext = findViewById(R.id.searchfriend);
SearchButton = findViewById(R.id.Searchbtn);
searchresult = findViewById(R.id.search_result_list);
mtoolbar = findViewById(R.id.my_toolbar1);
setSupportActionBar(mtoolbar);
GridLayoutManager gridLayoutManager=new GridLayoutManager(Findfriend.this,1);
userslist=new ArrayList<>();
userslist.add(user);
SearchButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
Adapter adapter=new Adapter(Findfriend.this,userslist);
searchresult.setAdapter(adapter);
searchresult.setLayoutManager(gridLayoutManager);
alluser_refernce = FirebaseDatabase.getInstance().getReference().child("Users");
valueEventListener=alluser_refernce.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange( DataSnapshot dataSnapshot) {
userslist.clear();
for (DataSnapshot usersnapshot : dataSnapshot.getChildren()) {
FindUSer user = usersnapshot.getValue(FindUSer.class);
System.out.println(String.valueOf(dataSnapshot));
userslist.add(user);
}
final Adapter adapter = new Adapter(Findfriend.this, userslist);
adapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
getSupportActionBar().setTitle("update User");
SearchButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String searchinput = searchedittext.getText().toString();
}
});
}
}
activity_findfriend.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorPrimaryDark"
tools:context=".Findfriend">
<RelativeLayout
android:id="@+id/mylayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<androidx.appcompat.widget.Toolbar
android:id="@+id/my_toolbar1"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:elevation="4dp"
android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/simpletextid"
android:layout_alignParentEnd="true"
android:layout_marginStart="30dp"
android:text="@string/search_friends_here"
android:textColor="@android:color/background_light"
android:textSize="18sp"
android:layout_below="@id/my_toolbar1"
android:textStyle="bold"/>
<com.google.android.material.textfield.TextInputEditText
android:layout_width="350dp"
android:layout_height="wrap_content"
android:maxLines="1"
android:layout_alignParentStart="true"
android:layout_below="@id/simpletextid"
android:textColorHint="@android:color/background_light"
android:textColor="@android:color/background_light"
android:inputType="text"
android:ems="10"
android:id="@+id/searchfriend"
android:textSize="22sp"
android:hint="@string/search"/>
<Button
android:layout_width="40dp"
android:layout_height="wrap_content"
android:background="@drawable/search_icon_foreground"
android:id="@+id/Searchbtn"
android:layout_alignParentEnd="true"
android:layout_marginEnd="15dp"
android:layout_below="@id/simpletextid"/>
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp"
android:id="@+id/search_result_list"
android:layout_below="@id/searchfriend"/>
</RelativeLayout>
<com.google.android.material.navigation.NavigationView
android:id="@+id/navigation"
android:background="#97145C"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
app:menu="@menu/nav_items">
</com.google.android.material.navigation.NavigationView>
</androidx.drawerlayout.widget.DrawerLayout>
all_user_display_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
>
<androidx.cardview.widget.CardView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:background="#363131"
>
<de.hdodenhof.circleimageview.CircleImageView
android:layout_width="85dp"
android:layout_height="85dp"
android:id="@+id/all_user_profile_image"
android:layout_marginLeft="10dp"
android:src="@drawable/progileicon"/>
<TextView
android:id="@+id/all_users_profile_name"
android:layout_width="200dp"
android:layout_marginTop="5dp"
android:layout_marginLeft="100dp"
android:layout_height="wrap_content"
android:text="user full name"
android:textAlignment="textStart"
android:textColor="@color/colorPrimaryDark"
android:textSize="18sp"
android:textStyle="bold" />
<TextView
android:id="@+id/userstatus"
android:layout_width="200dp"
android:layout_marginTop="30dp"
android:layout_marginLeft="100dp"
android:layout_height="wrap_content"
android:text="status"
android:textAlignment="textStart"
android:textColor="@color/colorPrimaryDark"
android:textSize="16sp"/>
<TextView
android:id="@+id/usermail"
android:layout_width="200dp"
android:layout_marginTop="80dp"
android:layout_marginLeft="30dp"
android:layout_height="wrap_content"
android:text="mail@id"
android:textAlignment="textStart"
android:textColor="@color/colorPrimaryDark"
android:textSize="16sp"/>
</androidx.cardview.widget.CardView>
</RelativeLayout>
Adapter.java
package com.example.myapplication;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import org.w3c.dom.Text;
import java.util.List;
import static androidx.constraintlayout.widget.Constraints.TAG;
public class Adapter extends RecyclerView.Adapter<Adapter.Userviewholder> {
private Context context;
private List<FindUSer> myuserslist;
public Adapter(Context context,List<FindUSer> myuserslist){
this.context=context;
this.myuserslist=myuserslist;
}
@Override
public Userviewholder onCreateViewHolder(ViewGroup parent, int viewType) {
View mview = LayoutInflater.from(context).inflate
(R.layout.all_user_display_layout, parent, false);
return new Userviewholder(mview);
}
@Override
public void onBindViewHolder( Userviewholder holder, int position) {
final FindUSer user = myuserslist.get(position);
try{
Glide.with(context).load(user.getUrlimage()).into(holder.userimg);}
catch(NullPointerException e){
Log.e(TAG, e.toString());}
try{
holder.mailid.setText(user.getEmail());}
catch(NullPointerException e){
Log.e(TAG, e.toString());}
try{
holder.status.setText(user.getStatus());}
catch(NullPointerException e){
Log.e(TAG, e.toString());}
try{
holder.name.setText(user.getUsername());}
catch(NullPointerException e){
Log.e(TAG, e.toString());}
}
@Override
public int getItemCount() {
return myuserslist.size();
}
class Userviewholder extends RecyclerView.ViewHolder {
ImageView userimg;
TextView name, status, mailid;
public Userviewholder(View itemview) {
super(itemview);
userimg = itemview.findViewById(R.id.all_user_profile_image);
name = itemview.findViewById(R.id.all_users_profile_name);
status = itemview.findViewById(R.id.userstatus);
mailid = itemview.findViewById(R.id.usermail);
}
}
}
Error_log
E/Constraints: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String
com.example.myapplication.FindUSer.getUrlimage()' on a null object reference
E/Constraints: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String
com.example.myapplication.FindUSer.getEmail()' on a null object reference
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String
com.example.myapplication.FindUSer.getStatus()' on a null object reference
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String
com.example.myapplication.FindUSer.getUsername()' on a null object reference
Error occurred when Attempt to invoke virtual method 'java.lang.String com.example.myapplication.FindUSer.getUrlimage()' on a null object reference when i am trying to put details in the recycler view. I am able to get values from firebase but not able to put on then in recycler view