当EditText为空时单击按钮时应用程序崩溃

时间:2015-11-23 06:28:06

标签: java android

这里验证我的手机和密码数据,但是在EditText null时单击按钮我的应用程序崩溃!

这就是我的尝试:

String mobile = edtMobile.getText().toString();
            String password = edtPassword.getText().toString();
            String phone = String.valueOf(mobile);
            char c  = phone.charAt(0);

                if (mobile.length() > 0&& mobile.length() == 10) {
                    if (phone.length()> 0  && c == '8' || c == '9' || c == '7') {
                        if (password.length() > 0 && password.length() < 4 && password.length() > 15) {
                        } else {
                            Toast.makeText(AuthenticationActivity.this, "Password Character Must Be Between 4 - 15", Toast.LENGTH_SHORT).show();
                        }
                    } else {
                        Toast.makeText(AuthenticationActivity.this, "Number Must Begin with 9 8 7", Toast.LENGTH_SHORT).show();
                        return;
                    }
                } else {
                    Toast.makeText(AuthenticationActivity.this, "Enter Only 10 Digit Number", Toast.LENGTH_SHORT).show();
                    return;
                }

我在下面给出的错误

  

java.lang.StringIndexOutOfBoundsException:length = 0;索引= 0               at java.lang.String.indexAndLength(String.java:500)               at java.lang.String.charAt(String.java:494)               at com.example.rahul.logindatabasetask.Activity.AuthenticationActivity $ 1.onClick(AuthenticationActivity.java:42)               在android.view.View.performClick(View.java:4780)               在android.view.View $ PerformClick.run(View.java:19866)               在android.os.Handler.handleCallback(Handler.java:739)               在android.os.Handler.dispatchMessage(Handler.java:95)               在android.os.Looper.loop(Looper.java:135)               在android.app.ActivityThread.main(ActivityThread.java:5254)               at java.lang.reflect.Method.invoke(Native Method)               在java.lang.reflect.Method.invoke(Method.java:372)               在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:903)               在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

4 个答案:

答案 0 :(得分:3)

'IndexOutOfBounds'异常的原因

当您尝试获取边界中不存在的索引的值时,会出现此异常(在您的情况下,'phone'Btring的长度为null)。因此,当您尝试获取索引'0'处的值时,它会抛出异常。

<强>解决方案

在访问任何字符串值之前,始终先进行空检查和“空字符串”检查。只需执行以下操作:

if(phone!=null && !phone.isEmpty()) {
    char c  = phone.charAt(0);
}

答案 1 :(得分:2)

将此行char c = phone.charAt(0);放在if (mobile.length() > 0&& mobile.length() == 10)

之后

由于phone为空并且您正试图在第一个位置获得角色,因此会出错。

答案 2 :(得分:0)

在获取phone

之前,检查charAt字符串是否为空
if(!phone.isEmpty()) {
    char c  = phone.charAt(0);
}

答案 3 :(得分:0)

检查它是否为空。

 edt.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            Log.i("TESTTEST","" + s);
            if (s.length() !=0){
//                  do sth
            }

        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });