Android 错误:尝试调用接口方法';int java.util.List.size()';在适配器上的空对象引用上

Android 错误:尝试调用接口方法';int java.util.List.size()';在适配器上的空对象引用上,android,android-recyclerview,Android,Android Recyclerview,我正在创建一个在recyclerView中显示注释列表的应用程序。问题是,当我运行我的应用程序时,我遇到了以下错误,我正在努力修复它: E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.schoolteacher, PID: 7550 java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.s

我正在创建一个在recyclerView中显示注释列表的应用程序。问题是,当我运行我的应用程序时,我遇到了以下错误,我正在努力修复它:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.schoolteacher, PID: 7550
    java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
        at com.example.schoolteacher.Adapter.NotesAdapter.getItemCount(NotesAdapter.java:55)
        at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep1(RecyclerView.java:4044)
        at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:3849)
        at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4404)
        at android.view.View.layout(View.java:20960)
        at android.view.ViewGroup.layout(ViewGroup.java:6279)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:325)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at android.view.View.layout(View.java:20960)
        at android.view.ViewGroup.layout(ViewGroup.java:6279)
        at androidx.constraintlayout.widget.ConstraintLayout.onLayout(ConstraintLayout.java:1915)
        at android.view.View.layout(View.java:20960)
        at android.view.ViewGroup.layout(ViewGroup.java:6279)
        at androidx.drawerlayout.widget.DrawerLayout.onLayout(DrawerLayout.java:1231)
        at android.view.View.layout(View.java:20960)
        at android.view.ViewGroup.layout(ViewGroup.java:6279)
        at androidx.drawerlayout.widget.DrawerLayout.onLayout(DrawerLayout.java:1231)
        at android.view.View.layout(View.java:20960)
        at android.view.ViewGroup.layout(ViewGroup.java:6279)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:325)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at android.view.View.layout(View.java:20960)
        at android.view.ViewGroup.layout(ViewGroup.java:6279)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1842)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1686)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1595)
        at android.view.View.layout(View.java:20960)
        at android.view.ViewGroup.layout(ViewGroup.java:6279)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:325)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at android.view.View.layout(View.java:20960)
        at android.view.ViewGroup.layout(ViewGroup.java:6279)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1842)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1686)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1595)
        at android.view.View.layout(View.java:20960)
        at android.view.ViewGroup.layout(ViewGroup.java:6279)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:325)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at com.android.internal.policy.DecorView.onLayout(DecorView.java:926)
        at android.view.View.layout(View.java:20960)
        at android.view.ViewGroup.layout(ViewGroup.java:6279)
        at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:3037)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2545)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1636)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7946)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1092)
        at android.view.Choreographer.doCallbacks(Choreographer.java:893)
        at android.view.Choreographer.doFrame(Choreographer.java:812)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1078)
        at android.os.Handler.handleCallback(Handler.java:907)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:216)
        at android.app.ActivityThread.main(ActivityThread.java:7625)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)
这是我的密码:

ClassActivity.java

public class ClassActivity extends AppCompatActivity {

    // Firebase instance variables
    private FirebaseAuth mFirebaseAuth;
    private FirebaseUser mFirebaseUser;

    //HomeScreen variables
    RecyclerView recyclerView;
    FirebaseDatabase firebaseDatabase;
    DatabaseReference databaseReference;
    List<Listdata> list =new ArrayList<>();
    Context context;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_class);

        FloatingActionButton fab = findViewById(R.id.fab);


        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        View decorView = getWindow().getDecorView();
        decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);

        BottomNavigationView bottomNav = findViewById(R.id.bottom_navigation);
        bottomNav.setSelectedItemId(R.id.bottomBarItemSecond);


        bottomNav.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {

                switch (item.getItemId()) {
                    case R.id.bottomBarItemFirst:
                        startActivity(new Intent(getApplicationContext(), MainActivity.class));
                        overridePendingTransition(0,0);
                        break;
                    case R.id.bottomBarItemSecond:

                        break;
                    case R.id.bottomBarItemThird:
                        startActivity(new Intent(getApplicationContext(), MessageActivity.class));
                        overridePendingTransition(0,0);
                        break;
                    case R.id.bottomBarItemFourth:
                        break;
                    case R.id.bottomBarItemFifth:
                        break;
                }

                return true;
            }
        });



        // Initialize Firebase Auth
        mFirebaseAuth = FirebaseAuth.getInstance();
        mFirebaseUser = mFirebaseAuth.getCurrentUser();



        //Navigation drawer
        new DrawerBuilder().withActivity(this).build();

        //primary items
        PrimaryDrawerItem profile = new PrimaryDrawerItem()
                .withIdentifier(1)
                .withName(R.string.drawer_item_name)
                .withDescription("Edit Profile")
                .withDescriptionTextColorRes(R.color.black_overlay)
                .withIcon(R.drawable.ic_account_circle);

        //secondary items
        SecondaryDrawerItem calendar = (SecondaryDrawerItem) new SecondaryDrawerItem()
                .withIdentifier(11)
                .withName(R.string.drawer_item_calendar)
                .withIcon(R.drawable.ic_calendar);
        SecondaryDrawerItem attendance = (SecondaryDrawerItem) new SecondaryDrawerItem()
                .withIdentifier(12)
                .withName(R.string.drawer_item_attendance)
                .withIcon(R.drawable.ic_attendance);
        SecondaryDrawerItem whatsdue = (SecondaryDrawerItem) new SecondaryDrawerItem()
                .withIdentifier(13)
                .withName(R.string.drawer_item_due)
                .withIcon(R.drawable.ic_assignment);
        SecondaryDrawerItem grades = (SecondaryDrawerItem) new SecondaryDrawerItem()
                .withIdentifier(14)
                .withName(R.string.drawer_item_grades)
                .withIcon(R.drawable.ic_grades);
        SecondaryDrawerItem folders = (SecondaryDrawerItem) new SecondaryDrawerItem()
                .withIdentifier(15)
                .withName(R.string.drawer_item_folders)
                .withIcon(R.drawable.ic_folder);

        //settings, help, contact items
        SecondaryDrawerItem settings = (SecondaryDrawerItem) new SecondaryDrawerItem()
                .withIdentifier(97)
                .withName(R.string.drawer_item_settings)
                .withIcon(R.drawable.ic_settings);
        SecondaryDrawerItem help = (SecondaryDrawerItem) new SecondaryDrawerItem()
                .withIdentifier(98)
                .withName(R.string.drawer_item_help)
                .withIcon(R.drawable.ic_help);
        SecondaryDrawerItem logout = (SecondaryDrawerItem) new SecondaryDrawerItem()
                .withIdentifier(99)
                .withName(R.string.drawer_item_logout)
                .withIcon(R.drawable.ic_logout);



        new DrawerBuilder()
                .withActivity(this)
                .withToolbar(toolbar)
                .withActionBarDrawerToggleAnimated(true)
                .withTranslucentStatusBar(false)
                .withFullscreen(true)
                .withSavedInstance(savedInstanceState)
                .addDrawerItems(
                        profile,
                        new SectionDrawerItem(),
                        calendar,
                        attendance,
                        whatsdue,
                        grades,
                        folders,
                        new DividerDrawerItem(),
                        settings,
                        help,
                        logout

                )
                .withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() {
                    @Override
                    public boolean onItemClick(View view, int position, IDrawerItem drawerItem) {
                        if (drawerItem != null) {
                            Intent intent = null;
                            if (drawerItem.getIdentifier() == 1) {
                                intent = new Intent(ClassActivity.this, ProfileInfoActivity.class);
                            } else if (drawerItem.getIdentifier() == 2) {
                                //intent = new Intent(MainActivity.this, Class.class);
                            } else if (drawerItem.getIdentifier() == 3) {
                                //intent = new Intent(MainActivity.this, Class.class);
                            } else if (drawerItem.getIdentifier() == 11) {
                                //intent = new Intent(MainActivity.this, Class.class);
                            } else if (drawerItem.getIdentifier() == 12) {
                                //intent = new Intent(MainActivity.this, Class.class);
                            } else if (drawerItem.getIdentifier() == 13) {
                                //intent = new Intent(MainActivity.this, Class.class);
                            } else if (drawerItem.getIdentifier() == 97) {
                                intent = new Intent(ClassActivity.this, Settings.class);
                            } else if (drawerItem.getIdentifier() == 98) {
                                intent = new Intent(ClassActivity.this, Help.class);
                            } else if (drawerItem.getIdentifier() == 99) {
                                FirebaseAuth.getInstance().signOut();
                                sendToStart();
                            }
                            if (intent != null) {
                                ClassActivity.this.startActivity(intent);
                            }
                        }

                        return false;
                    }
                })
                .build();
        //End of Navigation drawer



        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                startActivity(new Intent(getApplicationContext(), AddClassActivity.class));
            }
        });



        recyclerView=findViewById(R.id.recyclerview);
        recyclerView.setHasFixedSize(true);
        RecyclerView.LayoutManager layoutManager=new LinearLayoutManager(ClassActivity.this);
        recyclerView.setLayoutManager(layoutManager);

        final NotesAdapter notesAdapter=new NotesAdapter(list,this);
        recyclerView.setAdapter(notesAdapter);
        firebaseDatabase=FirebaseDatabase.getInstance();
        databaseReference=firebaseDatabase.getReference("Classes");
        databaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {


                for(DataSnapshot dataSnapshot1: dataSnapshot.getChildren())
                {
                    Listdata listdata=dataSnapshot1.getValue(Listdata.class);
                    list.add(listdata);

                }
                notesAdapter.notifyDataSetChanged();

            }

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

            }
        });


    }

    @Override
    public void onStart() {
        super.onStart();
        FirebaseUser currentUser = mFirebaseAuth.getCurrentUser();
        if(currentUser == null){
            sendToStart();
        }
    }

    private void sendToStart() {
        Intent startIntent = new Intent(ClassActivity.this, LoginActivity.class);
        startActivity(startIntent);
        finish();
    }

}
公共类ClassActivity扩展了AppCompatActivity{
//Firebase实例变量
私有FirebaseAuth mFirebaseAuth;
私有FirebaseUser mFirebaseUser;
//主屏幕变量
回收视图回收视图;
FirebaseDatabase FirebaseDatabase;
数据库参考数据库参考;
列表=新的ArrayList();
语境;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_类);
FloatingActionButton fab=findViewById(R.id.fab);
Toolbar Toolbar=findviewbyd(R.id.Toolbar);
设置支持操作栏(工具栏);
View decorView=getWindow().getDecorView();
decorView.设置系统兼容性(视图.系统\用户界面\标志\灯\状态\栏);
BottomNavigationView bottomNav=findViewById(R.id.bottom\u导航);
底部导航设置SelectedItemId(R.id.bottomBarItemSecond);
bottomNav.setOnNavigationItemSelectedListener(新的BottomNavigationView.OnNavigationItemSelectedListener(){
@凌驾
公共布尔值onNavigationItemSelected(@NonNull MenuItem item){
开关(item.getItemId()){
案例R.id.B首先:
startActivity(新意图(getApplicationContext(),MainActivity.class));
覆盖转换(0,0);
打破
案例R.id.bottombaritems:
打破
案例R.id.3:
startActivity(新意图(getApplicationContext(),MessageActivity.class));
覆盖转换(0,0);
打破
案例R.id.4:
打破
案例R.id.5:
打破
}
返回true;
}
});
//初始化Firebase身份验证
mFirebaseAuth=FirebaseAuth.getInstance();
mFirebaseUser=mFirebaseAuth.getCurrentUser();
//导航抽屉
新建抽屉生成器().withActivity(this.build();
//主要项目
PrimaryDrainerItem配置文件=新PrimaryDrainerItem()
.withIdentifier(1)
.带名称(R.string.抽屉\项目\名称)
.withDescription(“编辑配置文件”)
.withDescriptionTextColorRes(R.color.black\U叠加)
.带图标(R.可提取的ic\u账户\u圈);
//次要项目
SecondaryDrawerItem日历=(SecondaryDrawerItem)新建SecondaryDrawerItem()
.withIdentifier(11)
.带名称(R.string.抽屉\项目\日历)
.带图标(R.drawable.ic_日历);
SecondaryPayerItem出席率=(SecondaryPayerItem)新SecondaryPayerItem()
.withIdentifier(12)
.带姓名(R.string.出票人\项目\出票人)
.带图标(R.drawable.ic_考勤);
SecondaryPayerItem whatsdue=(SecondaryPayerItem)新SecondaryPayerItem()
.withIdentifier(13)
.带名称(R.string.抽屉\项目\到期)
.带图标(R.drawable.ic_分配);
SecondaryDrawerItem等级=(SecondaryDrawerItem)新SecondaryDrawerItem()
.withIdentifier(14)
.带名称(R.字符串.抽屉\项目\等级)
.带图标(R.drawable.ic_等级);
SecondaryDrawerItem文件夹=(SecondaryDrawerItem)新建SecondaryDrawerItem()
.withIdentifier(15)
.withName(R.string.drawer\u item\u文件夹)
.withIcon(R.drawable.ic_文件夹);
//设置、帮助、联系人项目
SecondaryDroperItem设置=(SecondaryDroperItem)新建SecondaryDroperItem()
.withIdentifier(97)
.withName(R.string.drawer\u item\u设置)
.带图标(R.drawable.ic_设置);
SecondaryDrawerItem帮助=(SecondaryDrawerItem)新建SecondaryDrawerItem()
.withIdentifier(98)
.withName(R.string.drawer\u item\u help)
.带图标(R.drawable.ic_帮助);
SecondaryDrawerItem注销=(SecondaryDrawerItem)新建SecondaryDrawerItem()
.withIdentifier(99)
.带名称(R.string.drawer\u item\u logout)
.带图标(R.drawable.ic_注销);
新抽屉生成器()
.withActivity(本)
.withToolbar(工具栏)
.withActionBarDrawerToggleAnimated(真)
.带半透明状态栏(假)
.全屏显示(真)
.带有SavedInstance(savedInstanceState)
艾德瑞特姆斯先生(
轮廓
新的SectionDrawerItem(),
日历,
出席,
当然,
分数,
文件夹,
新的DividerDrawerItem(),
设置,
救命啊,,
注销
)
.withOnDrawerItemClickListener(新抽屉.OnDrawerItemClickListener(){
@凌驾
公共布尔onItemClick(视图、整型位置、IDRAWRITEM DREAWRITEM){
if(drawerItem!=null){
意向=无效;
if(drawerItem.getIdentifier()==1){
意图=新意图(
public class NotesAdapter extends RecyclerView.Adapter<NotesAdapter.MyHolder> {


    private List<Listdata> noteslist;
    private Context context;
    public NotesAdapter(List<Listdata> noteslist, Context context)
    {
        this.context=context;
        this.noteslist=noteslist;
    }

    public NotesAdapter(List<Listdata> list, ClassActivity context) {
    }


    @NonNull
    @Override
    public MyHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view= LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item,viewGroup,false);

        MyHolder myHolder=new MyHolder(view);
        return myHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull MyHolder myHolder, int position) {
        Listdata data=noteslist.get(position);
        myHolder.title.setText(data.getTitle());
        myHolder.desc.setText(data.getDesc());
    }

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

    class  MyHolder extends RecyclerView.ViewHolder  {
        TextView title,desc,grade,subject;

        MyHolder(@NonNull View itemView) {
            super(itemView);
            title=itemView.findViewById(R.id.title);
            desc=itemView.findViewById(R.id.desc);
            grade=itemView.findViewById(R.id.grade);
            subject=itemView.findViewById(R.id.subject);
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Listdata listdata=noteslist.get(getAdapterPosition());
                    Intent i=new Intent(context, EditActivity.class);
                    i.putExtra("id",listdata.id);
                    i.putExtra("title",listdata.title);
                    i.putExtra("desc",listdata.desc);
                    i.putExtra("grade",listdata.grade);
                    i.putExtra("subject",listdata.subject);
                    context.startActivity(i);
                }
            });

        }


    }
}
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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="com.example.schoolteacher.ClassActivity">

    <com.google.android.material.appbar.AppBarLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
        android:id="@+id/appBar"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="#FFFFFF"
            app:title="@string/classes"
            app:popupTheme="@style/AppTheme.PopupOverlay">
        </androidx.appcompat.widget.Toolbar>

    </com.google.android.material.appbar.AppBarLayout>

    <FrameLayout
        android:id="@+id/container"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintBottom_toTopOf="@+id/bottom_navigation"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/appBar">

        <include layout="@layout/content_home_screen" />

        <com.google.android.material.floatingactionbutton.FloatingActionButton
            android:id="@+id/fab"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom|end"
            android:layout_margin="@dimen/fab_margin"
            android:theme="@style/Theme.AppCompat"
            app:backgroundTint="@color/colorPrimary"
            android:src="@drawable/ic_add_fab"/>

    </FrameLayout>

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/bottom_navigation"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="?android:attr/windowBackground"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:menu="@menu/bottombar_menu" />

</androidx.constraintlayout.widget.ConstraintLayout>
public NotesAdapter(List<Listdata> list, ClassActivity context) {
}