Autore Topic: Comparare un elemento di una array di stringhe con una stringa  (Letto 357 volte)

Offline ValerioAdo

  • Utente normale
  • ***
  • Post: 323
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Huawei Ascend g525
  • Sistema operativo:
    windows 8.1
Comparare un elemento di una array di stringhe con una stringa
« il: 22 Dicembre 2014, 17:00:52 CET »
0
Salve a tutti!

Io ho il seguente codice:
Codice (Java): [Seleziona]
    ImageButton back;
    Button partenza,show;
    ListView listView;
    String Scelti="",appoggio="";
    String[] selezionati = new String[]{"","","","","","","",""};

    int i=0,j=8;

    String[] values = new String[]{"Agriturismo Da Redeo","Agriturismo Airone Blu",
            "Az.Agricola Il Filare","Albergo-Ristorante Il capriolo","Albergo-Ristorante Chalet Pineta",
            "B&B Ai Quattro Gatti","B&B Agriturismo Petrarosa","B&B Lino, Libri e Rose",
            "B&B Il Borgo","B&B La Rupe","B&B Case Mazza", "B&B Sommariva",
            "Castagneto","La Corte Bonomini", "B&B Mandala",

            "Museo Storico della Resistenza",
            "Museo Storico dei Lucchetti", "Museo Uomo-Ambiente","Collezione Civica Arte Contemporanea",
            "Casa-Museo Bruno Bricoli (Colibri)", "Pieve di S.Ambrogio","Pieve di Sasso","Pieve di Scurano",

            "Parco Provinciale del Monte Fuso","Lago di Scurano", "Piscina di Campora","Piscina di Scurano",


            "Caseificio Sociale Campora e Sasso","Caseificio S.Cassiano Scurano"
            , "Caseificio Sociale di Urzano","Az. Agricola La Villa","Latteria Sociale di Bazzano",
            "Salumificio Molinetto","Salumificio Delsante Dalmazio & C.","Salumificio S. Ambrogio",
            "Salumificio Rossi & C.","Panificio Monte Fuso","Panificio Bazzano", "Az. Agricola Mazzali Emily","Panificio Mora S.A.S.",


            "Il Capriolo","Chalet Pineta","Trattoria Corradi",
            "Agriturismo La Piana dei Sambuchi","Trattoria Mazzini","Trattoria Tarasconi"
            ,"Locanda Sport","Bar Trattoria da Poldo","Ristorante Pizzeria La Cava",
            "Trattoria La Pieve","Trattoria Pizzeria La Corte","Tana del Luppolo",
            "Ristorante del Parco Monte Fuso","Il Filare",

            "Ufficio Informazioni Turistiche/Parco Monte Fuso","Biblioteca Comunale", "Farmacia Comunale di Scurano","Farmacia Maturo"
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.itinerario);

        // Get ListView object from xml
        listView = (ListView) findViewById(R.id.listView);



        BubbleSort(values);

        back=(ImageButton) findViewById(R.id.Back);
        partenza=(Button) findViewById(R.id.parti);
        show=(Button) findViewById(R.id.Show);

        TextView title=(TextView) findViewById(R.id.Titolo);

        if(Lingua.ita==1 ||Lingua.eng==0){
            title.setText("Itinerario Personalizzato");
        }
        if(Lingua.ita==0||Lingua.eng==1){
            title.setText("Customized Itinerary");
        }


        back.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        // Define a new Adapter
        // First parameter - Context
        // Second parameter - Layout for the row
        // Third parameter - ID of the TextView to which the data is written
        // Forth - the Array of data

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.rowitinerariopersonalizzato,
                R.id.Nome, values);



        // Assign adapter to ListView
        listView.setAdapter(adapter);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                if (j == 0) {
                    Toast.makeText(Itinerario.this, "Numero massimo di elementi raggiunto", Toast.LENGTH_LONG);
                } else {

                    appoggio = (String) listView.getItemAtPosition(position);

                    for (int m = 0; m < 8; m++) {
                        if (selezionati[m].matches(appoggio)) {

                            final AlertDialog.Builder miaAlert = new AlertDialog.Builder(Itinerario.this);
                            miaAlert.setMessage("Lo vuoi cancellare?");
                            miaAlert.setTitle("Elemento già nella lista");

                            miaAlert.setCancelable(false);
                            miaAlert.setPositiveButton("Si", new DialogInterface.OnClickListener() {

                                public void onClick(DialogInterface dialog, int id) {

                                    String parts[]=Scelti.split(",");
                                    Scelti="";

                                    for(int f=0;f<8;f++){
                                        if(parts[f].matches(appoggio)){
                                            parts[f]="";
                                            int ii=f;
                                            for(;ii<7;i++){
                                                parts[ii]=parts[ii+1];
                                            }
                                        }
                                        Scelti+=","+parts[f];
                                    }
                                }
                            });

                            miaAlert.setNegativeButton("No", new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int id) {

                                }
                            });


                            AlertDialog alert = miaAlert.create();
                            alert.show();
                        }
                    }
                    selezionati[j]=appoggio;

                    Scelti += "," + appoggio;
                    j--;
                    partenza.setText("Disponibili:"+j);

                }
            }
        });

ed il seguente logcat:
Codice: [Seleziona]
12-22 15:53:15.378      890-890/com.example.adorni.turisticapp E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.ArrayIndexOutOfBoundsException: length=8; index=8
            at com.example.adorni.turisticapp.Itinerario$2.onItemClick(Itinerario.java:118)
            at android.widget.AdapterView.performItemClick(AdapterView.java:298)
            at android.widget.AbsListView.performItemClick(AbsListView.java:1100)
            at android.widget.AbsListView$PerformClick.run(AbsListView.java:2749)
            at android.widget.AbsListView$1.run(AbsListView.java:3423)
            at android.os.Handler.handleCallback(Handler.java:725)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5041)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
            at dalvik.system.NativeStart.main(Native Method)

ora... io vorrei confrontare uno degli elementi di "selezionati" con "appoggio"

selezionati mi serve per contrallare se uno degli elementi della listView è già stato selezionato, appoggio è dove verrò inserito l'elemento da controllare.

Però se uso un .equals il logcat mi da un errore di tipo "Null", se invece uso .matches mi da il logcat che ho inserito sopra.

Suggerimenti?

grazie in anticipo e spero di essere stato chiaro

Offline LinkOut

  • Utente normale
  • ***
  • Post: 272
  • Respect: +38
    • Mostra profilo
  • Dispositivo Android:
    Xiaomi Mi5
Re:Comparare un elemento di una array di stringhe con una stringa
« Risposta #1 il: 22 Dicembre 2014, 17:30:47 CET »
0
ArrayIndexOutOfBoundsException è abbastanza chiaro come errore, indica che hai cercato di accedere all'arrey, ad un indice illegible.

1 - Perchè l'indice è negativo
2 - Perchè si cerca di accedere all'array ad un indice maggiore della sua stessa lunghezza. (mi sa che è questo il tuo caso)