preferencebinder icon indicating copy to clipboard operation
preferencebinder copied to clipboard

Saving/Loading complex objects

Open denley opened this issue 9 years ago • 1 comments

It might be useful to support saving complex/structured objects that are composed of multiple preference keys.

@PrefType public class User {

    String username;
    String email;
    String phone;
    int age;
    @PrefKey("is_verified") boolean verified;

}

or

@PrefType public interface User {

    String getUsername();
    void setUsername(String username);

    String getEmail();
    void setEmail(String email);

    String getPhone();
    void setPhone(String phone);

    int getAge();
    void setAge(int age);

    @PrefKey("is_verified") 
    boolean getVerified();
    void setVerified(boolean verified);

}

Usage:

@BindPrefType(listen = false) User user;
@BindPrefType(init = false) void bindToUser(User user) { ... }
@BindPrefType({User.class, Settings.class}) void onUserOrSettingsChanged() { ... }
PreferenceBinder.save(context, user);
PreferenceBinder.save(context, "prefs_file", user);

denley avatar Jun 30 '15 03:06 denley

public class User$$PreferenceStructureBinder<T extends User> [extends xxx$$PreferenceStructureBinder<T extends User] {

    public void load(T target, SharedPreferences prefs) {
        [super.load(target, prefs)]

        target.username = prefs.getString("User_username", null);
        target.email= prefs.getString("User_email", null);
        target.phone = prefs.getString("User_phone", null);
        target.age = prefs.getInt("User_age", 0);
        target.verified = prefs.getBoolean("is_verified", false);
    }

    public void save(T target, SharedPreferences.Editor editor) {
        [super.save(target, editor)]

        editor
                .putString("User_username", target.username)
                .putString("User_email", target.email)
                .putString("User_phone", target.phone)
                .putInt("User_age", target.age)
                .putBoolean("is_verified", target.verified);
    }

}

denley avatar Jul 27 '15 20:07 denley