kvs-schema

by rejasupotaro

rejasupotaro / kvs-schema

Code generation library to manage key-value data for Android

124 Stars 12 Forks Last release: Not found MIT License 171 Commits 11 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

KVS Schema

KVS Schema is a library to manage key-value data for Android. This library generates accessor methods of SharedPreferences from schema class in compile time.

How to use

Create Schema

Let's say you will store user id, You have to create a schema class like below.

@Table(name = "example")
public class ExamplePrefsSchema {
    @Key(name = "user_id") int userId;
}

Class name should be

*Schema
.

KVS Schema generates

ExamplePrefs
from
ExamplePrefsSchema
. You can use generated accessors below.
ExamplePrefs prefs = ExamplePrefs.get(context);
prefs.putUserId(userId);
prefs.putUserId(userId, defaultValue);
prefs.getUserId();
prefs.hasUserId();
prefs.removeUserId();

KVS supports

boolean
String
float
int
long
String
set
.

Default Values

You can specify default values for the case of that a given key doesn't be contained in a SharedPreferences.

prefs.getUserId(defaultValue);

You can also specify default values through a schema class. KVS Schema can read right values that become a constant in compile time.

@Table(name = "example")
public abstract class ExamplePrefsSchema {
    @Key(name = "user_id") final int userId = -1;
}

Using the mechanism, you don't have to specify default values when you set right values that is a final field initialized to a compile time constant.

Serializer

Sometimes you want to put model classes into SharedPreferences. For that cases, KVS Schema can store data using serializer class.

// Schema class
@Table(name = "example")
public abstract class ExamplePrefsSchema {
    @Key(name = "user", serializer = UserPrefsSerializer.class) String user;
}

// Serializer class public class UserSerializer implements PrefsSerializer { @Override public String serialize(User src) { return GSON.toJson(src); } @Override public User deserialize(String src) { return GSON.fromJson(src, User.class); } }

// Usage prefs.putUser(user);

Builder

You can specify builder class to use custom SharedPreferences.

// Schema class
@Table(name = "example", builder = ExamplePrefsBuilder.class)
public abstract class ExamplePrefsSchema {
    @Key(name = "user_id") int userId;
}

// Builder class public class ExamplePrefsBuilder implements PrefsBuilder { @Override public ExamplePrefs build(Context context) { ... return new ExamplePrefs(...); // You can pass your SharedPreferences here } }

Using from Kotlin

KVS Schema generates

set*
method as an alias of
put*
to utilize property syntax of Kotlin. So you can read/write values like below when you use Kotlin.
prefs.userId = "Kotlin"
prefs.userId // => Kotlin

Installation

Add dependencies to your build.gradle.

annotationProcessor 'com.rejasupotaro:kvs-schema-compiler:5.1.0'
compile 'com.rejasupotaro:kvs-schema:5.1.0'

Migration

Even if you have already used SharedPreferences directly in your existing app, migration is easy. KVS Schema simply maps the structure of SharedPreferences.

For example, if you are using default SharedPreferences like below,

prefs = PreferenceManager.getDefaultSharedPreferences(this);
Editor editor = prefs.edit();
editor.putString("user_id", "1");
editor.putString("user_name", "Smith");
editor.apply();

your data is saved on

path/to/app/shared_prefs/package_name_preferences.xml
. The schema class becomes like below.
@Table(name = "package_name_preferences")
public abstract class ExamplePrefsSchema {
    @Key(name = "user_id") int userId;
    @Key(name = "user_name") String userName;
}

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.