Problema estranho com vetor de String

TextView locationOffsetTextView = (TextView) listItemView.findViewById(R.id.location_offset_text_view);

   TextView primaryLocationTextView = (TextView)listItemView.findViewById(R.id.primary_location_text_view);

   if(verifyString(currentEarthquake.getPlace())){

       String currentPlace = currentEarthquake.getPlace();

       String[] parts = currentPlace.split("(?<=of)");

       String part1 = parts[0];

       //String part2 = parts[1];

       locationOffsetTextView.setText(part1);

       primaryLocationTextView.setText(part1);

   }else {

       locationOffsetTextView.setText("Near the");

       primaryLocationTextView.setText(currentEarthquake.getPlace());

   }

A String part2, quando tiro ela de comentário da erro

pq?

erro

03-02 01:40:59.301 20518-20518/com.example.android.quakereport E/AndroidRuntime: FATAL EXCEPTION: main
                                                                             Process: com.example.android.quakereport, PID: 20518
                                                                             java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
                                                                                 at com.example.android.quakereport.EarthquakeAdapter.getView(EarthquakeAdapter.java:82)
                                                                                 at android.widget.AbsListView.obtainView(AbsListView.java:2365)
                                                                                 at android.widget.ListView.makeAndAddView(ListView.java:2052)
                                                                                 at android.widget.ListView.fillDown(ListView.java:786)
                                                                                 at android.widget.ListView.fillFromTop(ListView.java:847)
                                                                                 at android.widget.ListView.layoutChildren(ListView.java:1826)
                                                                                 at android.widget.AbsListView.onLayout(AbsListView.java:2164)
                                                                                 at android.view.View.layout(View.java:19659)
                                                                                 at android.view.ViewGroup.layout(ViewGroup.java:6075)
                                                                                 at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
                                                                                 at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
                                                                                 at android.view.View.layout(View.java:19659)
                                                                                 at android.view.ViewGroup.layout(ViewGroup.java:6075)
                                                                                 at android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:443)
                                                                                 at android.view.View.layout(View.java:19659)
                                                                                 at android.view.ViewGroup.layout(ViewGroup.java:6075)
                                                                                 at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
                                                                                 at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
                                                                                 at android.view.View.layout(View.java:19659)
                                                                                 at android.view.ViewGroup.layout(ViewGroup.java:6075)
                                                                                 at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1791)
                                                                                 at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1635)
                                                                                 at android.widget.LinearLayout.onLayout(LinearLayout.java:1544)
                                                                                 at android.view.View.layout(View.java:19659)
                                                                                 at android.view.ViewGroup.layout(ViewGroup.java:6075)
                                                                                 at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
                                                                                 at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
                                                                                 at com.android.internal.policy.DecorView.onLayout(DecorView.java:761)
                                                                                 at android.view.View.layout(View.java:19659)
                                                                                 at android.view.ViewGroup.layout(ViewGroup.java:6075)
                                                                                 at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2496)
                                                                                 at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2212)
                                                                                 at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1392)
                                                                                 at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6752)
                                                                                 at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911)
                                                                                 at android.view.Choreographer.doCallbacks(Choreographer.java:723)
                                                                                 at android.view.Choreographer.doFrame(Choreographer.java:658)
                                                                                 at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
                                                                                 at android.os.Handler.handleCallback(Handler.java:790)
                                                                                 at android.os.Handler.dispatchMessage(Handler.java:99)
                                                                                 at android.os.Looper.loop(Looper.java:164)
                                                                                 at android.app.ActivityThread.main(ActivityThread.java:6494)
                                                                                 at java.lang.reflect.Method.invoke(Native Method)
                                                                                 at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
                                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

Isso significa que você está fazendo algo como

parts[1];

quando só poderia fazer

parts[0];

Pois o vetor parts2 só possui 1 casa (posição).

Qual o conteúdo de currentPlace? Verificou se o split está funcionando corretamente?

Mas o parts[1] ele estaria pegando apenas o que está na posição 1, não?

O primeiro índice de um vetor é sempre ‘0’, logo o primeiro elemento de um vetor vai estar na posição vetor[0], o segundo elemento vetor[1] e assim por diante. No seu caso como você só tem um elemento , ele está em parts[0] . Quando você tenta acessar um elemento em uma posição que não existe no seu vetor é lançada a e exceção : java.lang.ArrayIndexOutOfBoundsException

@darlan_machado @programador1225 estranho que quando faço lenght () ele acha 2. E testei o split no eclipse pegando um string simples e tambem funcionou.

Estranho, a função lenght() retornar 2. Porque a exceção foi clara

java.lang.ArrayIndexOutOfBoundsException: length=1; index=1

segundo a exceção o tamanho do seu vetor é 1 e você tentou acessar o lindice 1.

É simples:
Faça isso:

for(String str : parts) {
    System.out.println(str);
}

E você terá o total de posições e os valores de cada uma.

1 curtida

no eclipse mostra a mesma coisa do codigo que mandei.
no android studio mostra só a segunda parte do vetor (a que ta dando pau), que doideira.

fiz o debug e olha o que deu?


Vetor de duas posições com o conteudo dividido certin. E o erro persiste
da o erro quando coloco o interruptor na linha do else

Realmente, isso está bem estranho.
Porém, o erro é o mesmo, ainda?

aham

descobri o erro, era o if

a expressão contida nele

mas ainda não sei o que esta errada

parece que esta entrando no if mesmo não tendo numero

a função verifyString só ta retornando true, será pq?