Java 尝试在使用回收器视图时对空对象引用调用虚拟方法
我是初学者应用程序开发人员,尝试创建聊天应用程序。该应用程序启动平稳,但当我想在“回收器”视图中显示所有注册用户时,应用程序崩溃。它没有显示任何错误,但应用程序仍会崩溃,当注释掉错误时,只会转到下一行。任何帮助都将不胜感激 LogcatJava 尝试在使用回收器视图时对空对象引用调用虚拟方法,java,android,android-studio,android-recyclerview,firebaseui,Java,Android,Android Studio,Android Recyclerview,Firebaseui,我是初学者应用程序开发人员,尝试创建聊天应用程序。该应用程序启动平稳,但当我想在“回收器”视图中显示所有注册用户时,应用程序崩溃。它没有显示任何错误,但应用程序仍会崩溃,当注释掉错误时,只会转到下一行。任何帮助都将不胜感激 Logcat 2020-11-23 10:38:39.697 4907-4907/com.example.decide_o E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.decide_o, P
2020-11-23 10:38:39.697 4907-4907/com.example.decide_o E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.decide_o, PID: 4907
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.decide_o/com.example.decide_o.AllUsers}: java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.recyclerview.widget.RecyclerView.setHasFixedSize(boolean)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.recyclerview.widget.RecyclerView.setHasFixedSize(boolean)' on a null object reference
at com.example.decide_o.AllUsers.onCreate(AllUsers.java:38)
at android.app.Activity.performCreate(Activity.java:6975)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
所有用户
public class AllUsers extends AppCompatActivity {
private RecyclerView nuserlist;
private DatabaseReference nUserDatabase;
private LinearLayoutManager nlayoutmanager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
nUserDatabase=FirebaseDatabase.getInstance().getReference().child("Users");
nlayoutmanager=new LinearLayoutManager(this);
nuserlist = (RecyclerView) findViewById(R.id.userlist);
nuserlist.setHasFixedSize(true);
nuserlist.setLayoutManager(nlayoutmanager);
}
@Override
protected void onStart() {
super.onStart();
FirebaseRecyclerAdapter<Users,UsersViewHolder> firebaseRecyclerAdapter=new FirebaseRecyclerAdapter<Users, UsersViewHolder>(
Users.class,
R.layout.single_users,
UsersViewHolder.class,
nUserDatabase
) {
@Override
protected void populateViewHolder(UsersViewHolder usersViewHolder, Users users, int i) {
usersViewHolder.setName(users.getName());
}
};
nuserlist.setAdapter(firebaseRecyclerAdapter);
}
public static class UsersViewHolder extends RecyclerView.ViewHolder{
View nView;
public UsersViewHolder(@NonNull View itemView) {
super(itemView);
nView=itemView;
}
public void setName(String name) {
TextView nameview=(TextView)nView.findViewById(R.id.single_username);
nameview.setText(name);
}
}
}
公共类AllUsers扩展了AppCompative活动{
私人回收站;
私有数据库参考nUserDatabase;
私人直线酒店经理酒店经理;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
nUserDatabase=FirebaseDatabase.getInstance().getReference().child(“用户”);
nlayoutmanager=新的LinearLayoutManager(此);
nuserlist=(RecyclerView)findviewbyd(R.id.userlist);
nuserlist.setHasFixedSize(true);
nuserlist.setLayoutManager(nlayoutmanager);
}
@凌驾
受保护的void onStart(){
super.onStart();
FirebaseRecyclerAdapter FirebaseRecyclerAdapter=新的FirebaseRecyclerAdapter(
用户.class,
R.layout.single_用户,
UsersViewHolder.class,
nUserDatabase
) {
@凌驾
受保护的void populateViewHolder(UsersViewHolder UsersViewHolder,Users Users,int i){
usersViewHolder.setName(users.getName());
}
};
nuserlist.setAdapter(firebaseRecyclerAdapter);
}
公共静态类UsersViewHolder扩展了RecyclerView.ViewHolder{
查看nView;
public UsersViewHolder(@NonNull View itemView){
超级(项目视图);
nView=项目视图;
}
公共void集合名(字符串名){
TextView nameview=(TextView)nView.findViewById(R.id.single_用户名);
nameview.setText(name);
}
}
}
xml
这里的问题是您尚未设置内容视图 在onCreate方法中添加此行:-
setContentView(R.layout.your_activity_xml)代码>
在调用super.oncreate
之后
如果您没有分配内容视图,则不会确定从何处获取recyclerView:-nuserlist=(recyclerView)findViewById(R.id.userlist)
我想您需要这样设置内容视图:-setContentView(R.layout.your_activity_xml)在super.onCreate
方法之后添加code>。由于这一行丢失,您的recylerview从未被分配给任何它给出空指针的对象exception@AppDev. 工作人员用简单的话来说,活动没有可显示的布局。
<RelativeLayout 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"
tools:context=".AllUsers">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/userlist"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>