Autore Topic: Strano errore spinner out the bound  (Letto 750 volte)

Offline napalm

  • Nuovo arrivato
  • *
  • Post: 37
  • Respect: 0
    • Mostra profilo
Strano errore spinner out the bound
« il: 20 Dicembre 2013, 16:59:36 CET »
0
Stranissimo problema... nella mia activity istanzio uno spinner  e lo carico con un arraylist
Codice (Java): [Seleziona]
ArrayList tExp = new ArrayList();
                for(int i=1;i<=50;i++)
                {
                    tExp.add(i);
                }
                Spinner spinPatternTest = (Spinner) findViewById(R.id.spinPattern);
                    ArrayAdapter<String> spinnerQua = new ArrayAdapter<String>(getApplicationContext(),
                            R.layout.simple_spinner_item, tExp);
                    spinnerQua.setDropDownViewResource(R.layout.simple_spinner_dropdown_item);
                    Log.d("TEST", "Your message:"+spinnerQua.getCount());
                    spinPatternTest.setAdapter(spinnerQua);

l'app crash su setAdapter e mi stampa questo
Codice: [Seleziona]
12-20 16:56:33.782: E/AndroidRuntime(1035): FATAL EXCEPTION: main
12-20 16:56:33.782: E/AndroidRuntime(1035): java.lang.ArrayIndexOutOfBoundsException: length=60; index=-1
12-20 16:56:33.782: E/AndroidRuntime(1035):         at java.util.ArrayList.get(ArrayList.java:306)
12-20 16:56:33.782: E/AndroidRuntime(1035):         at android.widget.ArrayAdapter.getItem(ArrayAdapter.java:337)
12-20 16:56:33.782: E/AndroidRuntime(1035):         at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:390)
12-20 16:56:33.782: E/AndroidRuntime(1035):         at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)
12-20 16:56:33.782: E/AndroidRuntime(1035):         at android.widget.Spinner.makeAndAddView(Spinner.java:546)

peccato che il mio array sia di 50 elementi

Codice: [Seleziona]
12-20 16:56:33.523: D/TEST(1035): Your message:50
ma che stà succedendo?

Offline teskio

  • Moderatore globale
  • Utente normale
  • *****
  • Post: 387
  • Respect: +118
    • Github
    • Google+
    • Mostra profilo
    • Skullab
  • Dispositivo Android:
    Cubot GT99 / SurfTab Ventos 10.1
  • Play Store ID:
    Skullab Software
  • Sistema operativo:
    windows 7 / ubuntu 12.04
Re:Strano errore spinner out the bound
« Risposta #1 il: 20 Dicembre 2013, 19:32:38 CET »
0
Probabilmente il problema è sull'ArrayList, dato che hai tipizzato l'ArrayAdapter come <String> mentre l'ArrayList contiene oggetti di tipo Integer. Quando l'ArrayAdapter tenta di prendere gli oggetti per popolare la lista, non trovandone passa come index un "-1" all'ArrayList sul metodo get(in location) , provocando un IndexOutOfBoundsException

Citazione
public abstract E get (int location)

Returns the element at the specified location in this list.

Parameters
location   the index of the element to return.
Returns
the element at the specified index.
Throws
IndexOutOfBoundsException   if location < 0 || location >= size()


Prova a tipizzare l'ArrayList<String>

Offline napalm

  • Nuovo arrivato
  • *
  • Post: 37
  • Respect: 0
    • Mostra profilo
Re:Strano errore spinner out the bound
« Risposta #2 il: 21 Dicembre 2013, 17:44:14 CET »
0
Era un problema che nella funzione doInBackground facevo tutto, ovvero recuperavo dati via http e poi valorizzavo lo spinner, ora nella doInBackground prendo i dati e nella onPostExecute carico lo spinner e tutto funziona.

però una cosa non mi quadra:

Codice (Java): [Seleziona]
ArrayAdapter<TblRacquetsPattern> spinnerTblRacquetsPattern= new ArrayAdapter<TblRacquetsPattern>(EditCustomerRacquetActivity.this,
                            R.layout.simple_spinner_item, listTblRacquetsPattern);
                    spinnerTblRacquetsPattern.setDropDownViewResource(R.layout.simple_spinner_dropdown_item);
                    spinPattern.setAdapter(spinnerTblRacquetsPattern);
                    id = customerRacquet.getTblRacquetsPattern().getId();
                    for(int i = 0; i < spinnerTblRacquetsPattern.getCount(); i++) {
                        if (spinnerTblRacquetsPattern.getItem(i).getId() == id){
                                spinPattern.setSelection(i);
                                        break;
                                }
                        }

qua popolo lo spinner e se il mio codice id
Codice (Java): [Seleziona]
id = customerRacquet.getTblRacquetsPattern().getId();è uguale
Codice (Java): [Seleziona]
spinnerTblRacquetsPattern.getItem(i).getId()seleziono il valore

fin qui tutto ok, ma se io provavo a fare così
Codice (Java): [Seleziona]
if (spinnerTblRacquetsPattern.getItem(i).getId() == customerRacquet.getTblRacquetsPattern().getId()){che a livello di pulizia di codice è migliore non riuscivo ma a farlo selezionare, portando l'id da ricercare fuori dal ciclo sono riuscito ma non mi spiego il perchè