I'm writing a chat application on android with kt, I have messages saved on firebase realtime database, is it possible to use realtime db persistence to save all messages and be able to read them when user is offline? Because at the moment I tried to enable persistence but when I open the chat I don't see any messages, and I think it might be a memory issue. I read that the real time database cache is 10MB, is it possible to increase it like the Firestore cache? If I can't use cache persistence, do you have any advice on what to use?
For persistence and sync, I use this code in main activity:
Firebase.database.setPersistenceEnabled(true)
Firebase.database.setLogLevel(Logger.Level.DEBUG)
val settings = FirebaseFirestoreSettings.Builder()
.setCacheSizeBytes(FirebaseFirestoreSettings.CACHE_SIZE_UNLIMITED)
.build()
var db : FirebaseFirestore = FirebaseFirestore.getInstance()
db.firestoreSettings = settings
val scoresRef = Firebase.database.getReference("chats")
scoresRef.keepSynced(true)
and i read messages from db with this code:
mDbRef.child("chats").child(senderRoom!!).child("messages")
.addValueEventListener(object : ValueEventListener {
@SuppressLint("NotifyDataSetChanged")
override fun onDataChange(snapshot: DataSnapshot) {
messageList.clear()
for (postSnapshot in snapshot.children) {
val message = postSnapshot.getValue(Message::class.java)
messageList.add(message!!)
}
messageAdapter.notifyDataSetChanged()
messageRecyclerView.scrollToPosition(messageAdapter.itemCount - 1)
}
override fun onCancelled(error: DatabaseError) {
TODO("Not yet implemented")
}
})
log that i found
D/WebSocket: ws_2 - WebSocket reached EOF.
D/WebSocket: ws_2 - WebSocket error.
com.google.firebase.database.tubesock.WebSocketException: IO Exception
at com.google.firebase.database.tubesock.WebSocketWriter.runWriter(WebSocketWriter.java:159)
at com.google.firebase.database.tubesock.WebSocketWriter.access$000(WebSocketWriter.java:30)
at com.google.firebase.database.tubesock.WebSocketWriter$1.run(WebSocketWriter.java:47)
at java.lang.Thread.run(Thread.java:1012)
Caused by: java.net.SocketException: Socket closed
at com.android.org.conscrypt.ConscryptEngineSocket$SSLOutputStream.writeInternal(ConscryptEngineSocket.java:690)
at com.android.org.conscrypt.ConscryptEngineSocket$SSLOutputStream.write(ConscryptEngineSocket.java:661)
at java.nio.channels.Channels$WritableByteChannelImpl.write(Channels.java:460)
at com.google.firebase.database.tubesock.WebSocketWriter.writeMessage(WebSocketWriter.java:138)
at com.google.firebase.database.tubesock.WebSocketWriter.runWriter(WebSocketWriter.java:152)
at com.google.firebase.database.tubesock.WebSocketWriter.access$000(WebSocketWriter.java:30)
at com.google.firebase.database.tubesock.WebSocketWriter$1.run(WebSocketWriter.java:47)
at java.lang.Thread.run(Thread.java:1012)
D/WebSocket: ws_2 - closed