2014-04-09 12 views
7

To jest mój raport logcat:jak rozwiązać StringIndexOutOfBoundsException w 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) 

i myślę, że problem jest w tej funkcji:

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

Która linia to "profil.java: 1966" w kodzie? –

+0

@Kevinrob jest to linia 'profile.java:1966' String csAppendedCode = phoneNumber.substring (0, csCountryCode.length()); –

Odpowiedz

12

Czy jesteś pewien, że phoneNumber nie jest równa ""? Musisz sprawdzić, czy phoneNumber ma więcej znaków niż csCountryCode.length().

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

thnaks alot dla twoich ans, zadziałało :) –

+0

To jest poprawna odpowiedź. Aby sprawdzić 'phoneNumber! =" ";' –

1

Ostatnim indeksem String jest string.length()-1 ale jesteś próbuje uzyskać dostęp do indeksu z string.length(), który nie istnieje, dlatego otrzymujesz ten wyjątek ...

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

Teraz należy zmienić tę linię ...

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

do tego ...

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

Brak prawidłowej odpowiedzi zawsze !!! co jeśli długość 'csCountryCode' jest większa niż długość' phoneNumber'? –

+0

'length()' zawsze zwraca wartość 'lastindex + 1', więc gdy spróbujesz uzyskać dostęp do ostatniego indeksu' String' z 'lastIndex + 1', zawsze otrzymasz' StringIndexOutOfBoundsException'. –

+1

Po wypróbowaniu tego 'String string =" Android "; System.out.println (string.substring (0, string.length())); '... Nie wyrzuca żadnego wyjątku ... –

Powiązane problemy