After hours of research and testing I haven't been able to figure out why my app is crashing when I invoke this

    inputLocation.setText("");  inputLocation.setText(null); 

It will work just fine with this:

    inputLocation.setText("your text");

or

    inputLocation.setText(editText.getText().toString()); 

etc.

Any help would be highly appreciated. Thanks.

inputLocation.addTextChangedListener

    // / Execute code without the use of the save changes button.
    // ///////////////////////////////////////////
    inputLocation.addTextChangedListener(new TextWatcher() {
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {

            /* Process to check type */
            String location_string = inputLocation.getText().toString();
            String first_location_char = location_string.substring(0, 1);
            if (inputLocation.getText().toString().length() == locationsize) {
                String last_location_char = location_string.substring(8);

                if (last_location_char.equals("L")
                        && first_location_char.equals("L")) {

                    inputLocation.setText(location_string.substring(1, 8),
                            TextView.BufferType.EDITABLE);
                    new UpdateLocation().execute();

                } else if (!first_location_char.isEmpty()
                        && !last_location_char.isEmpty()) {

                    alertDialog = new AlertDialog.Builder(
                            CheckLocationActivity.this).create();
                    alertDialog.setTitle("Wrong Code for Location");
                    alertDialog
                            .setMessage("Please scan one more time the correct barcode!");

                    alertDialog.setButton(-1, getString(R.string.Ok),
                            new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog,
                                        int which) {
                                    inputLocation.setText("",
                                            TextView.BufferType.EDITABLE);
                                }
                            });
                    /*
                     * alertDialog.setButton(-2, getString(R.string.No), new
                     * DialogInterface.OnClickListener() {
                     * 
                     * @Override public void onClick(DialogInterface dialog,
                     * int which) { // do nothing dialog will dismiss } });
                     */
                    alertDialog.show();

                }

            }
        }

        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
        }

        public void afterTextChanged(Editable s) {
        }
    });

    // / Execute code without the use of the save changes button.
    // ///////////////////////////////////////////

Code Section

    alertDialog = new AlertDialog.Builder(
                            CheckLocationActivity.this).create();
                    alertDialog.setTitle("Wrong Code for Location");
                    alertDialog
                            .setMessage("Please scan one more time the correct barcode!");

                    alertDialog.setButton(-1, getString(R.string.Ok),
                            new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog,
                                        int which) {
                                    inputLocation.setText("",
                                            TextView.BufferType.EDITABLE);
                                }
                            });
                    /*
                     * alertDialog.setButton(-2, getString(R.string.No), new
                     * DialogInterface.OnClickListener() {
                     * 
                     * @Override public void onClick(DialogInterface dialog,
                     * int which) { // do nothing dialog will dismiss } });
                     */
                    alertDialog.show();

Log File

11-05 16:41:33.638: W/dalvikvm(19191): threadid=1: thread exiting with uncaught exception (group=0x41513700)
11-05 16:41:33.648: E/AndroidRuntime(19191): FATAL EXCEPTION: main
11-05 16:41:33.648: E/AndroidRuntime(19191): java.lang.StringIndexOutOfBoundsException: length=0; regionStart=0; regionLength=1
11-05 16:41:33.648: E/AndroidRuntime(19191):    at java.lang.String.startEndAndLength(String.java:583)
11-05 16:41:33.648: E/AndroidRuntime(19191):    at java.lang.String.substring(String.java:1464)
11-05 16:41:33.648: E/AndroidRuntime(19191):    at com.dev.assetlocation.CheckLocationActivity$3.onTextChanged(CheckLocationActivity.java:162)
11-05 16:41:33.648: E/AndroidRuntime(19191):    at android.widget.TextView.sendOnTextChanged(TextView.java:7318)
11-05 16:41:33.648: E/AndroidRuntime(19191):    at android.widget.TextView.setText(TextView.java:3774)
11-05 16:41:33.648: E/AndroidRuntime(19191):    at android.widget.TextView.setText(TextView.java:3629)
11-05 16:41:33.648: E/AndroidRuntime(19191):    at android.widget.EditText.setText(EditText.java:80)
11-05 16:41:33.648: E/AndroidRuntime(19191):    at android.widget.TextView.setText(TextView.java:3604)
11-05 16:41:33.648: E/AndroidRuntime(19191):    at com.dev.assetlocation.CheckLocationActivity$2.onTextChanged(CheckLocationActivity.java:103)
11-05 16:41:33.648: E/AndroidRuntime(19191):    at android.widget.TextView.sendOnTextChanged(TextView.java:7318)
11-05 16:41:33.648: E/AndroidRuntime(19191):    at android.widget.TextView.handleTextChanged(TextView.java:7377)
11-05 16:41:33.648: E/AndroidRuntime(19191):    at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:9076)
11-05 16:41:33.648: E/AndroidRuntime(19191):    at android.text.SpannableStringBuilder.sendTextChanged(SpannableStringBuilder.java:962)
11-05 16:41:33.648: E/AndroidRuntime(19191):    at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:496)
11-05 16:41:33.648: E/AndroidRuntime(19191):    at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:435)
11-05 16:41:33.648: E/AndroidRuntime(19191):    at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:30)
11-05 16:41:33.648: E/AndroidRuntime(19191):    at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:673)
11-05 16:41:33.648: E/AndroidRuntime(19191):    at android.view.inputmethod.BaseInputConnection.commitText(BaseInputConnection.java:197)
11-05 16:41:33.648: E/AndroidRuntime(19191):    at com.android.internal.widget.EditableInputConnection.commitText(EditableInputConnection.java:183)
11-05 16:41:33.648: E/AndroidRuntime(19191):    at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:279)
11-05 16:41:33.648: E/AndroidRuntime(19191):    at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:77)
11-05 16:41:33.648: E/AndroidRuntime(19191):    at android.os.Handler.dispatchMessage(Handler.java:99)
11-05 16:41:33.648: E/AndroidRuntime(19191):    at android.os.Looper.loop(Looper.java:137)
11-05 16:41:33.648: E/AndroidRuntime(19191):    at android.app.ActivityThread.main(ActivityThread.java:5103)
11-05 16:41:33.648: E/AndroidRuntime(19191):    at java.lang.reflect.Method.invokeNative(Native Method)
11-05 16:41:33.648: E/AndroidRuntime(19191):    at java.lang.reflect.Method.invoke(Method.java:525)
11-05 16:41:33.648: E/AndroidRuntime(19191):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
11-05 16:41:33.648: E/AndroidRuntime(19191):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
11-05 16:41:33.648: E/AndroidRuntime(19191):    at dalvik.system.NativeStart.main(Native Method)
11-05 16:41:36.201: D/libEGL(19240): loaded /system/lib/egl/libEGL_adreno200.so
11-05 16:41:36.201: D/libEGL(19240): loaded /system/lib/egl/libGLESv1_CM_adreno200.so
11-05 16:41:36.201: D/libEGL(19240): loaded /system/lib/egl/libGLESv2_adreno200.so
11-05 16:41:36.211: I/Adreno200-EGL(19240): : EGL 1.4 QUALCOMM Build: Iabe52cfaeae4c5fab1acacfe6f056ba15fa93274
11-05 16:41:36.241: D/OpenGLRenderer(19240): Enabling debug mode 0
有帮助吗?

解决方案

com.dev.assetlocation.CheckLocationActivity$3 (anonymous inner class #3) listens for changes of that text. onTextChanged (in CheckLocationActivity$3) uses String.substring, which causes your error, as there are no valid indexes in an empty String.

Your listener (CheckLocationActivi‌​ty.java line 162) should check whether the text is empty or null.

其他提示

java.lang.StringIndexOutOfBoundsException: length=0; regionStart=0;

Based on above message my guess is, some where in your code you are doing some string operation (like substring()) on that text. If String is "" and do subString() you will get StringIndexOutofBoundsException.

If String is null, you will get NullPointerException.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top