2014-04-09 12 views
7

Questo è il mio rapporto logcat:come risolvere StringIndexOutOfBoundsException in Android

java.lang.StringIndexOutOfBoundsException: length=0; regionStart=0; regionLength=2 
at java.lang.String.startEndAndLength(String.java:583) 
at java.lang.String.substring(String.java:1464) 
at com.buzzador.profile.getValidPhoneNumber(profile.java:1966) 
at com.buzzador.profile.setDataForServer(profile.java:1717) 
at com.buzzador.profile$5.onClick(profile.java:236) 
at android.view.View.performClick(View.java:4377) 
at android.view.View$PerformClick.run(View.java:18044) 
at android.os.Handler.handleCallback(Handler.java:725) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:5306) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) 
at dalvik.system.NativeStart.main(Native Method) 

e credo che il problema è in questa funzione:

public String getValidPhoneNumber (String phoneNumber, String country) 
{ 
    String csValidPhoneNumber = ""; 

    phoneNumber = getPhoneNumberWithoutReqularExpresions(phoneNumber); 
    phoneNumber = phoneNumber.replaceFirst ("^0*", ""); 

    String csCountryCode = getCountryCode(country); 

    String csAppendedCode = phoneNumber.substring(0, csCountryCode.length()); 
    if(csAppendedCode.equals(csCountryCode)) 
    { 
     csValidPhoneNumber = "+" + phoneNumber; 
     return csValidPhoneNumber; 
    } 

    csValidPhoneNumber = "+" + csCountryCode + phoneNumber; 

    return csValidPhoneNumber; 
} 
+0

Quale riga è 'profile.java: 1966' nel codice? –

+0

@Kevinrob questa è la riga 'profile.java:1966' String csAppendedCode = phoneNumber.substring (0, csCountryCode.length()); –

risposta

12

Sei sicuro che phoneNumber non è uguale a ""? È necessario verificare che lo phoneNumber abbia più caratteri rispetto allo csCountryCode.length().

String csAppendedCode = phoneNumber.length() > csCountryCode.length() ? phoneNumber.substring(0, csCountryCode.length()) : ""; 
+1

thnaks molto per il tuo ans, ha funzionato :) –

+0

Questa è la risposta corretta. Per verificare la presenza di 'phoneNumber! =" ";' –

1

L'ultimo indice di un String è string.length()-1 ma siete provando ad accedere all'indice con string.length() che non esiste, ecco perché stai ricevendo questa eccezione ...

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

Ora, è necessario modificare questa riga ...

String csAppendedCode = phoneNumber.substring(0, csCountryCode.length()); 

a questo ...

String csAppendedCode = phoneNumber.substring(0, csCountryCode.length()-1); 
+0

Non sempre una risposta valida !!! cosa succede se la lunghezza 'csCountryCode' è maggiore della lunghezza' phoneNumber'? –

+0

'length()' restituisce sempre il valore 'lastindex + 1', quindi quando tenterai di accedere all'ultimo indice di un' String' con 'lastIndex + 1' otterrai sempre' StringIndexOutOfBoundsException'. –

+1

Una volta provato questo 'String string =" Android "; System.out.println (string.substring (0, string.length())); '... Non genera alcuna eccezione ... –