我希望我的数据模型和我的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方式来轻松定义数据模型,但是当涉及到持久性时,我需要几十个辅助类。这不是具体问题,但我希望你有个主意。
答案 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(强烈建议使用),则数据对象更加简洁。