在集成 AWS SNS推送的时候,需要依赖于 FCM,FCM 会根据每一个 APP 生成一个 tokenId,这个 tokenId 一般会在以下情况发生改变:a. APP 第一次安装;b. 用户清除数据。我想的是当 tokenId 发生改变的时候,初始化 AWS(生成 Endpoint , 而其中是开启一个服务,这个服务的 onCreate 方法中初始化了一个可写的数据库),此时还未给应用添加读写权限(Android 6.0 以上需添加动态权限),造成了该数据库是不可写的,此时去操作数据库,就会发生异常,报 android.database.sqlite.SQLiteException: no such table: 。
解决这个问题的过程中,我查看了数据库,数据库表已经创建,但是提示 no such table ,这一点让我百思不得其解,后来通过 Device File Explorer 发现第一安装应用时,数据库文件的 permissions 是 rw------- , 而第二次打开时变成了 rw-rw---- ,此时数据库操作正常了。
通过这次问题的发现,让我更加谨慎、全面的考虑问题,解决问题。