2015-05-22 3 views
-1

Как я могу решить эту проблему? У меня есть эта ошибка, когда я нажимаю кнопку этого класса.ArrayIndexOutOfBoundsException

У меня есть эта ошибка java.lang.ArrayIndexOutOfBoundsException: length = 18; индекс = -1

public class ConsiglieriReal extends Activity implements OnClickListener { 
    public static List<Consigliere> consiglieri = new ArrayList<Consigliere>(); 

    DBConsiglieri db3 ; 
    String access_token; 
    String refresh_token; 
    int i = 0; 
    final String nonAutorizzato = "nonAutorizzato"; 


    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_consiglieri_real); 


     db3 = new DBConsiglieri(getApplicationContext()); 
     db3.open(); 
     access_token = getIntent().getExtras().getString("access_token"); 
     refresh_token = getIntent().getExtras().getString("refresh_token"); 
     String URL_BASE = "http://api-electionup.mybluemix.net/"; 
     String URL_EXTRA = "candidati/consiglieri"; 
     String PARAMS = "access_token=" + access_token; 

     HTMLRequest htlmRequest = new HTMLRequest(URL_BASE + URL_EXTRA, PARAMS); 
     String htmlRisposta = htlmRequest.getHTML(); 

     if (htmlRisposta != null) { 

      // conversione JSON 
      JSONArray jsonA = null; 

      try { 
       jsonA = new JSONArray(htmlRisposta); 

       for (i = 0; i < jsonA.length();i++) { 
        Consigliere c = new Consigliere(); 
        JSONObject object = jsonA.getJSONObject(i); 
        c.setIndice(i + 1); 
        c.setNome(object.getString("nome")); 
        c.setVoti(0); 
        c.setCognome(object.getString("cognome")); 
        consiglieri.add(c); 
        TableLayout layout = (TableLayout) findViewById(R.id.table2); 
        Button bottone1 = new Button(this); 
        bottone1.setTextColor(0x000000); 
        bottone1.setHintTextColor(0xffffffff); 
        bottone1.setHint(consiglieri.get(i).getNome()+"\n"+ 
        consiglieri.get(i).getCognome()); 
        bottone1.setHeight(350); 
        bottone1.setTextSize(35); 
        layout.addView(bottone1); 
        bottone1.setOnClickListener(new View.OnClickListener() { 
         public void onClick(View v) { 
          consiglieri.get(v.getId()).setVoti(
            consiglieri.get(v.getId()).getVoti() + 1); 
          db3.update(consiglieri.get(v.getId()).getIndice(), 
            consiglieri.get(v.getId()).getVoti() + 1); 

          Intent intent = new Intent(ConsiglieriReal.this, 
            SindaciReal.class); 
          Bundle bundle = new Bundle(); 
          bundle.putString("access_token", access_token); 
          bundle.putString("refresh_token", refresh_token); 
          intent.putExtras(bundle); 
          startActivity(intent); 
         } 
        }); 
    } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
       Toast.makeText(getApplicationContext(), 
         "Dati sindaci non trovati", Toast.LENGTH_LONG).show(); 
      } 

     } 



     for (i = 1; i < consiglieri.size(); i++) { 
      if (consiglieri.get(i).getVoti() == 50) { 
       // invio pacchetto api antonio 
       consiglieri.get(i).setVoti(0); 
       db3.update(consiglieri.get(i).getIndice(), consiglieri.get(i).getVoti()); 
      } 
     } 

    } 

    public void onBackPressed() { 

    } 

    @Override 
    public void onClick(View v) { 

    } 

} 
+1

Вы можете посмотреть на трассировки стека, и это позволит вам номер строки, где ошибка. – rghome

ответ

2

проблема заключается здесь:

public void onClick(View v) { 
     consiglieri.get(v.getId()).setVoti(
       consiglieri.get(v.getId()).getVoti() + 1); 

вы используете v.getId() проиндексировать ваш ArrayList. Поскольку вы явно не устанавливая идентификатор для bottone1, v.getId() возвращается значение по умолчанию, -1, следовательно ArrayIndexOutOfBoundsException

+2

Хорошие раскопки :) –

+0

Большое вам спасибо! Я написал bottone1.setId (i), и он работает Хорошего дня: D – Theme

+0

приветствуются – Blackbelt