Autore Topic: Problema passaggio dati tra Activity e ArrayList  (Letto 360 volte)

Offline bakiko

  • Utente junior
  • **
  • Post: 74
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC One
  • Sistema operativo:
    Windows 7
Problema passaggio dati tra Activity e ArrayList
« il: 29 Giugno 2014, 13:45:00 CEST »
0
Salve ragazzi ho un problema molto strano.Praticamente passo un intero tra due activity (perchè ho problemi a passare l'arraylist).
La seconda activity, letto l'intero inizializza l' arraylist, ed è qui che nasce il problema (chiusura forzata dell'app). Non riesco a capire se è un problema dell'activity, dell'arraylist o altro.Vi posto un po di codice ed il relativo logcat:

Questa è la seconda activity, che inizializza l'arraylist a seconda dell intero ricevuto:
Codice (Java): [Seleziona]
protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_regione_provincie);
                Intent intent=getIntent();
                Bundle bundle=intent.getExtras();
                code=bundle.getInt("code");
                switch(code){
                case 1:
                        this.setTitle("Province del Piemonte");
                        lista2=this.setPiemonte();break;
                case 2:
                        this.setTitle("Province della Lombardia");
                        lista2=this.setLombardia();break;
                case 3:
                        this.setTitle("Province del Trentino");
                        lista2=this.setTrentino();break;
                case 4:
                        this.setTitle("Province del Veneto");
                        lista2=this.setVeneto();break;
                }
               
                datiAdapter=new AdapteRegioni(this,R.layout.activity_regione_provincie,lista2);
                ((ListView)findViewById(R.id.listRegioniProvincie)).setAdapter(datiAdapter);
}

private ArrayList<DatiRegione> setPiemonte(){
                ArrayList<DatiRegione> regione=new ArrayList<DatiRegione>();
                regione.add(new DatiRegione("Torino",1));
                regione.add(new DatiRegione("Vercelli",2));
                regione.add(new DatiRegione("Novara",3));
                regione.add(new DatiRegione("Cuneo",4));
                regione.add(new DatiRegione("Asti",5));
                regione.add(new DatiRegione("Alessandria",6));
                regione.add(new DatiRegione("Biella",96));
                regione.add(new DatiRegione("Verbanio-Cusio-Ossola",103));
                return regione;
        }

        private ArrayList<DatiRegione> setLombardia(){
                ArrayList<DatiRegione> regione=new ArrayList<DatiRegione>();
                regione.add(new DatiRegione("Varese",12));
                regione.add(new DatiRegione("Como",13));
                regione.add(new DatiRegione("Sandrio",14));
                regione.add(new DatiRegione("Milano",15));
                regione.add(new DatiRegione("Bergamo",16));
                regione.add(new DatiRegione("Brescia",17));
                regione.add(new DatiRegione("Pavia",18));
                regione.add(new DatiRegione("Cremona",19));
                regione.add(new DatiRegione("Mantova",20));
                regione.add(new DatiRegione("Lecco",97));
                regione.add(new DatiRegione("Lodi",98));
                regione.add(new DatiRegione("Monza e della Brianzia",108));
                return regione;
        }

        private ArrayList<DatiRegione> setTrentino(){
                ArrayList<DatiRegione> regione=new ArrayList<DatiRegione>();
                regione.add(new DatiRegione("Bolzano",21));
                regione.add(new DatiRegione("Trento",22));
                return regione;
        }

        private ArrayList<DatiRegione> setVeneto(){
                ArrayList<DatiRegione> regione=new ArrayList<DatiRegione>();
                regione.add(new DatiRegione("Verona",23));
                regione.add(new DatiRegione("Vicenza",24));
                regione.add(new DatiRegione("Belluno",25));
                regione.add(new DatiRegione("Treviso",26));
                regione.add(new DatiRegione("Venezia",27));
                regione.add(new DatiRegione("Padova",28));
                regione.add(new DatiRegione("Rovigo",29));
                return regione;
        }


Questo è invece il logcat:
Codice (Java): [Seleziona]
06-29 13:31:10.996: E/AndroidRuntime(23106): java.lang.IndexOutOfBoundsException: Invalid index 11, size is 5
06-29 13:31:10.996: E/AndroidRuntime(23106):    at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
06-29 13:31:10.996: E/AndroidRuntime(23106):    at java.util.ArrayList.get(ArrayList.java:308)
06-29 13:31:10.996: E/AndroidRuntime(23106):    at com.programming.domain.AdapteRegioni.getItemId(AdapteRegioni.java:69)
06-29 13:31:10.996: E/AndroidRuntime(23106):    at android.widget.AbsListView.onSaveInstanceState(AbsListView.java)
06-29 13:31:10.996: E/AndroidRuntime(23106):    at android.view.View.dispatchSaveInstanceState(View.java)
06-29 13:31:10.996: E/AndroidRuntime(23106):    at android.view.ViewGroup.dispatchFreezeSelfOnly(ViewGroup.java)
06-29 13:31:10.996: E/AndroidRuntime(23106):    at android.widget.AdapterView.dispatchSaveInstanceState(AdapterView.java)
06-29 13:31:10.996: E/AndroidRuntime(23106):    at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java)
06-29 13:31:10.996: E/AndroidRuntime(23106):    at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java)
06-29 13:31:10.996: E/AndroidRuntime(23106):    at android.view.View.saveHierarchyState(View.java)
06-29 13:31:10.996: E/AndroidRuntime(23106):    at com.android.internal.policy.impl.PhoneWindow.saveHierarchyState(PhoneWindow.java)
06-29 13:31:10.996: E/AndroidRuntime(23106):    at android.app.Activity.onSaveInstanceState(Activity.java)
06-29 13:31:10.996: E/AndroidRuntime(23106):    at android.app.Activity.performSaveInstanceState(Activity.java)
06-29 13:31:10.996: E/AndroidRuntime(23106):    at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java)
06-29 13:31:10.996: E/AndroidRuntime(23106):    at android.app.ActivityThread.performStopActivityInner(ActivityThread.java)
06-29 13:31:10.996: E/AndroidRuntime(23106):    at android.app.ActivityThread.handleStopActivity(ActivityThread.java)
06-29 13:31:10.996: E/AndroidRuntime(23106):    at android.app.ActivityThread.access$1000(ActivityThread.java)
06-29 13:31:10.996: E/AndroidRuntime(23106):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java)
06-29 13:31:10.996: E/AndroidRuntime(23106):    at android.os.Handler.dispatchMessage(Handler.java)
06-29 13:31:10.996: E/AndroidRuntime(23106):    at android.os.Looper.loop(Looper.java)
06-29 13:31:10.996: E/AndroidRuntime(23106):    at android.app.ActivityThread.main(ActivityThread.java)
06-29 13:31:10.996: E/AndroidRuntime(23106):    at java.lang.reflect.Method.invokeNative(Native Method)
06-29 13:31:10.996: E/AndroidRuntime(23106):    at java.lang.reflect.Method.invoke(Method.java:515)
06-29 13:31:10.996: E/AndroidRuntime(23106):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)
06-29 13:31:10.996: E/AndroidRuntime(23106):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
06-29 13:31:10.996: E/AndroidRuntime(23106):    at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:126)
06-29 13:31:10.996: E/AndroidRuntime(23106):    at dalvik.system.NativeStart.main(Native Method)

Grazie a tutti per la collaborazione...

Offline CrotaNexus

  • Utente normale
  • ***
  • Post: 156
  • Vuolsi così colà dove si puote ciò che si vuole
  • Respect: +25
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    SimoneDev
  • Sistema operativo:
    Windows 8.1
Re:Problema passaggio dati tra Activity e ArrayList
« Risposta #1 il: 29 Giugno 2014, 13:50:56 CEST »
+1
Quel tipo di errore (IndexOutOfBoundException) lo ricevi quando hai un array e stai accedendo ad un indice che non esiste o meglio, nel tuo caso specifico stai accedendo all'indice 11 quando l'array contiene solo 5 elementi.
SimoneDev @ Google Play Store

Offline bakiko

  • Utente junior
  • **
  • Post: 74
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC One
  • Sistema operativo:
    Windows 7
Re:Problema passaggio dati tra Activity e ArrayList
« Risposta #2 il: 29 Giugno 2014, 15:39:45 CEST »
0
Quel tipo di errore (IndexOutOfBoundException) lo ricevi quando hai un array e stai accedendo ad un indice che non esiste o meglio, nel tuo caso specifico stai accedendo all'indice 11 quando l'array contiene solo 5 elementi.

Perfetto grazie mille. Io non riuscivo a capire proprio il motivo di tale problema, infatti pensavo fosse un problema di activity...Grazie

EDIT: Niente ragazzi non riesco proprio a capire il problema. Metto 5 elementi nell arrayList e dopo il passaggio di activity mi esce sempre lo stesso errore (di accedere alla posizione 11, cosa che non faccio), quando tento di accedere ad uno dei 5 elementi. Ho provato a distruggere la prima activity ma niente. La cosa strana è che se lo faccio in una semplice activity tutto funziona. Il problema nasce quando faccio il passaggio tra le due activity.Posto anche la classe adapter, forse devo apportare qualche modifica:
Codice (Java): [Seleziona]
public AdapterRegioni(Context context, int textViewResourceId,List<DatiRegione> objects){
                 arrayPost=(ArrayList<DatiRegione>) objects;
                 layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                 myTypeface = Typeface.createFromAsset(context.getAssets(),"HelveticaNeue.ttf");
        }
       
        @Override
         public View getView(int position, View convertView, ViewGroup parent) {
                View v = convertView;
                 ViewHolder holder;
               
                if (v == null){
                        v=layoutInflater.inflate(R.layout.activity_regione, null);
                        holder= new ViewHolder();
                        holder.luogo = (TextView) v.findViewById(R.id.provincia);
                        holder.luogo.setTypeface(myTypeface);
                        holder.luogo.setTextSize(TypedValue.COMPLEX_UNIT_SP, 30);
                        v.setTag(holder);
                }
                else
                        holder=(ViewHolder)v.getTag();
               
                DatiRegione post = arrayPost.get(position);
                holder.luogo.setText(post.getNome());
               
                return v;
        }
       
        static class ViewHolder {
        TextView luogo;
    }

        @Override
        public int getCount() {
                // TODO Auto-generated method stub
                return arrayPost.size();
        }

        @Override
        public Object getItem(int arg0) {
                // TODO Auto-generated method stub
                return arrayPost.get(arg0);
        }

        @Override
        public long getItemId(int position) {
                // TODO Auto-generated method stub
                return arrayPost.get(position).hashCode();
        }
}

Grazie mille ragazzi..
« Ultima modifica: 30 Giugno 2014, 01:41:09 CEST da bakiko »