【问题标题】:Firebase Database OutofMemory ErrorFirebase 数据库内存不足错误
【发布时间】:2018-05-05 22:05:38
【问题描述】:

我想获取我所有的 json 孩子,以便我可以离线使用我的应用程序。我在我的应用程序第一次启动时进行同步。由于它在数据库中包含太多数据,我的应用程序多次崩溃并且无法获取所有数据。

致命异常:主要 进程:com.manish.firebaseexample,PID:12234 java.lang.RuntimeException:Firebase 数据库遇到 OutOfMemoryError。您可能需要减少同步到客户端的数据量(例如,通过使用查询或同步更深的路径)。见https://firebase.google.com/docs/database/ios/structure-data#best_practices_for_data_structure 和https://firebase.google.com/docs/database/android/retrieve-data#filtering_data 在 com.google.android.gms.internal.zzdyi.run(未知来源) 在 android.os.Handler.handleCallback(Handler.java:733) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:146) 在 android.app.ActivityThread.main(ActivityThread.java:5602) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) 在 dalvik.system.NativeStart.main(本机方法) 引起:java.lang.OutOfMemoryError 在 java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:94) 在 java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:145) 在 java.lang.StringBuilder.append(StringBuilder.java:216) 在 bma.toString(:com.google.android.gms.DynamiteModulesC@11746036:11) 在 bkq.a(:com.google.android.gms.DynamiteModulesC@11746036:82) 在 bkv.run(:com.google.android.gms.DynamiteModulesC@11746036:9) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422) 在 java.util.concurrent.FutureTask.run(FutureTask.java:237) 在 java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:152) 在 java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:265) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 在 java.lang.Thread.run(Thread.java:841)

我的数据库图片

 refDatabase = FirebaseDatabase.getInstance().getReference().child("INT").child("varieties");
    refDatabase.keepSynced(true);


    refDatabase.getRef().addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Log.d(TAG,""+dataSnapshot.toString());
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Log.d(TAG,databaseError.getMessage());
        }
    });

由于“图像”数据包含 Base64 编码的图像。

【问题讨论】:

  • 所以扩展一个节点并更新/编辑你的问题,它有多大?每一篇都包含什么内容,你想一次读多少?

标签: android firebase firebase-realtime-database out-of-memory firebase-storage


【解决方案1】:

如错误消息所述,您检索的数据超出了手机内存的扩展范围。有两种方法可以解决这个问题。

  1. 释放手机内存以保存更多数据。
  2. 使用其中一种过滤方法过滤数据。

请参阅offical documentation,了解有关在 Firebase 中过滤数据的信息。

【讨论】:

猜你喜欢
  • 2011-08-18
  • 1970-01-01
  • 1970-01-01
  • 2017-07-19
  • 2016-10-10
  • 1970-01-01
  • 2016-09-01
  • 2014-10-11
相关资源
最近更新 更多