安卓:修改数据库
问题描述:
我的项目后,无法更新UI涉及以下内容:安卓:修改数据库
1)EditText
视图(inputText
),其中假设用户键入一个名称
2)Button
那按下后,将创建一个名称为inputText
的Person对象,并将该对象保存到领域数据库。然后它刷新textLog
以包含新人的姓名。
3)A“的TextView”(textLog
),显示的境界数据库中的Person对象的所有名称的列表。
我的问题是,点击该按钮刷新文本日志节省人物对象到数据库之前。这意味着只有再次单击按钮才能创建新的Person对象,新人员的姓名才会显示出来。我想让用户界面在之后刷新,将对象保存到数据库,因此它始终处于最新状态。以下代码来自我的MainActivity
类。此前我做过Handler handler = new Handler(Looper.getMainLooper());
。
// called when button is clicked
private void submit(View view)
{
final String input = inputText.getText()
.toString()
.trim();
// asynchronous transaction
realm.executeTransactionAsync(realm -> {
realm.copyToRealm(new Person(input));
handler.post(this::refresh);
});
}
private void refresh()
{
textLog.setText(realm.where(Person.class)
.findAll()
.stream()
.map(Person::getName)
.collect(Collectors.joining("\n")));
}
答
添加Realm.Transaction.OnSuccess()
和Realm.Transaction.OnError()
回调到您的异步交易。当这些方法被调用时,您知道交易已完成,您可以刷新您的UI。
答
看起来好像你有一个race condition。你做realm.executeTransactionAsync,然后立即做handler.post(this :: refresh); - 不保证他们会按照您希望的顺序执行。
是的,那会解决他的比赛状态,这比我的回答更具体。 – EJoshuaS
谢谢!这工作! – novice