chat-sdk-android icon indicating copy to clipboard operation
chat-sdk-android copied to clipboard

How to clear local database "andorid-chatsdk-database" using ChatSDK?

Open anonym24 opened this issue 4 years ago • 1 comments
trafficstars

ChatSDK has a bug when re-signing on the same device with different users, it's related to database, if you reinstall the app fully before signing to a new user, then everything is ok, but if you do not, and re-signing to the same app instance with another user then we get the next error when these users try to open a thread with each other:

val threadID = createThreadIdFromIdsOfUsers(ChatSDK.currentUser().entityID, otherUser.entityID)
ChatSDK.thread().createThread(null, listOf(user), ThreadType.Private1to1, threadID)
private fun createThreadIdFromIdsOfUsers(ourUserId: String, otherUserId: String): String {
    return sortString("$ourUserId$otherUserId")
}

private fun sortString(str: String): String {
    return str.toCharArray().sorted().joinToString(separator = "")
}

I receive ThreadID without any issues, but when it's being used in ChatActivity, it can't get Thread object by this id, some issue with cache, reinstalling the app helps

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.Date sdk.chat.core.dao.Thread.getLoadMessagesFrom()' on a null object reference
        at sdk.chat.ui.views.ChatView.onLoadMore(ChatView.java:296)
        at sdk.chat.ui.views.ChatView.initViews(ChatView.java:220)
        at sdk.chat.ui.activities.ChatActivity.initViews(ChatActivity.java:240)

so between ChatkSDK logout (old user) and ChatSDK login (new user) I have to clear/reset database of ChatSDK (or only threads and messages in cache) to avoid this bug. But I can't find any method to clear cache. I tried to look at ChatSDK.db() methods but there is nothing

ChatSDK version - 5.1.14

anonym24 avatar Apr 09 '21 10:04 anonym24

my temporary solution on app logout do next:

        if (ChatSDK.shared().isActive) {
            ChatSDK.shared().stop()
        }
        context.deleteDatabase("andorid-chatsdk-database")
        val intent = context.packageManager.getLaunchIntentForPackage(context.packageName)!!
        context.startActivity(Intent.makeRestartActivityTask(intent.component))
        exitProcess(0)

anonym24 avatar Apr 09 '21 12:04 anonym24