Android - 存储持久数据是否有超级舒适的方式?

问题描述 投票:2回答:3

我希望我的数据模型和我的Getters and Setters设置为一个简单的Java类,让Eclipse创建所有的getter和setter,如果我调用它们,我希望Data能够持久存储。 SQLiteDatabase类有一种方法,但它仍然不如使用简单的Java类那样舒服。是否有框架。(而且,不仅仅是对于android。(我从Web框架Grails获得了想法)

//Define DataModel
class StackOverflowUser {
     private String name;
     private int points;
}

//getters, setters...

//store Data persistently in a Database:
dan.setPoints(dan.getPoints()+5);

我不明白为什么这个OO语言有这种非常舒适的对象和getter和setter方式来轻松定义数据模型,但是当涉及到持久性时,我需要几十个辅助类。这不是具体问题,但我希望你有个主意。

java android data-modeling
3个回答
2
投票

使用“共享首选项”存储数据。请阅读本教程---> http://androidandandroid.wordpress.com/2010/07/25/android-tutorial-16/


2
投票

共享首选项可能是少量数据的选项,但数据类型有限。我开始使用opensource项目来消除样板代码(https://github.com/ko5tik/andject

另一种解决方案是以JSON格式存储数据并使用一些数据绑定工具(如:https://github.com/ko5tik/jsonserializer) - 也可以存储JSON数据


1
投票

Android Jetpack推出了Room,这是一种使用POJO在Sqlite中存储数据的优雅方式。例:

user.Java

@Entity
public class User {
    @PrimaryKey
    private int uid;

    @ColumnInfo(name = "first_name")
    private String firstName;

    @ColumnInfo(name = "last_name")
    private String lastName;

    // Getters and setters are ignored for brevity,
    // but they're required for Room to work.
}

user DAO.Java

@Dao
public interface UserDao {
    @Query("SELECT * FROM user")
    List<User> getAll();

    @Query("SELECT * FROM user WHERE uid IN (:userIds)")
    List<User> loadAllByIds(int[] userIds);

    @Query("SELECT * FROM user WHERE first_name LIKE :first AND "
           + "last_name LIKE :last LIMIT 1")
    User findByName(String first, String last);

    @Insert
    void insertAll(User... users);

    @Delete
    void delete(User user);
}

app database.Java

@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
    public abstract UserDao userDao();
}

创建上述文件后,您将使用以下代码获取已创建数据库的实例:

AppDatabase db = Room.databaseBuilder(getApplicationContext(),
        AppDatabase.class, "database-name").build();
UserDao dao = db.userDao

玩耍的时间到啦!

List<User> users = dao.getAll();
dao.insertAll(users);
// ...

如果您使用Kotlin(强烈推荐),它对数据对象仍然更简洁。

© www.soinside.com 2019 - 2024. All rights reserved.