java 存储库模式的Android LocalDataSource示例。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 存储库模式的Android LocalDataSource示例。相关的知识,希望对你有一定的参考价值。

package com.dev.data.source.local;

import com.dev.data.models.User;
import com.dev.data.source.UserDataSource;

import io.realm.Realm;
import io.realm.RealmConfiguration;

/**
 * Concrete implementation of a User's data source as a Realm db.
 */
public class UserLocalDataSource implements UserDataSource {

    private User userObj;
    private Realm realm;

    private final int ID_USER = 0;

    /**realm initialization
     */
    private void startRealm(){
        final RealmConfiguration config = new RealmConfiguration
                .Builder()
                .deleteRealmIfMigrationNeeded()
                .build();
        realm = Realm.getInstance(config);
        userObj = new User();
    }

    /**@param callback - GetuserCallback object
     * @return userObj;
     */
// get user as object if database is not empty
    @Override
    public void getUser(GetUserCallback callback) {
        if (callback != null)
            startRealm();
            userObj = realm.where(User.class)
                    .equalTo("id", ID_USER).findFirst();
        if (userObj == null) {
            realm.commitTransaction();
            callback.onDataNotAvailable(new Error("Data is null"));
        } else {
            realm.commitTransaction();
            callback.onUserLoaded(userObj);
        }
    }

    /** user local saving
     * @param user - object of User.class
     */
    @Override
    public void saveUser(User user) {

        startRealm();
        realm.beginTransaction();
        userObj.setId(ID_USER);
        realm.copyToRealm(user);
        realm.commitTransaction();
    }

    /**
     * user updating in local db
     * @param user - object of User.class
     */
    @Override
    public void updateUser(User user, GetUserCallback callback) {
        startRealm();
        realm.beginTransaction();
        userObj = realm.where(User.class)
                .equalTo("id", ID_USER).findFirst();
        realm.copyToRealmOrUpdate(user);
        realm.commitTransaction();

    }
    
    /** get user ID from local db
     * @return id;
     */
    @Override
    public long getId() {
        final long id;
        startRealm();
        realm.beginTransaction();
        userObj = realm.where(User.class)
                .equalTo("id", ID_USER).findFirst();
        id = userObj.getId();
        realm.commitTransaction();

        return id;
    }
    
    /**
     * get user gender
     * @return gender
     */
    @Override
    public String getGender() {
        final String gender;
        startRealm();
        realm.beginTransaction();
        userObj = realm.where(User.class)
                .equalTo("id", ID_USER).findFirst();
        gender = userObj.getGender();
        realm.commitTransaction();

        return gender;
    }

    /**
     * set user gender
     * @param gender - user`s gender
     */
    @Override
    public void setGender(String gender) {
        startRealm();
        realm.beginTransaction();
        userObj = realm.where(User.class)
                .equalTo("id", ID_USER).findFirst();
        userObj.setGender(gender);
        realm.commitTransaction();
    }
}

以上是关于java 存储库模式的Android LocalDataSource示例。的主要内容,如果未能解决你的问题,请参考以下文章

java 存储库模式的Android Repository类示例。

markdown Android中MVP中的存储库模式

使用 maven 存储库将 java 库添加到 Android Studio 项目

java 存储库patern的Android DataSource类示例。

java 存储库模式

GlusterFS-分布式存储集群部署