当前位置: 首页 > 知识库问答 >
问题:

错误发生在回收器视图

闻人凯泽
2023-03-14

这个应用程序直接从应用编程接口获取数据。当它运行时,会发生这种类型的错误。基本上,我认为错误发生在getItemCount()方法中,但我无法解决这个问题。我已经附上了错误文件和整个代码。如果你能解决这个错误,我将不胜感激。

JAVAlang.NullPointerException:尝试调用接口方法“int java”。util。列表com上的空对象引用上的size()。techbrightsoft。数据库MyRecyler。android上的getItemCount(MyRecyler.java:36)。支持v7。小装置。回收视图。android上的dispatchLayoutStep1(RecyclerView.java:3603)。支持v7。小装置。回收视图。android上的onMeasure(RecyclerView.java:3103)。看法看法在android上测量(View.java:20151)。支持限制我很年轻。android上的internalMeasureChildren(ConstraintLayout.java:934)。支持限制我很年轻。android上的onMeasure(ConstraintLayout.java:973)。看法看法在android上测量(View.java:20151)。看法查看组。android上的measureChildWithMargins(ViewGroup.java:6330)。小装置。框架布局。android上的onMeasure(FrameLayout.java:194)。支持v7。小装置。ContentFrameLayout。android上的onMeasure(ContentFrameLayout.java:139)。看法看法在android上测量(View.java:20151)。看法查看组。android上的measureChildWithMargins(ViewGroup.java:6330)。支持v7。小装置。操作Baroverlay布局。android上的onMeasure(ActionBarOverlayLayout.java:400)。看法看法在android上测量(View.java:20151)。看法查看组。android上的measureChildWithMargins(ViewGroup.java:6330)。小装置。框架布局。android上的onMeasure(FrameLayout.java:194)。看法看法在android上测量(View.java:20151)。看法查看组。android上的measureChildWithMargins(ViewGroup.java:6330)。小装置。线性布局。android上的measureChildBeforeLayout(LinearLayout.java:1464)。小装置。线性布局。android上的measureVertical(LinearLayout.java:747)。小装置。线性布局。android上的onMeasure(LinearLayout.java:629)。看法看法在android上测量(View.java:20151)。看法查看组。android上的measureChildWithMargins(ViewGroup.java:6330)。小装置。框架布局。com上的onMeasure(FrameLayout.java:194)。Android内部的政策电话窗口$DecorView。android上的onMeasure(PhoneWindow.java:3158)。看法看法在android上测量(View.java:20151)。看法ViewRootImpl。android上的performMeasure(ViewRootImpl.java:2594)。看法ViewRootImpl。android上的measureHierarchy(ViewRootImpl.java:1549)。看法ViewRootImpl。android上的performTraversals(ViewRootImpl.java:1841)。看法ViewRootImpl。android上的doTraversal(ViewRootImpl.java:1437)。看法ViewRootImpl$TraversalRunnable。在android上运行(ViewRootImpl.java:7397)。看法编舞$CallbackRecord。在android上运行(Choreographer.java:920)。看法编舞android上的doCallbacks(Choreographer.java:695)。看法编舞android上的doFrame(Choreographer.java:631)。看法编舞$FrameDisplayEventReceiver。在android上运行(Choreographer.java:906)。操作系统。汉德勒。android上的handleCallback(Handler.java:739)。操作系统。汉德勒。android上的dispatchMessage(Handler.java:95)。操作系统。活套。android上的loop(Looper.java:158)。应用程序。活动线程。java上的main(ActivityThread.java:7224)。朗,反思一下。方法在com上调用(本机方法)。Android内部的操作系统。ZygoteInit$MethodandArgscaler。在com上运行(zyteinit.java:1230)。Android内部的操作系统。合子体。main(ZygoteInit.java:1120)

  public class MyRecyler extends RecyclerView.Adapter<MyRecyler.MyHolder> {
  private Context context;
   private ArrayList<String> names;

    public MyRecyler(Context context, ArrayList<String> names) {
        this.context = context;
        this.names = names;
    }

    @Override
    public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(this.context);
        View view = inflater.inflate(R.layout.names, parent, false);
        return new MyHolder(view);
    }

    @Override
    public void onBindViewHolder(MyHolder holder, int position) {
        holder.name.setText(this.names.get(position));
    }

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

    public class MyHolder extends RecyclerView.ViewHolder {
        TextView name;

        public MyHolder(View itemView) {
            super(itemView);
            name = itemView.findViewById(R.id.name);
        }
    }


    public class MainActivity extends AppCompatActivity {
    public static ArrayList<String> authors_names ;
    RecyclerView recyclerView;
    EditText editText;
    Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerView = findViewById(R.id.recyclerView);
        // Downloading Data From Internet
        DownloadingData downloadingData = new DownloadingData();
        downloadingData.execute("https://newsapi.org/v1/articles?source=the-next-web&sortBy=latest&apiKey=a301a9e90c774b4ebf7eb21000cdbdef");


        // RecyclerView Set
        MyRecyler recyler = new MyRecyler(MainActivity.this,authors_names);
        recyclerView.setAdapter(recyler);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyler.notifyDataSetChanged();
    }
}

共有1个答案

牧信厚
2023-03-14

这段代码似乎没有正确初始化作者的名字。如果我猜对了你的代码逻辑,你想用下载数据的结果来填写作者姓名。通常,将该列表传递给适配器是一种糟糕的做法。

我的建议是用一个空列表初始化names,并定义一个addAll()方法来更新其内容。一个简单且未优化的实现如下所示:

private ArrayList<String> names = new ArrayList<>();

public void addAll(ArrayList<String> items) {
    names.clear();
    names.addAll(items);
    notifyDatasetChanged();
}

DownloadingData完成其作业(通常通过回调)时,您需要从主代码中添加带有addAll()方法的项。

 类似资料:
  • 我刚开始在firebase工作。我设法上传了文本和图像,但是,我无法检索要显示在回收器视图中的图像,只能检索文本。我用的是毕加索依赖。我已经包括了我的主要活动。java类,该类负责显示从问题“我的适配器”中的firebase检索的回收器视图项。java类和模型类。我相信,在我将图像URI上载到firebase存储时,我可能犯了没有存储图像URI的错误,因此适配器无法检索图像位置。我想这可能是因为我

  • 在其他回收器视图中有一个回收器视图。两者都需要垂直滚动。外部回收器视图滚动正常,但内部回收器视图滚动不正常。 这是代码: ViewAdapter如下: 我尝试了以下两种回收商观点,但都无法解决问题 也尝试了这个:

  • 我正在使用ExoPlayer流视频中的回收视图。 我正在ViewHolder中的RecyclerView适配器的绑定方法中实现ExoPlayer。 我使用的视频格式是m3u8,我使用的URL在浏览器中工作。所以我知道视频链接是有效的。我还测试了一个youtube链接。 以下是Recyclerview适配器的ViewHolder中的代码- 当加载我的recyclerview并带着视频进入该行时,我发

  • 我有一个回收器视图有10个项目。我滚动到页面底部,现在我正尝试为第一个项目调用。当我调用它时,它不会触发第一个项目的。因此,简而言之,我的问题是,当我调用时,其位置没有显示在屏幕上,它是否触发了?。这是我的适配器代码

  • 我正在尝试在我的 上实现 ,但我没有得到任何结果。 我遵循了这个教程和这个技巧,但是没有人为我工作。 我已经实现了: 但它不让我编译,因为它们是不同的< code > viewmoder ,因为我创建了两个< code > viewmoder 类,但它们< code >扩展了Recycler。ViewHolder所以我不明白... 我正在尝试这样做,因为我有一个,我希望当列表为空时,它会显示一个,

  • 我收到以下错误:“RecyclerView:未连接适配器;跳过布局”,但我已连接适配器...我尝试了许多不同的方法,但我无法解决错误。 我正在使用Volley库获取数据。当我启动活动时,只有进度条可见,直到结束,我收到上面的Logcat消息。我在中添加了带有适配器的。你能帮我吗? 这是我的代码: 主活动 地震适配器 MainActivity.xml 地震法。xml