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

时间:2011-10-06 06:54:31

标签: java android data-modeling

我希望我的数据模型和我的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方式来轻松定义数据模型,但是当涉及到持久性时,我需要几十个辅助类。这不是具体问题,但我希望你有个主意。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

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

答案 2 :(得分: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.
}

UserDao.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);
}

AppDatabase.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(强烈建议使用),则数据对象更加简洁。