定义一个数据输入检查方法并调用它没有用,android

时间:2017-03-20 11:37:02

标签: java android methods

在应用程序对该数据进行一些数学运算之前,我在用户必须完成的应用程序中有更多字段。由于跳过一个字段然后应用程序崩溃的可能性,我插入了一些故障安全触发器。 例如:

EditText vZeitE = (EditText) findViewById(vZeit);
    if (vZeitE.getText().toString().length() == 0) {
        vZeitE.requestFocus();
        InputMethodManager imm = (InputMethodManager)     getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(vZeitE, InputMethodManager.SHOW_IMPLICIT);
        vZeitE.setError(getString(R.string.ErrStringVZeitMissing));
    } else {

首先获取字段内容,检查其长度,如果是0,则进行下一次字段检查,如果长度为0,则表示没有输入数据,用户将收到错误消息,光标将变为空场,迫使他输入价值。

现在,一遍又一遍地这样做(因为它几乎在所有的方法中使用)开始让我失望。我说我可以尝试为每个字段检查定义一个方法,并在需要时用另一种方法调用它。 所以我这样做了:

我在这里定义方法:

public void checkBeginnTime() {
    EditText EtimpAnfang = (EditText) findViewById(timpAnfang);
    if (EtimpAnfang.getText().toString().length() == 0) {
        EtimpAnfang.requestFocus();
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(EtimpAnfang, InputMethodManager.SHOW_IMPLICIT);
        EtimpAnfang.setError(getString(R.string.ErrStringAnfangZeitMissing));
    }
}

这里我用新方法替换旧代码:

findViewById(R.id.buttoSaveCalcOR)
            .setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

                    builder.setTitle(getString(R.string.sOptionSave) + " (" + getString(R.string.sButOhneRust) + ") ");
                    builder.setMessage(getString(R.string.sConfirmOption));

                    builder.setPositiveButton(getString(R.string.sJa), new DialogInterface.OnClickListener() {

                        public void onClick(DialogInterface dialog, int which) {

                            EditText edTimpAnfang = (EditText) findViewById(timpAnfang);
                            checkBeginnTime();
                            //  if (edTimpAnfang.getText().toString().length() == 0) {
                            //      edTimpAnfang.requestFocus();
                            //      InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                            //      imm.showSoftInput(edTimpAnfang, InputMethodManager.SHOW_IMPLICIT);
                            //      edTimpAnfang.setError(getString(R.string.noinput));
                            //  } else {
                           EditText EaufGesSt = (EditText) findViewById(aufGesSt);
                            checkTotalOrder();
                           EditText vZeitE = (EditText) findViewById(vZeit);
                            checkDefaultTime();

问题在于它向我显示数据丢失,但不会停止让我修复丢失的数据,只是更进一步,执行方法中的其他剩余行,而不管字段的长度是0。

在这种情况下,我用它来存储优先级中每个字段的值,以后能够加载这些值。在我无法保存此值之前,除非evety字段的长度> 0,现在,即使长度为0,也存储了一些内容,如果我加载数据并尝试进行数学计算,显然它会使应用程序崩溃。

你能解释一下我做错了什么吗?为什么在一种情况下它起作用而在另一种情况下只是进入下一行......忽略了字段长度不应该为0的事实......?!

谢谢!

1 个答案:

答案 0 :(得分:1)

你需要让checkBeginnTime()返回一个布尔值,如果field为OK则返回true,否则返回false,

并根据checkBeginnTime()结果,继续或停止该过程:

public boolean checkBeginnTime() {
    EditText EtimpAnfang = (EditText) findViewById(timpAnfang);
    if (EtimpAnfang.getText().toString().length() == 0) {
        EtimpAnfang.requestFocus();
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(EtimpAnfang, InputMethodManager.SHOW_IMPLICIT);
        EtimpAnfang.setError(getString(R.string.ErrStringAnfangZeitMissing));
        return false;
    }
    return true;
}

和使用部分(buttoSaveCalcOR onClick):

//:
//:
EditText edTimpAnfang = (EditText) findViewById(timpAnfang);
if(!checkBeginnTime()){
    return;
}
//:
//:

注意:还有其他方法,灵活,验证视图中的所有EditTexts(在屏幕中)我可以根据需要向您展示示例,但它可能看起来有点复杂,除非你可以学习很少的新东西。

我这样说是因为你所做的不是你真正需要的,因为你仍然需要为每个视图制作一个方法?!并调用它,所以至少你可以将View(EditText)传递给方法这样你可以多次调用同一个方法。