首页 文章

带有ArrayList和RecyclerView的java.lang.OutOfMemoryError

提问于
浏览
0

并提前感谢您的帮助 . 我正在尝试将ArrayList放入RecyclerView,但我收回了这个错误:

java.lang.OutOfMemoryError:无法在java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java)的java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:95)上分配带有4194304个空闲字节和4MB的7224906字节分配 . 125)at java.lang.StringBuffer.append(StringBuffer.java:278)at java.io.StringWriter.write(StringWriter.java:123)at com.android.internal.util.FastPrintWriter.flushLocked(FastPrintWriter.java:358) )com.android.internal.uternal.upend.FastPrintWriter中com.android.internal.util.FastPrintWriter.write(FastPrintWriter.java:625)的com.android.internal.util.FastPrintWriter.appendLocked(FastPrintWriter.java:303) . 在java.io.PrintWriter.append(PrintWriter.java:71)的java.io.PrintWriter.append(PrintWriter.java:71)中附加(FastPrintWriter.java:658)java.lang.Throwable.printStackTrace(Throwable.java) :324)在com.android.interna的android.util.Log.getStackTraceString(Log.java:335)的java.lang.Throwable.printStackTrace(Throwable.java:300) com.android.internal.os.RuntimeInit $ uncaughtHandler.uncaughtException(RuntimeInit .java:85)java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)at 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;
}

我只能用这部分代码得到这个错误,有人能解释一下原因吗?非常感谢,祝你玩得愉快!

1 回答

  • 1

    你在 getList 方法中有一个递归调用,由于这个递归调用而分配了很多对象 . 这产生你的 OutOfMemoryException .

    Edit example

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

相关问题