SharedPrefsUtils

Additional

Language
Java
Version
v1.0.4 (Nov 2, 2018)
Created
Aug 24, 2017
Updated
Sep 17, 2020 (Retired)
Owner
Guilherme Delgado (GuilhE)
Contributors
Guilherme Delgado (GuilhE)
GuilhE@Bliss (gdelgadobliss)
2
Activity
Badge
Generate
Download
Source code

SharedPrefsUtils (Kotlin version here!)

Save and load objects from SharedPreferences in a faster and simpler way.

Version 1.x

- November, 2018    - "Rebranding", changed lib name.
- November, 2017    - Gradle update, added Codacy.
- August, 2017      - SharedPrefsUtils.

NOTE: this repo will not be updated you should switch to kotlin version

Getting started

The first step is to include SharedPrefsUtils into your project, for example, as a Gradle compile dependency:

implementation 'com.github.guilhe:SharedPrefsUtils:${LATEST_VERSION}'

Sample usage

SharedPrefsUtils

public static boolean putObject(SharedPreferences prefs, String key, Object object) {}
public static <T> T getObject(SharedPreferences prefs, String key, TypeToken<T> type, T defaultValue) {}
public static <T> T getObject(SharedPreferences prefs, String key, Class<T> object, T defaultValue) {}

To save and load primitive types:

SharedPrefsUtils.putObject(prefs, "key", 1);
int a = SharedPrefsUtils.getObject(prefs, "key", int.class, 1);

To save and load object types:

List<T> list = new ArrayList<>();
SharedPrefsUtils.putObject(prefs, "key", list);
list = SharedPrefsUtils.getObject(prefs, "key", new TypeToken<List<T>>(){}, new ArrayList<T>()));

When not using primitive types you should use TypeToken instead of T.class, for example:

    @Test
    public void testOne() throws Exception {
        List<Integer> list = new ArrayList<>();
        list.add(1);
        SharedPrefsUtils.putObject(prefs, "key", list);
        
        assertEquals(list, SharedPrefsUtils.getObject(prefs, "key", new TypeToken<List<Integer>>(){}, new ArrayList<Integer>()));
        assertNotEquals(list, SharedPrefsUtils.getObject(prefs, "key", List.class, new ArrayList<Integer>()));
    }
    
    @Test
    public void testTwo() throws Exception {
        List<MyObjectType> list = new ArrayList<>();
        list.add(new MyObjectType("string", 1, true));
        SharedPrefsUtils.putObject(prefs, "key", list);
        
        assertEquals(list, SharedPrefsUtils.getObject(prefs, "key", new TypeToken<List<MyObjectType>>() {}, new ArrayList<MyObjectType>()));
        assertNotEquals(list, SharedPrefsUtils.getObject(prefs, "key", List.class, new ArrayList<MyObjectType>()));
    }
    
    private static class MyObjectType implements Parcelable {
            private String mFieldString;
            private int mFieldInt;
            private boolean mFieldBoolean;
            ...
    }

Both tests will ran to completion.

Regarding assertNotEquals(list, SharedPrefsUtils.getObject(prefs, "key", List.class, new ArrayList<Integer>())); being true, I guess it's related with the fact that public <T> T fromJson(JsonReader reader, Type typeOfT){} method from Gson.java (line 886) is type unsafe: "Since Type is not parameterized by T, this method is type unsafe and should be used carefully". That's why I believe I'm getting List<Double> instead of List<Integer>.

Also:

SharedPrefsUtils.putObject(prefs, "key", 1);
SharedPrefsUtils.getObject(prefs, "key", boolean.class, false);

Will throw JsonParseException.

Binaries

Additional binaries and dependency information for can be found at https://search.maven.org.

Dependencies

Bugs and Feedback

For bugs, questions and discussions please use the Github Issues.

LICENSE

Copyright (c) 2017-present, SharedPrefsUtils Contributors.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.