Java 当我在recylerview上使用findViewById()时,我收到一个空值

Java 当我在recylerview上使用findViewById()时,我收到一个空值,java,android,android-recyclerview,nullpointerexception,findviewbyid,Java,Android,Android Recyclerview,Nullpointerexception,Findviewbyid,因此,我正在创建一个应用程序,它使用recycler视图来显示卡视图组件,但问题是,当我使用RecyclerView groceryRecycler=(RecyclerView)findViewById(R.id.recycler\u view1)时,我收到一个空指针异常。对我来说没有意义的是,我正在为groceryRecycler变量引用正确的回收器视图布局 我对空指针异常进行了研究&它只在声明变量但未为其分配对象时发生。但是我确实使用findviewbyd()为recycler视图变量分配了

因此,我正在创建一个应用程序,它使用recycler视图来显示卡视图组件,但问题是,当我使用
RecyclerView groceryRecycler=(RecyclerView)findViewById(R.id.recycler\u view1)
时,我收到一个空指针异常。对我来说没有意义的是,我正在为
groceryRecycler
变量引用正确的回收器视图布局

我对空指针异常进行了研究&它只在声明变量但未为其分配对象时发生。但是我确实使用
findviewbyd()
为recycler视图变量分配了一个对象。因此,每当我调用recycler视图变量上的方法时,我都会得到一个空指针异常。我不明白我在这里做错了什么,也不知道如何解决这个问题。任何帮助都将不胜感激

以下是我的回收器视图布局代码:

<androidx.recyclerview.widget.RecyclerView

xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/recycler_view1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical" >

</androidx.recyclerview.widget.RecyclerView>

尝试使用此选项从
onCreate

AsyncTask.execute(new Runnable() {
            @Override
            public void run() {
                //Your task here
            }
        });

希望这有帮助。很抱歉,这个简短的回答。请随时要求澄清…

您不能使用
RecyclerView
作为根布局,但必须将其包装到实际布局中。

您从何处调用createRecyclerView?我从AsyncTask中的onPostExecute()调用createRecyclerView()。可能的原因是,在setconteview()完成其工作之前,已启动的异步任务即将完成。(请说明您从何处开始asynctask)@vishnu哦,您可能是对的,也许asynctask线程在主线程之前就完成了,但是,我如何确认这一点或解决问题?感谢您的帮助异步任务完成后,无需运行任何此代码。在onCreate中设置回收器,然后保留对适配器的引用。当异步调用完成时,用异步调用的结果更新适配器的数据。我们可以使用
RecyclerView
作为根布局。请看一下文档。我在我的
onCreate()
中实现了上面的代码,数据库代码在
run()
中,设置回收器视图的代码也在
onCreate()
中,但回收器视图仍然为空。然后,我尝试在数据库代码之后的
run()
中实例化recycler视图,但recycler视图仍然为null。现在我怀疑recycler视图为null是否是线程的问题,因为我尝试在主线程和后台线程上运行代码,并且两次recycler视图都为null。我没有得到将其设置为null的结果。我还尝试引用回收器视图、适配器和布局管理器实例变量,同时在
onCreate
中实例化回收器视图,并在
onPostExecute()
中实例化适配器和布局管理器,然后在
onCreate()中设置回收器视图
但回收器视图仍然为空。@ZahidHabib听到这个消息很难过。我真的很抱歉,我认为您的代码中不需要
AsyncTask
,[据我所知]。DB查询只需要很少的时间,这可以在
UI线程中完成。很抱歉让您失望。@ZahidHabib另外,如果您正在进行android开发,我强烈建议您使用
Room持久性库
来使用
SQLite数据库
。这是一个很好的起点。还可以查看视频教程
    java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.recyclerview.widget.RecyclerView.setLayoutManager(androidx.recyclerview.widget.RecyclerView$LayoutManager)' on a null object reference
    at com.myapp.groceryapp.GroceryItem.createRecyclerView(GroceryItem.java:70)
    at com.myapp.groceryapp.GroceryItem$StartDatabase.onPostExecute(GroceryItem.java:131)
    at com.myapp.groceryapp.GroceryItem$StartDatabase.onPostExecute(GroceryItem.java:112)
    at android.os.AsyncTask.finish(AsyncTask.java:755)
    at android.os.AsyncTask.access$900(AsyncTask.java:192)
    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:772)
    at android.os.Handler.dispatchMessage(Handler.java:107)
    at android.os.Looper.loop(Looper.java:214)
    at android.app.ActivityThread.main(ActivityThread.java:7682)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
AsyncTask.execute(new Runnable() {
            @Override
            public void run() {
                //Your task here
            }
        });