您好,我在使用这一行代码时 AVUser.getCurrentUser(RinzzUser.class).getLevel() 获取的int数值始终为0,而当我使用AVUser.cast(AVUser.getCurrentUser(), RinzzUser.class).getLevel()没有任何问题,我降低SDK版本到3.14.10后,两种方法都可以正确获取int数值。

你好,是否可以贴出完整的复现代码和 App ID。

public class RinzzUser extends AVUser {
public int getLevel() {
return getInt("level");
}
}

int level1 = AVUser.getCurrentUser(RinzzUser.class).getLevel();
int level2 = AVUser.cast(AVUser.getCurrentUser(), RinzzUser.class).getLevel();
Log.i("Rinzz",level1+"$"+level2);

我觉得问题不在于我的代码,因为我降低sdk版本到3.14.10以下就好了,这本来就是很简单的数据。

补充一下,level在服务器上有默认值1,上面代码打印是level1 =0 ,level2 =1

可以把详细的使用 RinzzUser 的流程说一下么?
因为 AVUser.getCurrentUser 并不会同步 server 数据到本地,所以这里不排除是本地缓存数据没有及时更新引起的。
另外,把详细的日志贴一下吧,看看不是本地数据反序列化时出问题了?

debug断点是有level的数据的,我估计是sdk反序列化出错了。
刚刚写的调试代码
RinzzUser rinzzUser1 = AVUser.getCurrentUser(RinzzUser.class);
RinzzUser rinzzUser2 =AVUser.cast(AVUser.getCurrentUser(), RinzzUser.class);
int level1 = rinzzUser1.getLevel();
int level2 = rinzzUser2.getLevel();
L.i("");


rinzzUser1 的截图

rinzzUser2的截图

可以看出数据是一样的,估计是AVUser.getCurrentUser(RinzzUser.class)没有正确反序列化。

另外,控制台日志没有任何其他的日志输出

如果可以的话请在 debug 模式下把 getCurrentUser 中 AVPersistenceUtils.readContentFromFile(currentUserArchivePath()) 的 String 的数据发一下,我看看是哪里解析出了问题

currentUserArchivePath()这个是哪个类的方法,还有你们应该有办法重现bug吧,我现在一会使用3.14.10,一会使用3.15.2太麻烦了.