简体   繁体   中英

App Crash While Clicking Button When EditText is Null

Here validating my mobile and password data,but when clicking button when EditText null My app crash!

This is what I have tried:

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;
                }

my error given below

java.lang.StringIndexOutOfBoundsException: length=0; index=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) at android.view.View.performClick(View.java:4780) at android.view.View$PerformClick.run(View.java:19866) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5254) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

Reason for 'IndexOutOfBounds' exception

This exception comes when you try to get the value of the index that is not really exist in the bounds(In your case length of 'phone' String which is null). So when you try to get the value at index '0' it throws the exception.

Solution

Always put a null check and 'Empty String' check before accessing any string value. Just do the following:

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

put this line char c = phone.charAt(0); after if (mobile.length() > 0&& mobile.length() == 10)

It is giving error because phone is blank and you are trying to get character at first position.

Check if phone string is empty or not before getting charAt

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

check it is empty or not.

 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) {

        }
    });

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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