【问题标题】:My RecyclerView is crashing with a NullPointerException我的 RecyclerView 因 NullPointerException 而崩溃
【发布时间】:2020-06-29 12:59:42
【问题描述】:

我收到这样的错误:

java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference

整个错误是这样的:

2020-06-29 15:43:15.585 27534-27534/com.example.recyclerviewjava E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.recyclerviewjava, PID: 27534
    java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
        at com.example.recyclerviewjava.RecyclerAdapter.getItemCount(RecyclerAdapter.java:38)
        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:20699)
        at android.view.ViewGroup.layout(ViewGroup.java:6198)
        at androidx.constraintlayout.widget.ConstraintLayout.onLayout(ConstraintLayout.java:1915)
        at android.view.View.layout(View.java:20699)
        at android.view.ViewGroup.layout(ViewGroup.java:6198)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at android.view.View.layout(View.java:20699)
        at android.view.ViewGroup.layout(ViewGroup.java:6198)
        at androidx.appcompat.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:446)
        at android.view.View.layout(View.java:20699)
        at android.view.ViewGroup.layout(ViewGroup.java:6198)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at android.view.View.layout(View.java:20699)
        at android.view.ViewGroup.layout(ViewGroup.java:6198)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
        at android.view.View.layout(View.java:20699)
        at android.view.ViewGroup.layout(ViewGroup.java:6198)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at com.android.internal.policy.DecorView.onLayout(DecorView.java:757)
        at android.view.View.layout(View.java:20699)
        at android.view.ViewGroup.layout(ViewGroup.java:6198)
        at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2876)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2393)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1535)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7405)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1044)
        at android.view.Choreographer.doCallbacks(Choreographer.java:839)
        at android.view.Choreographer.doFrame(Choreographer.java:774)
        at android.view.Choreographer$FrameHandler.handleMessage(Choreographer.java:943)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:201)
        at android.app.ActivityThread.main(ActivityThread.java:6864)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)

我的 MainActivity 是这样的:

package com.example.recyclerviewjava;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.SearchView;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.RecyclerView;

import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

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

public class MainActivity extends AppCompatActivity {

    RecyclerView recyclerView;
    RecyclerAdapter recyclerAdapter;

    List<String> WordList;

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

        recyclerView = findViewById(R.id.recyclerView);
        recyclerAdapter = new RecyclerAdapter(WordList);

        recyclerView.setAdapter(recyclerAdapter);

   

     DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(this, 
 DividerItemDecoration.VERTICAL);
            recyclerView.addItemDecoration(dividerItemDecoration);
    
            WordList = new ArrayList<>();
            WordList.add("First");
            WordList.add("Chairman's (צ'רמנז)");
            WordList.add("The Cheesy Poofs 254 (צ'יזי פופס)");
            WordList.add("Hamosad 1657 (המוסד)");
            WordList.add("Orbit 1690 (אורביט)");
            WordList.add("Game Changers");
            WordList.add("Infinite Recharge");
            WordList.add("Deep Space");
            WordList.add("Power Up");
            WordList.add("Eyal Hershko (הרשקו המלך)");
            WordList.add("Washer (שייבה)");
            WordList.add("Soldering Iron (מלחם)");
            WordList.add("Soldering Paste (משחת הלחמה");
            WordList.add("Soldering Tin (בדיל)");
            WordList.add("RoboRio (רובוריו)");
    
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.main_menu, menu);
            MenuItem item = menu.findItem(R.id.action_search);
            SearchView searchView = (SearchView) item.getActionView();
            searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
                @Override
                public boolean onQueryTextSubmit(String query) {
                    return false;
                }
    
                @Override
                public boolean onQueryTextChange(String newText) {
                    return false;
                }
            });
    
            return super.onCreateOptionsMenu(menu);
        }
    }

activity_main:

<?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="wrap_content"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="409dp"
        android:layout_height="729dp"
        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="1.0" />
</androidx.constraintlayout.widget.ConstraintLayout>

row_item.xml:

<?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="wrap_content">

    <TextView
        android:id="@+id/textView"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="16dp"
        android:layout_marginBottom="16dp"
        android:text="TextView"
        android:textAppearance="@style/TextAppearance.AppCompat.Large"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

和 RecyclerAdapter:

 <?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="wrap_content">

    <TextView
        android:id="@+id/textView"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="16dp"
        android:layout_marginBottom="16dp"
        android:text="TextView"
        android:textAppearance="@style/TextAppearance.AppCompat.Large"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

我正在学习本教程: https://www.youtube.com/watch?v=9rcrYFO1ogc&list=WL&index=114

【问题讨论】:

  • WordList(应该真正命名为wordList)是null,当你将它传递给RecyclerAdapter时,在传递它之前初始化它
  • 你必须在上面初始化 WorldList

标签: java android android-recyclerview


【解决方案1】:

请在List上的数据集后绑定recyclerview如下:

        WordList = new ArrayList<>();
        WordList.add("First");
        WordList.add("Chairman's (צ'רמנז)");
        WordList.add("The Cheesy Poofs 254 (צ'יזי פופס)");
        WordList.add("Hamosad 1657 (המוסד)");
        WordList.add("Orbit 1690 (אורביט)");
        WordList.add("Game Changers");
        WordList.add("Infinite Recharge");
        WordList.add("Deep Space");
        WordList.add("Power Up");
        WordList.add("Eyal Hershko (הרשקו המלך)");
        WordList.add("Washer (שייבה)");
        WordList.add("Soldering Iron (מלחם)");
        WordList.add("Soldering Paste (משחת הלחמה");
        WordList.add("Soldering Tin (בדיל)");
        WordList.add("RoboRio (רובוריו)");

        recyclerAdapter = new RecyclerAdapter(WordList); 
        recyclerView.setAdapter(recyclerAdapter);

【讨论】:

    猜你喜欢
    • 2013-03-09
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    相关资源
    最近更新 更多