ユーザが他のユーザを検索して友人として追加できるようにしたいと考えています。 私はFirebaseデータベースに約6,000のユーザノードを持っているので、明らかにそれを検索するのはかなり重い作業です。 私は私の「ユーザー」ノード、ルートディレクトリに「friendsIndex」と呼ばれ、検索のために必要な最小限の情報でそれを埋めから別のノードを作成しました:FirebaseデータベースOutOfMemoryError - 大きな検索操作
:私のデータベースルールがこれを持っているfriendsIndex: {
$userID: {
name: "firstName",
lastName: "lastName",
profileImg: "urltoImage..."
},
....
}
"friendsIndex":{
"$userID":{
".indexOn": ["name", "lastName"]
}
},
ユーザー検索機能は、次のようになります。
Query mQuery = Database.child("friendsIndex").orderByChild("name").startAt(searchWord).endAt(searchWord+"\uf8ff");
mQuery.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
User user;
for (DataSnapshot eventSnapshot : dataSnapshot.getChildren()) {
user = eventSnapshot.getValue(User.class);
//more code..
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
しかし、私はまだ、このエラーを取得しています:
08-31 13:03:28.354 3916-3925/com.learnArabic.anaAref E/System: java.lang.OutOfMemoryError: OutOfMemoryError thrown while trying to throw OutOfMemoryError; no stack trace available
08-31 13:03:28.364 3916-17998/com.learnArabic.anaAref E/RunLoop: Firebase Database encountered an OutOfMemoryError. You may need to reduce the amount of data you are syncing to the client (e.g. by using queries or syncing a deeper path). See https://firebase.google.com/docs/database/ios/structure-data#best_practices_for_data_structure and https://firebase.google.com/docs/database/android/retrieve-data#filtering_data
java.lang.OutOfMemoryError: OutOfMemoryError thrown while trying to throw OutOfMemoryError; no stack trace available
08-31 13:03:28.379 3916-3916/com.learnArabic.anaAref E/UncaughtException: java.lang.RuntimeException: Firebase Database encountered an OutOfMemoryError. You may need to reduce the amount of data you are syncing to the client (e.g. by using queries or syncing a deeper path). See https://firebase.google.com/docs/database/ios/structure-data#best_practices_for_data_structure and https://firebase.google.com/docs/database/android/retrieve-data#filtering_data
at com.google.android.gms.internal.mz.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6247)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)
Caused by: java.lang.OutOfMemoryError: OutOfMemoryError thrown while trying to throw OutOfMemoryError; no stack trace available
この検索を実行する重大な方法はありません。
エラーメッセージには、携帯電話のメモリよりも多くのデータを取得していると表示されているためです。クエリのデータ量はどれくらいですか? –