java - 这是回调的正确用法吗?

标签 java gwt

我有一个 addProductButton,单击它会弹出一个 DialogBox,其中包含 bookNameTextBoxbookCategoryTextBoxaddBookButton。单击addBookButton,它将bookNameTextBoxbookCategoryTextBox内容插入数据库。如果成功,它应该隐藏 DialogBoxupdateList()

以下代码可以实现这一目标,但我不确定它是否正确,或者是否有更好的方法来实现相同的结果。

addProductButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
    //display addBookDialogBox
    AddBookDialog abd = new AddBookDialog();
    abd.displayDialog(new Callback() {
        @Override
        public void onSuccess() {
            updateList();
        }
        public void onFailure() {               
        }
    });
}
});

public void updateList() {
}

AddBookDialog

public class AddBookDialog extends DialogBox {

private Callback callback;

private static AddBookDialogUiBinder uiBinder = GWT
.create(AddBookDialogUiBinder.class);

interface AddBookDialogUiBinder extends UiBinder<Widget, AddBookDialog> {
}

public AddBookDialog() {
    setWidget(uiBinder.createAndBindUi(this));
}

public void displayDialog(Callback callback2) {
    callback = callback2;
    this.center();
}

@UiHandler("addBookButton")
void onAddBookButtonClick(ClickEvent event) {
    //save book to database
    Database db = Database.openDatabase("Store", "1.0", "My Store", 5 * 1024 * 1024);
    db.transaction(new TransactionCallback() { 
        public void onTransactionStart(SQLTransaction tx) {
            tx.executeSql("INSERT INTO products (bookName, bookCategory) VALUES (?, ?)", new Object[] { bookNameTextBox.getText().toString(), bookCategoryTextBox.getText().toString() }); 
        }
         public void onTransactionFailure(SQLError error) {
         }
         public void onTransactionSuccess() {
             callback.onSuccess();
         } 
    });
    this.hide();


  }
}

回调接口(interface)

public interface Callback {
  void onSuccess();

  void onFailure();
}

最佳答案

我在这里没有看到它的用途,为什么不将 updateList(); 放在 onTransactionStart() 方法中?

CallBacks 用于异步,这里的 TransactionCallback 已经做到了这一点,所以我不明白为什么你会在内部使用另一个回调。

顺便说一句,如果您确实需要回调,为什么不使用 AsyncCallback由gwt提供?

编辑: 那么适当的方法是使用 updateList() 方法创建一个接口(interface)。让你的主类实现它,并将 displayDialog() 方法的参数类型更改为你的接口(interface)类型而不是 CallBack 类型。

关于java - 这是回调的正确用法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8282656/

相关文章:

java - Apache Commons Exec - 有时线程无法在 Linux 中打开本地文件

java - 如何解决不兼容类型错误?

java - GWT 中的验证

java - 如何设置 GitHub Docker CI 为所有子模块运行

java - "Alignment.BASELINE"在 Java GroupLayout 中到底意味着什么?

java - 安卓。如何知道允许的 block 大小(蓝牙)?

java - 如何测试GWT的RPC调用?

java - 如何在 Google map 上触发 map 事件 < v3

database - 如何在每次点击时重新填充 GXT ComboBox?

java - 获取通用接口(interface) : The interface Observer cannot be implemented more than once with different arguments: 的错误