2010-03-28 3 views
1

Je travaille sur un programme dans lequel je recompose les widgets sauvegardés sur le panneau frontalier. Quand je les crée, j'essaye aussi de placer les valeurs dans ArrayList de sorte que si je veux mettre à jour et enregistrer le projet ouvert je devrais pouvoir faire ainsi en obtenant les valeurs de l'ArrayList.Erreur hors limite d'index

Voici comment le code ressemble à:

for(int i = 0; i < result.length; i++){ 
       if(ename.contains(result[i].getParticipateEntityName())){ 
         ername.add(ename.indexOf(result[i].getParticipateEntityName()), result[i].getParticipateRelatioshipName()); 
         etotalpartial.add(ename.indexOf(result[i].getParticipateEntityName()), result[i].getTotalPartial()); 
       }else if(wename.contains(result[i].getParticipateEntityName())){ 
         wrname.add(wename.indexOf(result[i].getParticipateEntityName()), result[i].getParticipateRelatioshipName()); 
       } 
} 

Ici Ename, RÉNOM, etotalpartial, wename et wrname sont tous ArrayList. Ce morceau de code est inclus dans une méthode de classe asynchrone.

Quand je lance le code i get erreur à "ername.add (Ename ......"

Voici la pile d'erreur:.

java.lang.IndexOutOfBoundsException: Index: 1, Size: 0 
    at java.util.ArrayList.add(ArrayList.java:367) 
    at com.e.r.d.client.ERD1$16.onSuccess(ERD1.java:898) 
    at com.e.r.d.client.ERD1$16.onSuccess(ERD1.java:1) 
    at com.google.gwt.user.client.rpc.impl.RequestCallbackAdapter.onResponseReceived(RequestCallbackAdapter.java:216) 
    at com.google.gwt.http.client.Request.fireOnResponseReceived(Request.java:287) 
    at com.google.gwt.http.client.RequestBuilder$1.onReadyStateChange(RequestBuilder.java:393) 
    at sun.reflect.GeneratedMethodAccessor16.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103) 
    at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71) 
    at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:157) 
    at com.google.gwt.dev.shell.BrowserChannel.reactToMessagesWhileWaitingForReturn(BrowserChannel.java:1713) 
    at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:165) 
    at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:120) 
    at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:507) 
    at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:264) 
    at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91) 
    at com.google.gwt.core.client.impl.Impl.apply(Impl.java) 
    at com.google.gwt.core.client.impl.Impl.entry0(Impl.java:188) 
    at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103) 
    at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71) 
    at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:157) 
    at com.google.gwt.dev.shell.BrowserChannel.reactToMessages(BrowserChannel.java:1668) 
    at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:401) 
    at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:222) 
    at java.lang.Thread.run(Thread.java:619) 

Je ne sais pas ce que je je fais mal.

Toute entrée sera d'une grande aide.

Merci.

Répondre

0

Eh bien, il ressemble à nom ou wrname est une liste de tableau vide. ername.size() retournera probablement 0 par la voie ...

Soit vous voulez utiliser la méthode add (objet Object), ou vous pouvez initialiser une capacité en insérant le code suivant:

for (int i = 0; i < CAPACITY; i++){ 
    ername.add(null); 
} 

et puis votre code devrait fonctionner ...

2

vous ne pouvez pas nous e la méthode public void add(int index, E element) de List si vous ne pouvez pas garantir que la taille de votre liste est supérieure à index.

C'est ce qui se passe avec votre code. Vous avez une liste vide (ername), et ename.indexOf(result[i].getParticipateEntityName()) renvoie 1, ainsi le IndexOutOfBoundsException. En d'autres termes, vous avez une liste de taille 0 et vous essayez d'insérer un élément à l'index 1.

Envisagez d'utiliser la méthode public boolean add(E e) de ArrayList qui ajoute le nouvel élément à la fin de la liste.

+1

est-il moyen de contourner cela parce que je veux que la valeur ename et la valeur de nom d'utilisateur correspondent les uns aux autres en termes d'index? Merci. – suprasad

+0

Vous pouvez utiliser 'Map' à la place, la clé étant' index', et la valeur 'ename'. –

+0

Ou vous pouvez utiliser un tableau initialisé à la capacité nécessaire. – Bluu