CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: carotix con ben 1 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: 9mm con ben 11 Thanks ricevuti negli ultimi sette giorni
Utente del mese: 9mm con ben 34 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 7 su 7
Discussione:

Problema IndexOutOfBoundsException

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Baby Droid


    Registrato dal
    May 2012
    Messaggi
    41

    Ringraziamenti
    1
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Problema IndexOutOfBoundsException

    ho un problema con IndexOutOfBoundsException ci ho passato tutto il pomeriggio ma niente!!

    in pratica l'errore si verifica quando memorizzo un tipo evento con data di oggi e un altro tipo evento con data di domani

    (nell'array stri (tipi evento) quindi sono memorizzati 2 tipi di eventi, mentre la lista "lista" tiene memorizzati gli oggetti eventi (con ora data ecc)

    e chiamo il metodo creaGrafoData() dandogli la data di domani (cioe il secondo)

    vi lascio il codice non so + dove sbattere la testa, dice illegal size, index 1 but size 0

    codice:
    ////////////////////////////////////////////////////////////////////////////////////////
    // CREAZIONE GRAFICO PER DATA
    ////////////////////////////////////////////////////////////////////////////////////////
        
        private void creaGrafoData() {
        	
        	
        	 
        	
        	//DATA= DATA IN FORMATO 25-12-2012
        	String data=pad(mMonth+1)+"-"+pad(mDay)+"-"+mYear;
        	//Toast.makeText(getApplicationContext(), data, Toast.LENGTH_SHORT).show();
        	
        	
        	LinearLayout layout = (LinearLayout) findViewById(R.id.graph1);
    		
    		//PULISCI ZONA GRAFICI
        	layout.removeAllViewsInLayout();
        	
        	//LISTA DI ARRAY CON I PUNTI (X,Y) -> È NECESSARIO PERCHÈ CI SONO + GRAFICI
        	List<GraphViewData[]> tutti = new ArrayList<GraphViewData[]>();
        	
        	List<GraphViewSeries> serie = new ArrayList<GraphViewSeries>();
        	  	
        	//ARRAY CON GLI INT DI 8 COLORI (1 PER OGNI EVENTO). SE EVENTI>8 -> EVENTI%8
        	int colori[] = {-16776961,-16711681,-65281,-16711936, -3355444, -65536, -1, -256};
      
    
        	GraphView graphView = null;
        	int contr=0;
        	int contra=0;
        	
        	//CONTROLLO SE CI SONO EVENTI CON QUESTA DATA, SE NO ESCO
    for (int j=0; j<lista.size();j++){
        		
            	if(data.equals(lista.get(j).getData())){
            			contra=1;
            			break;
            	}
            	
    }	
    
            			//SE CI SONO EVENTI..
            		if (contra==1){
            			
            			
            			//FOR PER OGNI TIPO DI EVENTO IN STRI
        	for (int x=0;x<stri.size();x++){
        		
        		//AGGIUNGE ALLA LISTA (IN POSIZIONE X) L'ARRAY CON I PUNTI (X,Y)
        		tutti.add(x,new GraphViewData[24*60]);
        		
        		//LO INIZIALIZZA A 0
        		for (int k=0;k<24*60;k++)                		
            		tutti.get(x)[k]=new GraphViewData(k, 0);
        		 
        		//PER OGNI EVENTO, SE DATA=DATAEVENTO E NOME=NOMEVENTO..
        	for (int j=0; j<lista.size();j++){
        		
            	if(data.equals(lista.get(j).getData())&&lista.get(j).getNome().equals(stri.get(x))){
            		
            		//DATA NEL FORMATO MINUTI
            		contr=1;
            		int inizio=60*Integer.parseInt( ""+lista.get(j).getInizio().charAt(0)+lista.get(j).getInizio().charAt(1) )+Integer.parseInt( ""+lista.get(j).getInizio().charAt(3)+lista.get(j).getInizio().charAt(4) );
            		int fine=60*Integer.parseInt( ""+lista.get(j).getFine().charAt(0)+lista.get(j).getFine().charAt(1) )+Integer.parseInt( ""+lista.get(j).getFine().charAt(3)+lista.get(j).getFine().charAt(4) );
            		
            		//RIEMPIE ARRAY (INC I VALORI DELL'INTERVALLO)
            		if (inizio < fine){
            		for (int i=inizio;i<=fine;i++)
            			tutti.get(x)[i]=new GraphViewData(i, 1);
            		}
            		else if  (inizio == fine)
            			tutti.get(x)[inizio]=new GraphViewData(inizio, 1);
            		
            		//GESTIONE INIZIO>FINE
            		//ES. EVENTO FIESTA INIZIO 22.30 FIN 05.00
            		else {
            			for (int i=inizio;i<(24*60);i++)
            				tutti.get(x)[i]=new GraphViewData(i, 1);
            			for (int i=0;i<=fine;i++)
            				tutti.get(x)[i]=new GraphViewData(i, 1);
            			
            		}
            			
    
            		
            	}
    
    
            	}
        	
        					//CONTROLLO XKE SENNO DISEGNAVA TUTTI GLI EVENTI MA A 0, PERÒ SI VEDEVANO NELLA LEGENDA
        					if(contr==1)
        						serie.add(x,new GraphViewSeries(stri.get(x), new GraphViewStyle(colori[x%8], 3),tutti.get(x)));
        					
    
        			     contr=0;
        	
        	//GESTIONE ASSE X CON ORE 08:00 E NON 480
        	graphView = new LineGraphView(getApplicationContext(),getString(R.string.data2)+data){
            	@Override  
            	protected String formatLabel(double value, boolean isValueX) { 
            		if (isValueX) {  
        	        	
        	        	double numero,decimal, entero;
        	        
        	        	numero = value/60;
        	        	numero = Math.rint(numero*100)/100;
        	        	entero = (long) numero;
        	        	decimal = ((numero-entero)*100)*0.6;
        	        	decimal = Math.rint(decimal*100)/100;
        	       
        	        	int a = (int) entero;
        	        	int b = (int) Math.rint( decimal);
        	        	String num = pad(a)+":"+pad(b);
    
        	           return num;  
        	        } 
        	        
        	        else return super.formatLabel(value, isValueX); // let the y-value be normal-formatted  
            	} 
            	};
    
            	
        	}
        	
        	
        	
        	//ADD LE SERIE AL GRAFICO SERIE
            
        	for (int i=0;i<serie.size();i++)
        	graphView.addSeries(serie.get(i));
        	
        	
        	//NON VA LO SFONDO, BUG NELLA LIBRERIA: VA SOLO SE VALORI <=145
        	        //((LineGraphView) graphView).setDrawBackground(true);
    
        	//PER CANCELLARE LA LINEA DI SOTTO, SOLO CHE AGGIUNGE UN ELEMENTO ALLA LEGENDA!!
        	/*GraphViewData[] zero = new GraphViewData[24*60];
        	for (int i=0;i<24*60;i++)
    			zero[i]=new GraphViewData(i, 0);
        	
        	graphView.addSeries(new GraphViewSeries(null, new GraphViewStyle(Color.BLACK, 3),zero));
    */
        	
        	//SENZA ASSE DELLE Y
        	graphView.setVerticalLabels(new String[] {""});
        	graphView.setShowLegend(true);
        	graphView.setLegendAlign(LegendAlign.BOTTOM);
        	
        	
        	//va lentissimo!!!!!!!!!!
        	//graphView.setScrollable(true); 
        	//graphView.setViewPort(0, 360);//VALORI SULLE X FISSI (ESSENDO STRING, SONO A DISTANZA FISSA)
            //graphView.setHorizontalLabels(new String[] {"00:00","01:00","02:00","03:00","04:00", "05.00", "06:00","07:00","08:00","09:00","10.00","11:00","12:00","13:00","14:00","15.00","16.00","17.00","18.00","19.00","20.00","21.00","22.00","23.00","24.00",});  
        	layout.addView(graphView);
        	
            		
            		}
            		
            //SE IN QUESTA DATA NON CI SONO EVENTI DISEGNA UN GRAFICO VUOTO E STAMPA UN TOAST
            else if (contra==0){
            	
            	graphView = new LineGraphView(getApplicationContext(),getString(R.string.data2)+data);
                	graphView.setVerticalLabels(new String[] {""});
                	graphView.setHorizontalLabels(new String[] {"00:00", "12:00", "24:00"});
            	layout.removeAllViewsInLayout();
            	layout.addView(graphView);
            	
            	Toast.makeText(getApplicationContext(), getString(R.string.noevfe)+data, Toast.LENGTH_SHORT).show();
            }
            		
            	//	
        	
        
        }
        
        //PER TRASFORMARE 8:00 IN 08:00
        private static String pad(int c) {
    	    if (c >= 10)
    	        return String.valueOf(c);
    	    else
    	        return "0" + String.valueOf(c);
    	}
        
    
    
        //GESTIONE FORM X IMPOSTARE DATA
        private DatePickerDialog.OnDateSetListener mDateSetListener3 =
                new DatePickerDialog.OnDateSetListener() {
    
                    public void onDateSet(DatePicker view3, int year, 
                                          int monthOfYear, int dayOfMonth) {
                        mYear = year;
                        mMonth = monthOfYear;
                        mDay = dayOfMonth;
                        
                      
                        
                        creaGrafoData();
                        
                
                    }
                };
    Ultima modifica di mauro21; 03-07-12 alle 01:01

  2.  
  3. #2
    Androidiano


    Registrato dal
    Oct 2010
    Messaggi
    229

    Ringraziamenti
    27
    Ringraziato 77 volte in 35 Posts
    Predefinito

    due consigli:
    - usa il tag [ code ] e [ /code ] (senza gli spazi ovviamente) per postare del codice così rimane più leggibile.

    - Se ti da una eccezione dovrebbe anche indicarti la riga in cui l'eccezione avviene, cosa che ti indirizzerà molto rapidamente all'errore. (O quantomeno, se posti l'intero stack trace dell'errore e la riga in cui avviene aiuterai molto chi cercherà di darti una mano)
    Felice possessore di un LG O1 con GingerLOL 1.5.2 e di un Mediacom Smartpad 810c con Pistoneone 4.2.1 / 5.0 Samsung Galaxy Tab 10.1 P7510 (originale per ora) Mediacom Smartpad 715i (ROM smartpao 2.1), Mediacom Smartpad 842i (ROM smartpao 2.0)
    Mini-Forum-FAQ per Mediacom Smartpad 810c

  4. #3
    Baby Droid


    Registrato dal
    May 2012
    Messaggi
    41

    Ringraziamenti
    1
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Quote Originariamente inviato da pourquoipas Visualizza il messaggio
    due consigli:
    - usa il tag [ code ] e [ /code ] (senza gli spazi ovviamente) per postare del codice così rimane più leggibile.

    - Se ti da una eccezione dovrebbe anche indicarti la riga in cui l'eccezione avviene, cosa che ti indirizzerà molto rapidamente all'errore. (O quantomeno, se posti l'intero stack trace dell'errore e la riga in cui avviene aiuterai molto chi cercherà di darti una mano)
    ecco quello che mi esce


    07-03 01:09:26.951: E/AndroidRuntime(291): FATAL EXCEPTION: main
    07-03 01:09:26.951: E/AndroidRuntime(291): java.lang.IndexOutOfBoundsException: Invalid index 1, size is 0
    07-03 01:09:26.951: E/AndroidRuntime(291): at java.util.ArrayList.throwIndexOutOfBoundsException (ArrayList.java:257)
    07-03 01:09:26.951: E/AndroidRuntime(291): at java.util.ArrayList.add(ArrayList.java:152)
    07-03 01:09:26.951: E/AndroidRuntime(291): at com.example.tablayout.Graficas.creaGrafoData(Grafi cas.java:343)
    07-03 01:09:26.951: E/AndroidRuntime(291): at com.example.tablayout.Graficas.access$3(Graficas.j ava:254)
    07-03 01:09:26.951: E/AndroidRuntime(291): at com.example.tablayout.Graficas$1.onDateSet(Grafica s.java:447)
    07-03 01:09:26.951: E/AndroidRuntime(291): at android.app.DatePickerDialog.onClick(DatePickerDia log.java:143)
    07-03 01:09:26.951: E/AndroidRuntime(291): at com.android.internal.app.AlertController$ButtonHan dler.handleMessage(AlertController.java:158)
    07-03 01:09:26.951: E/AndroidRuntime(291): at android.os.Handler.dispatchMessage(Handler.java:99 )
    07-03 01:09:26.951: E/AndroidRuntime(291): at android.os.Looper.loop(Looper.java:123)
    07-03 01:09:26.951: E/AndroidRuntime(291): at android.app.ActivityThread.main(ActivityThread.jav a:4627)
    07-03 01:09:26.951: E/AndroidRuntime(291): at java.lang.reflect.Method.invokeNative(Native Method)
    07-03 01:09:26.951: E/AndroidRuntime(291): at java.lang.reflect.Method.invoke(Method.java:521)
    07-03 01:09:26.951: E/AndroidRuntime(291): at com.android.internal.os.ZygoteInit$MethodAndArgsCa ller.run(ZygoteInit.java:868)
    07-03 01:09:26.951: E/AndroidRuntime(291): at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:626)
    07-03 01:09:26.951: E/AndroidRuntime(291): at dalvik.system.NativeStart.main(Native Method)

  5. #4
    Androidiano


    Registrato dal
    Oct 2010
    Messaggi
    229

    Ringraziamenti
    27
    Ringraziato 77 volte in 35 Posts
    Predefinito

    ciao

    è molto probabile che il tuo errore sia qui:

    codice:
        			//CONTROLLO XKE SENNO DISEGNAVA TUTTI GLI EVENTI MA A 0, PERÒ SI VEDEVANO NELLA LEGENDA
        			if(contr==1)
        				serie.add(x,new GraphViewSeries(stri.get(x), new GraphViewStyle(colori[x%8], 3),tutti.get(x)));
    secondo me serie.add(...) è alla riga 343 del tuo sorgente, come nella riga dello stacktrace 07-03 01:09:26.951: E/AndroidRuntime(291): at com.example.tablayout.Graficas.creaGrafoData(Grafi cas.java:343)

    Guardando al volo il tuo codice, direi che alla seconda data, (con data diversa dalla prima) esci dal primo ciclo con contr == 1 solo la seconda volta, ma a quel punto la variabile x vale già 1, e quando fai il serie.add(x, ...) va in IndexOutOfBoundException perchè anche se x vale 1 è il primo elemento che aggiungi a serie, quindi dovrebbe avere indice 0.

    fatico a suggerirti alternative perchè non conosco tutto il codice, ma credo tu abbia diversi modi per ovviare alla cosa ..

    (beh, spero anche di averci preso eh, verifica !)
    in bocca al lupo !
    ciao
    Felice possessore di un LG O1 con GingerLOL 1.5.2 e di un Mediacom Smartpad 810c con Pistoneone 4.2.1 / 5.0 Samsung Galaxy Tab 10.1 P7510 (originale per ora) Mediacom Smartpad 715i (ROM smartpao 2.1), Mediacom Smartpad 842i (ROM smartpao 2.0)
    Mini-Forum-FAQ per Mediacom Smartpad 810c

  6. #5
    Baby Droid


    Registrato dal
    May 2012
    Messaggi
    41

    Ringraziamenti
    1
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Sembra che ora funzioni!!!

    in quella riga che mi dici semplicemente levo la x

    cioè faccio

    serie.add(new GraphViewSeries(stri.get(x), new GraphViewStyle(colori[x%8], 3),tutti.get(x)));

    pensi possa generare ulteriori errori?? in questo modo aggiunge automaticamente alla fine della lista vero??

  7. #6
    Androidiano


    Registrato dal
    Oct 2010
    Messaggi
    229

    Ringraziamenti
    27
    Ringraziato 77 volte in 35 Posts
    Predefinito

    Si, se non gli dai indice aggiunge automaticamente alla fine.
    Senza conoscere tutto il programma fatico a dirti se avrai errori o meno, però non ti dovrebbe dare errori a meno che tu dopo non ti aspetti di trovare gli elementi che hai inserito nelle posizioni a cui li inserivi prima (nel qual caso dovresti inserire anche quelli che ora salti).
    Felice possessore di un LG O1 con GingerLOL 1.5.2 e di un Mediacom Smartpad 810c con Pistoneone 4.2.1 / 5.0 Samsung Galaxy Tab 10.1 P7510 (originale per ora) Mediacom Smartpad 715i (ROM smartpao 2.1), Mediacom Smartpad 842i (ROM smartpao 2.0)
    Mini-Forum-FAQ per Mediacom Smartpad 810c

  8. #7
    Baby Droid


    Registrato dal
    May 2012
    Messaggi
    41

    Ringraziamenti
    1
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Per adesso sembra funzionare....
    in effetti non mi serve estrarre un elemento a posizione x...

    Grazie 1000!!!!! che occhio ehehe

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy