我正在测试通过 Gson 将当前 QBUser 对象保存到共享首选项中,这意味着我想在本地保存所有 QBUser 字段以供日后使用使用。
我注意到某些字段被定义为可序列化而某些字段未定义。是否有一个原因?对于背景信息,我使用的排除模式仅包含定义了 SerializedName 注释的字段,并将其与类中的其他字段一起使用。
见打印输出:
// Compiled from QBUser.java (version 1.6 : 50.0, super bit)
public class com.quickblox.module.users.model.QBUser extends com.quickblox.core.model.QBEntity {
// Field descriptor #63 Ljava/lang/String;
@com.google.gson.annotations.SerializedName(value="full_name")
protected java.lang.String fullName;
// Field descriptor #63 Ljava/lang/String;
protected java.lang.String email;
// Field descriptor #63 Ljava/lang/String;
protected java.lang.String login;
// Field descriptor #63 Ljava/lang/String;
protected java.lang.String phone;
// Field descriptor #63 Ljava/lang/String;
protected java.lang.String website;
// Field descriptor #73 Ljava/util/Date;
@com.google.gson.annotations.SerializedName(value="last_request_at")
protected java.util.Date lastRequestAt;
// Field descriptor #63 Ljava/lang/String;
@com.google.gson.annotations.SerializedName(value="external_user_id")
protected java.lang.String externalId;
// Field descriptor #63 Ljava/lang/String;
@com.google.gson.annotations.SerializedName(value="facebook_id")
protected java.lang.String facebookId;
// Field descriptor #63 Ljava/lang/String;
@com.google.gson.annotations.SerializedName(value="twitter_id")
protected java.lang.String twitterId;
// Field descriptor #82 Ljava/lang/Integer;
@com.google.gson.annotations.SerializedName(value="blob_id")
protected java.lang.Integer blobId;
// Field descriptor #63 Ljava/lang/String;
@com.google.gson.annotations.SerializedName(value="user_tags")
protected java.lang.String tags;
// Field descriptor #63 Ljava/lang/String;
protected java.lang.String password;
// Field descriptor #63 Ljava/lang/String;
protected java.lang.String oldPassword;
所以我们可以看到,例如 full_name 可以通过 Gson 保存得很好但例如登录和 email_address 不是。
与 QB iOS SDK 相比, QBUser 类正在全面实现 NSCoding ,这使我可以很好地存储当前用户对象NSUserDefaults与Android的 SharedPreferences 相同。
如果这不是将用户本地存储到设备的正确方法,那么所有提示都表示赞赏! :)