繁体   English   中英

ArrayList和RecyclerView的java.lang.OutOfMemoryError

[英]java.lang.OutOfMemoryError with ArrayList and RecyclerView

并先感谢您的帮助。 我正在尝试将ArrayList放入RecyclerView中,但我又回来了此错误:

java.lang.OutOfMemoryError:未能分配具有24194304个空闲字节和4MB的7224906字节分配,直到java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:95)的OOM处,java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:125) ),位于com.android.internal.util.FastPrintWriter.flushLocked(FastPrintWriter.java:358)处java.io.StringWriter.write(StringWriter.java:123)处java.lang.StringBuffer.append(StringBuffer.java:278)在com.android.internal.util.FastPrintWriter.appendLocked(FastPrintWriter.java:303)在com.android.internal.util.FastPrintWriter.write(FastPrintWriter.java:625)在com.android.internal.util.FastPrintWriter.append (FastPrintWriter.java:658)在java.io.PrintWriter.append(PrintWriter.java:691)在java.io.PrintWriter.append(PrintWriter.java:31)在java.lang.Throwable.printStackTrace(Throwable.java: 324),位于com.android.internal的android.util.Log.getStackTraceString(Log.java:335)的java.lang.Throwable.printStackTrace(Throwable.java:300)。 os.RuntimeInit.Clog_e(RuntimeInit.java:59)com.android.internal.os.RuntimeInit.access $ 200(RuntimeInit.java:43)com.android.internal.os.RuntimeInit $ UncaughtHandler.uncaughtException(RuntimeInit.java) :85)在java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)在java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)

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

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;
}

我仅在这部分代码中遇到此错误,有人可以向我解释原因吗? 非常感谢,并度过美好时光!

您在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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM