繁体   English   中英

无法对原始类型 int 或 double 调用 isEmpty()

[英]Cannot invoke isEmpty() on the primitive type int or double

我正在编写一个 JavaFX 应用程序,我将我的 JavaFX TableView 连接到我的 Sqlite 数据库,我在这里尝试做的是,如果文本字段为空,那么它会要求用户填写所有数据。 但是,因为在我的 Sqlite 数据库中我有两组整数数据集和一组双精度数据集,所以我无法为这三组数据调用 isEmpty 。 但是,我不能将它们转换为字符串,因为稍后我需要进行计算。 另一个方面是最后一点代码,当用户想要填写数据以添加一组新数据时,他可以清除他在那些文本字段中写的任何内容,但是,我不确定是什么整数和双精度代码,而不是“expeditionDate.setText(null);”。 先感谢您。

    String query = null;
    Connection connection = null;
    ResultSet resultSet = null;
    PreparedStatement preparedStatement;
    Expedition user = null;
    private boolean update;
    int studentId;

    /**
     * Initializes the controller class.
     */
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }

    @FXML
    private void save(MouseEvent event) {

        connection = DbConnect.connect();
        String Date = expeditionDate.getText();
        double Time = Double.valueOf(expeditionTime.getText());
        int Altitude = Integer.parseInt(expeditionAltitude.getText());
        int Distance = Integer.parseInt(expeditionDistance.getText());
        String Notes = expeditionNotes.getText();

        if (Date.isEmpty() || Time.isEmpty() || Altitude.isEmpty() || Distance.isEmpty()|| Notes.isEmpty()) {
            Alert alert = new Alert(Alert.AlertType.ERROR);
            alert.setHeaderText(null);
            alert.setContentText("Please Fill All DATA");
            alert.showAndWait();

        } else {
            getQuery();
            insert();
            clean();

        }

    }

    @FXML
    private void clean() {
        expeditionDate.setText(null);
        expeditionTime.setText(null);
        expeditionAltitude.setValue(null);
        expeditionDistance.setValue(null);
        expeditionNotes.setText(null);
        
    }

如果 getText() 为空但执行其他检查和更好的空处理,Double.valueOf 将抛出异常 -

改变

双倍时间 = Double.valueOf(expeditionTime.getText());

双倍时间 = Double.valueOf(expeditionTime.getText());

与 int 相同 - 将 int Altitude 更改为 Integer Altitude

恕我直言,如果您不确定它是否设置正确,则不应尝试将文字解析为数值。 您的问题是您无法检查该值是否为空,因为原始类型没有内置的isEmpty方法。

private boolean isEmpty(String value) {
    return value == null || value.trim().length() == 0;
}

我将使用上述方法检查expeditionTime.getText()是否为 null 或为空,如果是,则使用默认值即。 0.0或您想要的任何默认值。

在您尝试处理数据并保存或更改数据库之前,进行测试以确保所需数据就位:

@FXML
private void save(MouseEvent event) {
    if (aFormFieldIsEmpty()) {
       new Alert(Alert.AlertType.WARNING, "One or more fields on the form is empty!\n"
            + "Data must be provided in all fields (except Notes)!").showAndWait();
        return;       
    }

    connection = DbConnect.connect();
    String Date = expeditionDate.getText();
    double Time = Double.valueOf(expeditionTime.getText());
    int Altitude = Integer.parseInt(expeditionAltitude.getText());
    int Distance = Integer.parseInt(expeditionDistance.getText());
    String Notes = expeditionNotes.getText();
    
    getQuery();
    insert();
    clean();
}

@FXML
public boolean aFormFieldIsEmpty() {
    return expeditionDate.getText().isEmpty() || 
           expeditionTime.getText().isEmpty() || 
           expeditionAltitude.getText().isEmpty() || 
           expeditionDistance.getText().isEmpty();
}

@FXML
private void clean() {
    expeditionDate.clear();
    expeditionTime.clear();
    expeditionAltitude.clear();
    expeditionDistance.clear();
    expeditionNotes.clear();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM