您好,我对自定义的AVUser使用toString()方法fastJson报错,请问下改如何解决,具体报错如下:
com.alibaba.fastjson.JSONException: write javaBean error
W/System.err: at com.alibaba.fastjson.serializer.JavaBeanSerializer.write(JavaBeanSerializer.java:212)
W/System.err: at com.alibaba.fastjson.serializer.JSONSerializer.write(JSONSerializer.java:369)
W/System.err: at com.alibaba.fastjson.JSON.toJSONString(JSON.java:490)
W/System.err: at com.avos.avoscloud.AVObject.toString(AVObject.java:131)

顺便说一下,之前的版本没有这样的问题,是不是升级了最新SDK导致的?

你好,是否 SDK 升级到 v3.15.1?

「自定义的AVUser使用toString()方法」这部分的代码,是否可以贴出来?

public class RinzzUser extends AVUser {
public static final Creator CREATOR = AVObjectCreator.instance;

public RinzzUser() {
}

public String getNickname() {
    return getString("nickname");
}

public void setNickname(String Nickname) {
    this.put("nickname", Nickname);
}

public String getAvatarUrl() {
    return getString("avatarUrl");
}

public void setAvatarUrl(String AvatarUrl) {
    this.put("avatarUrl", AvatarUrl);
}

public int getSex() {
    return getInt("sex");
}

public void setSex(int Sex) {
    this.put("sex", Sex);
}

public int getLevel(){
    return getInt("level");
}

public int getExp(){
    return getInt("exp");
}

public int getMoney(){
    return getInt("money");
}

public int getLoginDay(){
    return getInt("loginDay");
}

public String getBcgImgUrl() {
    return getString("bcgImgUrl");
}

public void setBcgImgUrl(String bcgImgUrl) {
    this.put("bcgImgUrl", bcgImgUrl);
}

public String getIntroduce() {
    return getString("introduce");
}

public void setIntroduce(String Introduce) {
    this.put("introduce", Introduce);
}

public boolean isComplete() {
    if (containsKey("nickname") && containsKey("avatarUrl") && containsKey("sex")) {
        return true;
    } else {
        return false;
    }
}

}

我没有更新过,可能是AS自动更新了,我查看版本时候是3.14.10,然后就去更新了3.15.1,还有同样的问题。其他的Object都没有这样的问题,我直接把AVUser可以toString,只有我自己继承的那个不能toString。

final RinzzUser rinzzUser = AVUser.cast(AVUser.getCurrentUser(), RinzzUser.class);
我是这样使用然后通过intent传递给下一个Activity,不光是登录用户,目前我项目中所有使用RinzzUser的代码中都是只能读,不能toString()

AVUser 的子类化和 AVObject 不一样。

1、不需要有变量 public static final Creator CREATOR = AVObjectCreator.instance; 和构造函数:

public RinzzUser() {
}

2、同时如果希望以后查询 AVUser 所得到的对象会自动转化为用户子类化的对象,则需要在调用 AVOSCloud.initialize() 之前添加:

AVUser.alwaysUseSubUserClass(subUser.class);

请按照文档检查核对一下: https://leancloud.cn/docs/leanstorage_guide-android.html#AVUser_的子类化10

我之前就是这么做的,添加构造函数和Creator是在我项目突然报错了之后测试添加的,刚刚又删掉了构造函数和creator,结果还是同样的报错

您好,通过降低版本,我确认是3.15.1版本的问题(完全按照文档的规范),我降低版本到我项目的上一个版本3.14.10就完全没有任何问题了,希望及时修复这个问题。

已发布 v3.15.2,修复 AVUser 序列化时阻塞的问题。请更新 SDK。

如果还有任何问题,请继续留言。

好的,问题已经解决,非常感谢