我正在工作的Android房间持久库。我还在我的项目中实现了双向数据绑定。在项目中,我插入用户的方法是填写一个表单,将所有用户显示在行中,然后单击“特定用户行”更新用户。下面是我的UserDao类:
@Dao
public interface UserDao {
@Query("SELECT * FROM user")
List<User> getAllUsers();
@Insert
void insertAll(User... users);
@Update
void updateUser(User... users);
@Query("SELECT * FROM user WHERE user_id IN (:userId)")
User getSpecifiedUser(int...userId);
}
对于数据绑定,我绑定UserFormActivity中的用户模型
private void getUserFormData(final int userId) {
try {
Thread t = new Thread(new Runnable() {
public void run() {
userModel = db.userDao().getSpecifiedUser(userId);
}
}, "Thread A");
t.start();
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
在userModel中获取user数据进行更新后,我希望user数据在执行数据绑定的user表单中反映出来,但它没有反映出来。我被这个问题缠住了。
我在我的项目中实现了LiveData和ViewModel,并在我的UserListActivity中扩展了LifecycleActivity。下面是我的AddUserViewModel类:
public class AddUserViewModel extends AndroidViewModel {
private UserDatabase userDatabase;
public AddUserViewModel(Application application) {
super(application);
userDatabase = UserDatabase.getDatabase(this.getApplication());
}
public void addUser(User user) {
new AddUserAsyncTask(userDatabase).execute(user);
}
private static class AddUserAsyncTask extends AsyncTask<User, Void,
Void> {
private UserDatabase db;
public AddUserAsyncTask(UserDatabase userDatabase) {
db = userDatabase;
}
@Override
protected Void doInBackground(User... params) {
db.userDao().insertUser(params);
return null;
}
}
public User getSpecificUserData(int userId) {
User user = null;
try {
user = new
getUserDataAsyncTask(userDatabase).execute(userId).get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
return user;
}
private static class getUserDataAsyncTask extends AsyncTask<Integer,
Void, User> {
private UserDatabase db;
public getUserDataAsyncTask(UserDatabase userDatabase) {
db = userDatabase;
}
@Override
protected User doInBackground(Integer... userId) {
User user = db.userDao().getSpecifiedUser(userId);
return user;
}
@Override
protected void onPostExecute(User user) {
super.onPostExecute(user);
}
}
}
在AddUserActivity中,我从数据库方法获取特定的用户数据
userModel=AddUserViewModel.GetSpecificUserData(userId);
userViewModel = ViewModelProviders.of(this).get(UserViewModel.class);
userViewModel.getUserList().observe(UserListActivity.this, new
Observer<List<User>>() {
@Override
public void onChanged(@Nullable List<User> user) {
adapter.addItems(user);
}
});
这对我来说很好,我得到了我的解决方案!
我有以下问题:我正在使用Koin进行DI和持久化的空间。现在我的房间依赖关系如下: 但是我得到了这里描述的错误:Android room Persistent:AppDatabase_Impl不存在 Koin模块定义: 怎么会这样呢?
数据落盘问题的由来 这本质上是数据持久化问题,对于有些应用依赖持久化数据,比如应用自身产生的日志需要持久化存储的情况,需要保证容器里的数据不丢失,在Pod挂掉后,其他应用依然可以访问到这些数据,因此我们需要将数据持久化存储起来。 数据落盘问题解决方案 下面以一个应用的日志收集为例,该日志需要持久化收集到ElasticSearch集群中,如果不考虑数据丢失的情形,可以直接使用前面提到的应用日志收集一
我想使用预先填充的数据库的房间,但我不明白如何告诉房间在哪里找到我的数据库。 现在我将它放在中,当我为房间数据库创建实例时,我是这样创建的: 这样一来,我认为它每次都在创建一个新的数据库,或者说,它没有使用预填充的数据库。 我怎样才能找到我的数据库?
我们正在尝试为我们的新项目设置一个新的JTA事务配置。该项目利用Spring JPA和Spring Data与atomikos JTA事务管理器。 正如在atomikos教程中看到的那样,我们配置了XML。 目前,我们设法启动我们的服务器没有错误。 问题是,当我们尝试在@Transactional服务中使用jpaRepository持久化实体时,我们的日志显示atomikos jta事务正在发生并
pinia的数据持久化,我用了个插件pinia-plugin-persist,用了该插件后数据是持久化了,但是取的值变成了字符串,需要序列化转换一下,例如:存入对象取出时时字符串,需要再次转换为对象才能使用,有没有什么好的方法,不用每次取值都转换一下?
下面是Kotlin中的类: 但当我试图运行应用程序时,它立即崩溃。以下是崩溃日志: 类似乎不是自动生成的。我检查了从codelab下载的原始java应用程序,发现是自动生成的。