FCM发送通知时报错java.lang.String类型无法转换问题求助
问题原因
你Firebase Realtime Database中Tokens节点下存储的每一条数据是纯字符串类型的token值,而不是包含token字段的对象结构,因此Firebase无法将字符串直接映射为你定义的TokenModel类对象,就触发了类型转换报错。
解决方案(二选一即可)
方案1:调整数据存储结构(推荐,后续扩展性更好)
修改你保存Token到Firebase的代码,不要直接存字符串,按照TokenModel的结构存储:
// 原存储token的逻辑大概率类似这样: // tokens.child(uid).setValue(tokenStr); // 修改为: TokenModel tokenModel = new TokenModel(tokenStr); tokens.child(uid).setValue(tokenModel);
存储后数据结构会变成:
Tokens └── 用户uid └── token: "你的fcm token值"
你现有读取TokenModel的代码不需要修改即可正常运行。
方案2:直接读取字符串(无需改存储逻辑,改动量小)
不需要使用TokenModel做映射,直接读取快照的字符串值即可,修改报错行及后续逻辑:
// 替换原来的 TokenModel tokenModel = snapshot.getValue(TokenModel.class); String token = snapshot.getValue(String.class); // 后续构造Sender时直接用token即可 Sender sender1 = new Sender(data, token);
这个方案不需要调整存储逻辑,仅修改读取代码即可解决报错。
内容的提问来源于stack exchange,提问作者user16489264
相关产品推荐
相关产品推荐

