ObjectSharePreference-少量數(shù)據(jù)ORM解決方案

  • 當(dāng)下懶人開(kāi)發(fā)越來(lái)越流行,本地的數(shù)據(jù)保存是每個(gè)項(xiàng)目必然會(huì)遇到的,之前我項(xiàng)目中也有使用GreenDao來(lái)進(jìn)行對(duì)象化的數(shù)據(jù)處理,真真的是大大增加了開(kāi)發(fā)效率,而且框架內(nèi)的數(shù)據(jù)轉(zhuǎn)化方面也基本沒(méi)有出過(guò)八阿哥.可是很多人對(duì)別人的框架使用還是很抗拒的,那么下面的一點(diǎn)代碼就能夠很好的幫助你簡(jiǎn)單的實(shí)現(xiàn)數(shù)據(jù)操作。

Talk is cheap , Show me the code.

/**
 * @author zhejun.zhu
 * @Description:面向?qū)ο蟮腟haredPreference存儲(chǔ)輔助類(lèi)
 * @date 2014年11月7日
 * <p>
 * 適合應(yīng)用內(nèi)信息的存儲(chǔ),當(dāng)數(shù)據(jù)量很大的時(shí)候效率會(huì)很低
 */
public class ObjectSharedPreference {
    private static final String DEFAULT_SHARE_NAME = "default_share_object";
    private static final String DEFAULT_SHARE_NAME_LIST_APPEND = "_list";
    SharedPreferences mPreferences;

    public ObjectSharedPreference(Context context) {
        mPreferences = context.getSharedPreferences(DEFAULT_SHARE_NAME, Context.MODE_PRIVATE);
    }

    public ObjectSharedPreference(Context context, String sharedpreferencesName) {
        mPreferences = context.getSharedPreferences(sharedpreferencesName, Context.MODE_PRIVATE);
    }

    public void save(Object object) {
        save(object.getClass().getName(), object);
    }

    public void save(String key, Object object) {
        Gson gson = new Gson();
        Editor editor = mPreferences.edit();
        editor.putString(key, gson.toJson(object));
        editor.commit();
    }

    public <T> T get(Class<T> tClass) {
        return get(tClass.getName(), tClass);
    }

    public <T> T get(String key, Class<T> tClass) {
        try {
            String value = mPreferences.getString(key, "");
            if (TextUtils.isEmpty(value)) {
                return null;
            }
            Gson gson = new Gson();
            T t = gson.fromJson(value, tClass);
            return t;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    public <T> void saveList(List<T> list) {
        if (list == null || list.size() == 0)
            return;

        saveList(list.get(0).getClass().getName() + DEFAULT_SHARE_NAME_LIST_APPEND, list);
    }

    public <T> void saveList(String key, List<T> list) {
        if (list == null || list.size() == 0)
            return;

        Gson gson = new Gson();

        List<String> strlist = new ArrayList<>();
        for (int i = 0; i < list.size(); i++) {
            strlist.add(gson.toJson(list.get(i)));
        }

        Editor editor = mPreferences.edit();
        editor.putString(key, gson.toJson(strlist));
        editor.commit();
    }

    public <T> List<T> getList(Class<T> tClass) {
        return getList(tClass.getName() + DEFAULT_SHARE_NAME_LIST_APPEND, tClass);
    }

    public <T> List<T> getList(String key, Class<T> T) {
        try {
            String value = mPreferences.getString(key, "");
            if (TextUtils.isEmpty(value)) {
                return null;
            }
            Gson gson = new Gson();

            Type type = new TypeToken<ArrayList<String>>() {
            }.getType();
            List<String> strList = gson.fromJson(value, type);
            if (strList == null)
                return null;

            List<T> list = new ArrayList<T>();
            for (int i = 0; i < strList.size(); i++) {
                list.add(gson.fromJson(strList.get(i), T));
            }
            return list;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

看了代碼會(huì)發(fā)現(xiàn),其實(shí)實(shí)現(xiàn)很簡(jiǎn)單,ORM相關(guān)的數(shù)據(jù)轉(zhuǎn)化我通過(guò)Gson來(lái)實(shí)現(xiàn)了,數(shù)據(jù)保存在SharePreference里面,所以決定了本面向?qū)ο蟠鎯?chǔ)的特點(diǎn):

  1. 對(duì)數(shù)據(jù)兼容性非常好,修改對(duì)象的變量能夠完全不需要像數(shù)據(jù)庫(kù)一樣去修改格式
  2. 數(shù)據(jù)量不大的時(shí)候,性能也是杠杠的,數(shù)據(jù)量越大性能越低(當(dāng)然你可以分開(kāi)Share文件來(lái)存儲(chǔ))
  3. 線程間安全,但是進(jìn)程間是不安全的(不然要ContentProvider干什么 ╮(╯_╰)╭ ,當(dāng)然API的注釋中說(shuō)會(huì)在高版本的SDK中修復(fù)這個(gè)問(wèn)題)。
  • So 來(lái)看看使用起來(lái)有多簡(jiǎn)單吧
    public NewsBean loadNewsLocal() {
        ObjectSharedPreference osp = new ObjectSharedPreference(mContext);
        NewsBean newsBean = osp.get(NewsBean.class);
        return newsBean;
    }

    public void saveNewsLocal(NewsBean newsBean) {
        ObjectSharedPreference osp = new ObjectSharedPreference(mContext);
        osp.save(newsBean);
    }

就是這么“懶”~
當(dāng)然如果你工程里面沒(méi)有Gson的庫(kù)的話,你需要導(dǎo)入gson.jar
如果你用的Gradle的話

dependencies {
    compile 'com.google.code.gson:gson:2.6.2'
或
    compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容