在ActiveAndroid中,是否可以更新表行中特定字段的数据而不清除行中其余数据?

3

ActiveAndroid:

我需要更新特定表格字段的更新内容,而不会在每次没有保存所有字段数据时清除行中的任何现有数据。

例如:

我有一个名为“user”的表格,其中包含以下字段:

extSrc | extId | email | firstName | lastName | role | photo | userId | verified

如果我保存了除“verified”以外的所有字段数据,然后稍后需要仅更新已验证的字段-这是可能的吗?

目前,当我使用下面的代码时,除了userId(我已经将其存储在本地)和verified之外,所有字段都被填充,所有其他字段都被清除。 在我拥有所需更新的验证值时,我没有其他用户数据可以推送/保存(save()),因此当userId与用户表中的userId匹配时,我只需要更新特定的“verified”字段,并保留该用户的所有其他字段。

我的代码:

模型:

    // define table name
    @Table(name = "User")

    public class User extends Model 
    {
    // define table columns

    @Column(name = "extSrc")
    public String extSrc;

    @Column(name = "extId")
    public String extId;

    @Column(name = "email")
    public String email;

    @Column(name = "firstName")
    public String firstName;

    @Column(name = "lastName")
    public String lastName;

    @Column(name = "role")
    public String role;

    @Column(name = "photo")
    public String photo;

    @Column(name = "userId", unique = true, onUniqueConflict = Column.ConflictAction.REPLACE)
    public String userId;

    @Column(name = "verified")
    public String verified;
    }


controller:


    public class UserAdapter implements JsonDeserializer {

    @Override
    public User deserialize(JsonElement arg0, Type arg1,
        JsonDeserializationContext arg2) throws JsonParseException {

            User u = new User();

            Log.v("user", u.toString());

            JsonObject j = (JsonObject) arg0;

            Log.v("j", j.toString());


            if(j.has("extSrc"))
            {
                u.extSrc = j.get("extSrc").getAsString();
                Log.v("extSrc", u.extSrc);
            }
            else
            {
                Log.v("extSrc", "does not exist");
            }


            if(j.has("extId"))
            {
                u.extId = j.get("extId").getAsString();
                Log.v("extId", u.extId);
            }
            else
            {
                Log.v("extId", "does not exist");
            }


            if(j.has("email"))
            {
                u.email = j.get("email").getAsString();
                Log.v("email", u.email);
            }
            else
            {
                Log.v("email", "does not exist");
            }


            if(j.has("firstName"))
            {
                u.firstName = j.get("firstName").getAsString();
                Log.v("firstName", u.firstName);
            }
            else
            {
                Log.v("firstName", "does not exist");
            }


            if(j.has("lastName"))
            {
                u.lastName = j.get("lastName").getAsString();
                Log.v("lastName", u.lastName);
            }
            else
            {
                Log.v("lastName", "does not exist");
            }


            if(j.has("role"))
            {
                u.role = j.get("role").getAsString();
                Log.v("role", u.role);
            }
            else
            {
                Log.v("role", "does not exist");
            }


            if(j.has("photo"))
            {
                u.photo = j.get("photo").getAsString();
                Log.v("photo", u.photo);
            }
            else
            {
                Log.v("photo", "does not exist");
            }


            if(j.has("userId"))
            {
                u.userId = j.get("userId").getAsString();
                Log.v("userId", u.userId);
            }
            else
            {
                Log.v("userId", "does not exist");
            }


            if(j.has("verified"))
            {
                u.userId = SpontlyApplication.PREFS_USER_ID;
                u.verified = j.get("verified").getAsString();

                Log.v("verified", u.verified);
            }
            else
            {
                u.verified = "true";
                Log.v("verified", "does not exist");
            }

     u.save();

     }   
感谢您。
1个回答

2
如果您想更新数据库中已存在的用户,需要先从数据库中检索出该用户并更新其字段,然后再调用save()方法。类似这样的操作:
User user = new Select().from(User.class).where("userId = ?", userIdYouWantToRetrieve).executeSingle();

if (user != null){
   user.setVerified(true);
} else {
   user = new User(){//populate your new user here from json }
}

user.save();

这将保留用户之前在数据库中存储的值,您只需要更新您想要的新值。


非常重要的提示:请记住,ActiveAndroid 中有缓存(除非您更改代码以禁用缓存或清除缓存),因此如果在代码的某个部分中检索用户并更改其字段而没有意图保存数据,并且在另一个代码部分中再次检索用户,则会获取具有您所做更改的缓存用户。此时保存用户将保存所有先前的更改和您所做的新更改。 - MikeL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,