rxjava

作者: insomniatt | 来源:发表于2017-07-03 11:15 被阅读34次

BasicRxJavaDemo
数据库设计:

字段名 说明
userid 用户 id(primarykey)
username 用户名字

1.Entity

@Entity(tableName = "users")
public class UserEntity {

    @PrimaryKey
    @ColumnInfo(name = "userid")
    private String mId;

    @ColumnInfo(name = "username")
    private String mUserName;

    @Ignore
    public UserEntity(String userName) {
        mId = UUID.randomUUID().toString();
        mUserName = userName;
    }

    public UserEntity(String id, String userName) {
        this.mId = id;
        this.mUserName = userName;
    }

    public String getId() {
        return mId;
    }

    public String getUserName() {
        return mUserName;
    }
}

2.dao

@Dao
public interface UserDao {

    /**
     * Get the user from the table. Since, for simplicity we only have one user in the database,
     * this query gets all users from the table, but limits the result to just the 1st user.
     *
     * @return the user from the table
     */
    @Query("SELECT * FROM Users LIMIT 1")
    Flowable<UserEntity> getUser();

    /**
     * Insert a user in the database. If the user already exists, replace it.
     *
     * @param user the user to be inserted.
     */
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insertUser(UserEntity user);

    /**
     * Delete all users.
     */
    @Query("DELETE FROM Users")
    void deleteAllUsers();
}

3.viewModel

public class UserViewModel extends ViewModel {

    private final UserDataSource mDataSource;

    private UserEntity mUser;

    public UserViewModel(UserDataSource dataSource) {
        mDataSource = dataSource;
    }

    /**
     * Get the user name of the user.
     *
     * @return a {@link Flowable} that will emit every time the user name has been updated.
     */
    public Flowable<String> getUserName() {
        return mDataSource.getUser()
                // for every emission of the user, get the user name
                .map(new Function<UserEntity, String>() {
                    @Override
                    public String apply(UserEntity user) throws Exception {
                        return user.getUserName();
                    }
                });

    }

    /**
     * Update the user name.
     *
     * @param userName the new user name
     * @return a {@link Completable} that completes when the user name is updated
     */
    public Completable updateUserName(final String userName) {

        return new CompletableFromAction(new Action() {
            @Override
            public void run() throws Exception {
                // if there's no use, create a new user.
                // if we already have a user, then, since the user object is immutable,
                // create a new user, with the id of the previous user and the updated user name.
                mUser = mUser == null
                        ? new UserEntity(userName)
                        : new UserEntity(mUser.getId(), userName);

                mDataSource.insertOrUpdateUser(mUser);
            }
        });
    }
}

相关文章

网友评论

      本文标题:rxjava

      本文链接:https://www.haomeiwen.com/subject/sqhicxtx.html