1

我一直在尝试通过创建输入验证方法然后调用它来优化我的android代码,但它不起作用。我试过调试但没有。这是我第一次拥有它并且它正在工作:

String s1 =startTime1.getText().toString();
if(TextUtils.isEmpty(startTime1.getText())){
    s1 = "00:00";
}
String e1 = endTime1.getText().toString();
if(TextUtils.isEmpty(endTime1.getText())){
    e1 = "00:00";
}

但是在将验证提取到此方法中并在每次用户输入输入时调用它之后似乎没有任何效果。

public void emptyInputValidation(EditText time, String timeToString){
    if(TextUtils.isEmpty(time.getText())){
        timeToString = "00:00";
    }           
}


compute.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v){

                try{
                    String s1 =startTime1.getText().toString();
                    emptyInputValidation(startTime1, s1);
                    String e1 = endTime1.getText().toString();
                    emptyInputValidation(endTime1, e1);
                    }
            catch (ParseException e){
                    e.printStackTrace();

                }     
}

提前致谢。

4

2 回答 2

0

timeToString = "00:00";您的函数中,您将参数重新分配给"00:00",这不会反映在方法之外。这是更正后的代码:

public String emptyInputValidation(EditText time) {
    if(TextUtils.isEmpty(time.getText())){
        return "00:00";
    } else {
        return time.getText().toString();
    }           
}

然后只需调用String s1 = emptyInputValidation(startTime1);

于 2013-01-11T03:33:18.027 回答
0

这是 Java 中对象引用和参数传递如何工作的令人讨厌的部分之一。timeToString = "00:00";我们方法中的设置emptyInputValidation不会反映在该方法之外。Java 按值传递引用,这有点令人困惑。这意味着您在字符串上调用以更改它的任何方法都将反映在方法范围之外,但是赋值不会。

解决这个问题的最简单方法是让它返回String

public String emptyInputValidation(EditText time)
{
    if(TextUtils.isEmpty(time.getText()) {
        return "00:00";
    }
    return time.getText();
}
于 2013-01-11T03:33:49.743 回答