首页 > 解决方案 > 错误发生在 Android 应用程序中的空对象引用上的“java.lang.String com.example.myapplication.FindUSer.getUrlimage()”

问题描述

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>

适配器.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);
    }
  }
}

错误日志

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

当我尝试将详细信息放入回收器视图时,尝试在空对象引用上调用虚拟方法“java.lang.String com.example.myapplication.FindUSer.getUrlimage()”时发生错误。我能够从 firebase 获取值,但无法在回收站视图中使用

标签: androidnullpointerexception

解决方案


FindFriend.java 删除此行

userslist.add(user);

这是在您将其设置为与添加到列表userslist=new ArrayList<>();相同之后立即编写的。null

我希望这可以解决您的问题


推荐阅读