2010-03-28 2 views
1

Я работаю над программой, в которой я обновляю сохраненные виджеты обратно на пограничную панель. Когда я их создаю, я также пытаюсь поместить значения в ArrayList, чтобы, если я хочу обновить и сохранить открытый проект, я должен быть в состоянии сделать это, получив значения из ArrayList.Ошибка индекса за пределами

Вот как выглядит код:

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()); 
       } 
} 

Здесь ENAME, ername, etotalpartial, wename и wrname все ArrayList. Этот фрагмент кода включен в метод асинхронного класса.

Когда я запускаю код я получаю ошибку в "ername.add (ENAME ......"

Вот стек ошибка:.

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) 

Я не уверен, что я я делаю неправильно.

Любой вход будет иметь большую помощь.

Спасибо.

ответ

0

Ну, похоже, что имя пользователя или wrname - это пустой список массивов. ername.size(), вероятно, вернет 0, кстати ...

Вы либо хотите использовать надстройку (объект Object) метод, или вы можете инициализировать емкость, вставив следующий код:

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

, а затем ваш код должен работать ...

2

Вы не можете нам e public void add(int index, E element) метод List, если вы не можете гарантировать, что размер вашего списка больше index.

Это то, что происходит с вашим кодом. У вас есть пустой список (ername), и ename.indexOf(result[i].getParticipateEntityName()) возвращает 1, таким образом IndexOutOfBoundsException. Другими словами, у вас есть список размера 0, и вы пытаетесь вставить элемент в индекс 1.

Рассмотрите возможность использования метода public boolean add(E e)ArrayList, который добавляет новый элемент в конец списка.

+1

есть ли способ обойти это, потому что я хочу, чтобы значение ename и значение ername соответствовали друг другу с точки зрения индекса? Спасибо. – suprasad

+0

Вместо этого вы можете использовать 'Map', а ключ -' index', а значение - 'ename'. –

+0

Или вы можете использовать массив, инициализированный до необходимой емкости. – Bluu