mein Projekt zu modifizieren, sind folgende Aktionen:Android: Kann nicht UI aktualisieren, nachdem Datenbank
1) Eine EditText
Ansicht (inputText
), in dem der Benutzer soll einen Namen
2) Ein Button
geben, dass Wenn Sie diese Taste drücken, wird ein Person-Objekt mit dem Namen inputText
erstellt und dieses Objekt in der Realm-Datenbank gespeichert. Dann aktualisiert es die textLog
, um den neuen Personennamen aufzunehmen.
3) Ein 'TextView' (textLog
), der eine Liste aller Namen der Person-Objekte in der Realm-Datenbank anzeigt.
Mein Problem ist, dass das Klicken auf die Schaltfläche das Textprotokoll aktualisiert, bevor es das Objekt Person in der Datenbank speichert. Dies bedeutet, dass der Name der neuen Person erst angezeigt wird, wenn ich erneut auf die Schaltfläche klicke, um ein neueres Person-Objekt zu erstellen. Ich möchte die Benutzeroberfläche aktualisieren nach das Objekt in der Datenbank gespeichert wird, so dass es immer auf dem neuesten Stand ist. Der folgende Code stammt aus meiner Klasse MainActivity
. Früher hatte ich Handler handler = new Handler(Looper.getMainLooper());
getan.
// 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")));
}
Ja, das würde seinen Race Condition beheben, das ist spezifischer als meine Antwort. – EJoshuaS
Danke! Das funktioniert! – novice