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

Java语言带有ArrayList和RecyclerView的lang.OutOfMemoryError

满元凯
2023-03-14

并提前感谢您的帮助。我试图将ArrayList放入RecyclerView,但我得到了这个错误:

Clog_eOutOfMemoryError:未能分配7224906字节分配4194304可用字节和4MB直到OOM在riter.java:625AbstractStringBcom.android.internal.util.缓冲区(AbstractStringBriter.append)riter.java:658AbstractStringBjava.io.0(AbstractStringBriter.append)在riter.java:691StringBjava.io.(StringBriter.append)在riter.java:31StringWjava.lang.(StringWhrowable.print)在com.android.internal.util.FastPrintWriter.flush锁定(FastPrintWriter.java:358)在com.android.internal.util.FastPrintWriter.append锁定(FastPrintWriter.java:303)在com.android.internal.util.FastPrintWjava.lang.(FastPrintWjava.lang.)uilder.enlargeFastPrintWuilder.java:95(FastPrintWjava.lang.)在uilder.appendPrintWuilder.java:125(PrintWjava.lang.)在uffer.appendPrintWuffer.java:278(PrintWjava.io.)在riter.writeTriter.java:123StackTrace(Throwable. java: 324)在android. util. Logo. getStackTrace

我的代码(有问题的部分)是这样的:

public class TabFragment5 extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    RecyclerView rv = (RecyclerView) inflater.inflate(
            R.layout.fragment_pat_list, container, false);
    setupRecyclerView(rv);
    return rv;
}

private void setupRecyclerView(RecyclerView recyclerView) {
    recyclerView.setLayoutManager(new LinearLayoutManager(recyclerView.getContext()));
    recyclerView.setAdapter(new SimpleStringRecyclerViewAdapter(getActivity(),
            getList(Infos.sPatGrandi)));
}


private ArrayList<String> getList(String[] array) {
    ArrayList<String>list = new ArrayList<String>getList(Infos.sPatGrandi));
    while (list.size()<40){
        list.addAll(getList(Infos.sPatGrandi));
    }
    return list;
}

我只有在这部分代码中才会出现这个错误,有人能解释原因吗?非常感谢,祝你玩得愉快!

共有1个答案

齐锐进
2023-03-14

在方法getList中有一个递归调用,由于这个递归调用,分配了很多对象。这将生成您的OutOfMemoryException。

编辑示例:

List<String> listOfData = new ArrayList<>();
SimpleStringRecyclerViewAdapter adapter = new SimpleStringRecyclerView(context, listOfData);
recyclerView.setAdapter(adapter);
//Now add more content to the list
listOfData.add("new item");
listOfData.add("another item");
//This notifies the adapter and the list that the content has changed
adapter.notifyDataSetChanged();
 类似资料:
  • 问题内容: 我一直在尝试使用此处的少量指导,使用RecyclerView实现CollapsingToolbar:http : //android-developers.blogspot.co.uk/2015/05/android-design-support- library.html 和项目此处:https : //github.com/chrisbanes/cheesesquare,我目前具有

  • 现在我的问题是,如何在自定义的而不是自定义的中重写方法?我没有在这里公布我的代码,因为它与链接的代码本质上是相同的,只是我需要为子创建一个自定义的来代替,这样它就可以按照“pptang”的答案所述进行正确的度量。 否则,有没有比在第二个RecyclerView中使用1个RecyclerView更好的方法?只能有1个RecyclerView使用上述列表和每个中唯一项的网格填充活动/片段吗?

  • 我读了这篇关于RecyclerViews和游标适配器的文章,我正在尝试使用第一种解决方案。我对OnViewHolder函数的实现感到困惑。我知道OnViewHolder可以由(ViewHolder,int)或(ViewHolder,Cursor)调用,但我不知道如何在我的项目中使用它。 我的带有RecyclerView的新适配器。OnBindViewHolder未完成,因为我不知道它是如何设置的。

  • 问题内容: 我正在阅读Drools Planner示例,并且遇到了很多这样的代码: 据我所知,它应该初始化一个长度为n的列表,该列表存储数据类型。 但是,在表达式的两侧具有 不同的集合数据类型 该怎么办? 如果类型与匹配 ,则与执行操作有何不同: 问题答案: 是一个接口。您无法创建接口实例。 是实现List的类,您可以创建一个。 接口仅定义行为。一个实现和接口实现该行为的类。 您将注意到,如果您查

  • 当我用SnapHelper将一个照片库实现为RecyclerView时,我有一个案例。有些照片(全屏宽度的照片)是“粘”在一起的。我想添加一些装饰,所以它在项目之间的空白,但只有当一个开始嘲笑否则我想要一张照片采取整个宽度。我试过: 在创建自定义装饰时,我设法将我的装饰画出屏幕,这样它就只显示在滚动上,但是当重写时,它是不可见的--隐藏在下一张照片下,而当我重写时,下一张照片的边缘在Divider

  • 我正尝试使用实现的适配器,如下所示,正如这里的解决方案之一所建议的。