Autore Topic: Passaggio String[ ] da una classe all'altra per creare ListView  (Letto 717 volte)

Offline rik194

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
    • Galassia Android
  • Dispositivo Android:
    Galaxy Nexus
  • Play Store ID:
    rik194
  • Sistema operativo:
    Ubuntu 12.04
Passaggio String[ ] da una classe all'altra per creare ListView
« il: 20 Luglio 2013, 15:52:19 CEST »
0
Salve a tutti ragazzi, sono nuovo, volevo chiedervi se voi riuscite a risolvere questo banalissimo problema.
Il mio intento è di riempire una array di String leggendo da un file le righe (fin qui ci riesco tranquillamente) e poi passarlo ad una seconda classe in modo da riempirne la ListView.

Questa è la classe dove riempio l'array di string (ALunedi)
Codice (Java): [Seleziona]
package com.rik194.abcschool;



import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Scanner;

import android.app.AlertDialog;
import android.app.TabActivity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.ContextMenu;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.TabHost;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;

public class Orario extends TabActivity {
       
        //Inserisco il menu
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
                // Inflate the menu; this adds items to the action bar if it is present.
                MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.abcschool, menu);
            return true;
        }
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
            case R.id.action_settings:
                Intent impostazioni = new Intent(this, Impostazioni.class);
                this.startActivity(impostazioni);
              break;
            case R.id.info:
                Intent info = new Intent(this, Info.class);
                this.startActivity(info);
              break;
            case R.id.supporto:
              Intent supporto = new Intent(this, Supporto.class);
                this.startActivity(supporto);
              break;
            case R.id.home:
                      Intent home = new Intent(this, ABCSchool.class);
                        this.startActivity(home);  
                      break;
            default:
              break;
            }

            return true;
          }
       
        //inizio classe vera e propria
       
        private String[] giorni = { "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato", "Domenica"};
           
        private File sd = Environment.getExternalStorageDirectory();
        private String path= sd.getAbsolutePath() +"/ABC_School/";
    private File f = new File(path);
        private ArrayAdapter<String> listAdapter;
        private ArrayAdapter<String> listLezioni;
        private ArrayAdapter<String> listLezioni1;
        private ListView ListLezioni;  
        private String stringalettura;
        private String acgiorno;
        private String acmateria;
        private String acorainizio;
        private String acmininizio;
        private String acorafine;
        private String acminfine;
        private TimePicker orainizio;
        private TimePicker orafine;
        private int oreinizio;
        private int mininizio;
        private int orefine;
        private int minfine;
        private String[] ALunedi;
        private String[] AMartedi;
        private String[] lezioni;
    public int cont=0;
    public int conta=0;



   
   
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_orario);
                    ListLezioni = (ListView) findViewById( R.id.listViewLezioni);
                //lavoro su file materie per spinner
                        contaRigheFileMaterie();
                        String[] materie=new String[cont];
                        leggiDaFileMaterie(materie);
                        ArrayList<String> planetList = new ArrayList<String>();  
                    planetList.addAll( Arrays.asList(materie) );  
                    //Lunedì Lezioni
                    //
                    listAdapter = new ArrayAdapter<String>(this, R.layout.array_lezioni, planetList);  
                    //lavoro su file lezioni per spinner
                    contaRigheFileLezioni();
                    lezioni=new String[conta];
                    ALunedi=new String[conta];
                    AMartedi=new String[conta];
                    leggiDaFileLezioni(lezioni,ALunedi,AMartedi);
                    ArrayList<String> lessonList = new ArrayList<String>();
                    lessonList.addAll(Arrays.asList(lezioni));
                    listLezioni = new ArrayAdapter<String>(this, R.layout.array_lezioni, lessonList);              
                   
                    TabHost tabHost = (TabHost) findViewById(android.R.id.tabhost); // The activity TabHost

                        TabHost.TabSpec spec; // Resusable TabSpec for each tab

                        Intent intent; // Reusable Intent for each tab

                        intent = new Intent().setClass(this, Lunedi.class);
                        spec = tabHost.newTabSpec("tab1").setIndicator("Lunedì").setContent(intent);
                        tabHost.addTab(spec);
                        intent = new Intent().setClass(this, Martedi.class);
                        spec = tabHost.newTabSpec("tab2").setIndicator("Martedì").setContent(intent);
                        tabHost.addTab(spec);
                        intent = new Intent().setClass(this, Mercoledi.class);
                        spec = tabHost.newTabSpec("tab3").setIndicator("Mercoledì").setContent(intent);
                        tabHost.addTab(spec);
                        intent = new Intent().setClass(this, Giovedi.class);
                        spec = tabHost.newTabSpec("tab4").setIndicator("Giovedì").setContent(intent);
                        tabHost.addTab(spec);
                        intent = new Intent().setClass(this, Venerdi.class);
                        spec = tabHost.newTabSpec("tab5").setIndicator("Venerdì").setContent(intent);
                        tabHost.addTab(spec);
                        intent = new Intent().setClass(this, Sabato.class);
                        spec = tabHost.newTabSpec("tab6").setIndicator("Sabato").setContent(intent);
                        tabHost.addTab(spec);
                        intent = new Intent().setClass(this, Domenica.class);
                        spec = tabHost.newTabSpec("tab7").setIndicator("Domenica").setContent(intent);
                        tabHost.addTab(spec);
                        for(int i=0;i<7;i++)
                                tabHost.getTabWidget().getChildAt(i).setLayoutParams(new LinearLayout.LayoutParams(200,100));
                        tabHost.setCurrentTabByTag("tab1");
                    }
       
        public void refresh() {

                super.finish();
                Intent intent = new Intent(this, Orario.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
                intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                startActivity(intent);

}
        public void EliminaDaFileLezioni(String stringalettura){
                try {
                        File temp = File.createTempFile("temp",".txt");

                        //Apro il file reale in lettura e scrivo quello temporaneo
                BufferedWriter out = new BufferedWriter(new FileWriter(temp));
                PrintWriter pw = new PrintWriter(out,true);
                BufferedReader in = new BufferedReader(new FileReader(path+"lezioni.txt"));
                               
                //scandisco le righe del file e non considero la rew String[5];iga che voglio eliminare
                String linea = in.readLine();
                while (linea != null) {
                                if (!linea.equals(stringalettura)) {
                                        pw.println(linea);
                                }
                                linea = in.readLine();
               }

                in.close();
                out.flush();
                out.close();
                pw.close();
 
                //Apro il file temporaneo in lettura e aggiorno quello reale
                BufferedWriter wr = new BufferedWriter(new FileWriter(path+"lezioni.txt"));
                PrintWriter prw = new PrintWriter(wr,true);
                BufferedReader br = new BufferedReader(new FileReader(temp));
                String linear = br.readLine();
                while (linear != null) {
                                        prw.println(linear);
                                linear = br.readLine();
               }
               
               br.close();
               wr.flush();
               wr.close();
               prw.close();

               
               
            } catch (IOException e) {
            }
       
        }
        //Metodo per leggere da file
        public int contaRigheFileMaterie(){

                if(f.exists())  
        {
               
        try {
                  FileInputStream fis=new FileInputStream(path+"materie.txt");
                  InputStreamReader isr=new InputStreamReader(fis);
                  BufferedReader br=new BufferedReader(isr);
                  while(br.readLine()!=null)
                  {
                          cont++;
              }  
          fis.close();
              }
               
       
        catch (IOException e) {
            //You'll need to add proper error handling here
        }
        }
                return cont;
       
}

        public void leggiDaFileMaterie(String[] materie){
                if(f.exists())  
        {
               
        try {
                  FileInputStream fis=new FileInputStream(path+"materie.txt");
                  InputStreamReader isr=new InputStreamReader(fis);
                  BufferedReader br=new BufferedReader(isr);
                  for(int i=0;i<cont;i++)
                  {
                          materie[i]=br.readLine();
              }  
          fis.close();
              }
               
       
        catch (IOException e) {
            //You'll need to add proper error handling here
        }
        }
               
        }
       
        public int contaRigheFileLezioni(){

                if(f.exists())  
        {
               
        try {
                  FileInputStream fis=new FileInputStream(path+"lezioni.txt");
                  InputStreamReader isr=new InputStreamReader(fis);
                  BufferedReader br=new BufferedReader(isr);
                  while(br.readLine()!=null)
                  {
                          conta++;
              }  
          fis.close();
              }
               
       
        catch (IOException e) {
            //You'll need to add proper error handling here
        }
        }
                return conta;
       
        }
       
        public void leggiDaFileLezioni(String[] lezioni, String[] ALunedi ,String[] AMartedi){
                if(f.exists())  
        {
               
        try {
                  FileInputStream fis=new FileInputStream(path+"lezioni.txt");
                  InputStreamReader isr=new InputStreamReader(fis);
                  BufferedReader br=new BufferedReader(isr);
                 
                  for(int i=0;i<conta;i++)
                  {
                          lezioni[i]=br.readLine();
                          String[] tokens=lezioni[i].toString().split("/");
                          if(tokens[0].equals("Lunedì"))
                          {
                                            ALunedi[i]=tokens[1];
                          }
                          if(tokens[0].equals("Martedì"))
                          {
                                        AMartedi[i]=tokens[1];
                          }
                         
                         
              }  
          fis.close();
          isr.close();
          br.close();
              }
               
       
        catch (IOException e) {
            //You'll need to add proper error handling here
        }
        }
        }

        //Metodo per scrivere su file
         public void scriviSuFileLezioni (String acgiorno, String acmateria, String acorainizio, String acmininizio, String acorafine, String acminfine){
                 if (!f.exists())
                 {
                        f.mkdirs();
                        try
                        {
                                f.createNewFile();
                        }
                        catch (IOException e)
                        {
                                Log.e("ERRORE","Errore creazione file:"+e.toString());
                        }
                }
                   try{
                             FileOutputStream file = new FileOutputStream(path+"lezioni.txt",true);
                     PrintStream Output = new PrintStream(file);
                     Output.println(acgiorno+"/"+acmateria+"-"+acorainizio+":"+acmininizio+"---"+acorafine+":"+acminfine);
                     file.close();
                     
                }
                    catch (IOException e) {      
                    e.printStackTrace();
                    }
                }
         
        //Gestisco il click sul bottone per aggiungere una lezione
        public void BottoneAggLezione(View view) {
               
                orainizio = new TimePicker(this);
                orafine = new TimePicker(this);
                orainizio.setIs24HourView(true);
                orafine.setIs24HourView(true);
               
                final Calendar c = Calendar.getInstance();
                oreinizio=c.get(Calendar.HOUR_OF_DAY);
                orefine=c.get(Calendar.HOUR_OF_DAY);
                mininizio=c.get(Calendar.MINUTE);
                minfine=c.get(Calendar.MINUTE);
               
                orainizio.setCurrentHour(oreinizio);
                orainizio.setCurrentMinute(mininizio);
                orafine.setCurrentHour(orefine);
                orafine.setCurrentMinute(minfine);

                 
                AlertDialog.Builder editalert = new AlertDialog.Builder(this);

                editalert.setTitle("Aggiungi Lezione");
                editalert.setMessage("Inserisci la nuova lezione");
                final ArrayAdapter<String> adpgiorni = new ArrayAdapter<String>(Orario.this,
                    R.layout.array_lezioni, giorni);
                final Spinner sp = new Spinner(Orario.this);
                sp.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
            sp.setAdapter(adpgiorni);
            sp.setGravity(Gravity.CENTER);
            final Spinner spmaterie = new Spinner(Orario.this);
                spmaterie.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
            spmaterie.setAdapter(listAdapter);
            spmaterie.setGravity(Gravity.CENTER);
            LinearLayout lila1= new LinearLayout(this);
            lila1.setOrientation(1); //1 is for vertical orientation
            final TextView giorno =new TextView(this);
            giorno.setText("Scegli il giorno");
            giorno.setGravity(Gravity.CENTER);
            final TextView materia =new TextView(this);
            materia.setText("Scegli la materia");
            materia.setGravity(Gravity.CENTER);
            lila1.addView(giorno);
            lila1.addView(sp);
            lila1.addView(materia);
            lila1.addView(spmaterie);
            lila1.setGravity(Gravity.CENTER);
           
            final AlertDialog.Builder alertorainizio = new AlertDialog.Builder(this);
           
            final AlertDialog.Builder alertorafine = new AlertDialog.Builder(this);

            alertorafine.setTitle("Aggiungi Lezione");
                alertorafine.setMessage("Inserisci l'ora di fine lezione");
                alertorafine.setView(orafine);
                alertorainizio.setTitle("Aggiungi Lezione");
                alertorainizio.setMessage("Inserisci l'ora d'inizio lezione");
                alertorainizio.setView(orainizio);
                editalert.setView(lila1);
                editalert.setPositiveButton("Continua", new DialogInterface.OnClickListener() {
                   

                        public void onClick(DialogInterface dialog, int whichButton) {
                        //Scrivo su file la materia inserita
                               
                        acgiorno=sp.getSelectedItem().toString();
                        acmateria=spmaterie.getSelectedItem().toString();
                               
                                alertorainizio.setPositiveButton("Continua", new DialogInterface.OnClickListener() {

                                       
                                        public void onClick(DialogInterface arg0, int arg1) {
                                                // TODO Auto-generated method stub
                                                acorainizio=orainizio.getCurrentHour().toString();
                                                acmininizio=orainizio.getCurrentMinute().toString();
                                               
                                                alertorafine.setPositiveButton("Aggiungi", new DialogInterface.OnClickListener() {
                                                        public void onClick(DialogInterface arg0, int arg1) {
                                                               
                                                                acorafine=orafine.getCurrentHour().toString();
                                                                acminfine=orafine.getCurrentMinute().toString();
                                                                scriviSuFileLezioni(acgiorno,acmateria,acorainizio,acmininizio,acorafine,acminfine);
                                                                Context context = getApplicationContext();
                                                        int duration = Toast.LENGTH_SHORT;
                                                                Toast toast = Toast.makeText(context, "Aggiunta", duration);
                                                        toast.setGravity(Gravity.BOTTOM, 0, 0);
                                                        toast.show();
                                                        refresh();
                                                               
                                                }
                                                });
                                                alertorafine.show();
                                               
                                        }
                                       
                                });
                                alertorainizio.show();
                    }
                });
                editalert.setNegativeButton("Annulla", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {

                    }
                });


                editalert.show();
    }
       
        //Gestisco il click sul bottone per rimuovere una materia
        public void BottoneRimLezione(View view){
                AlertDialog.Builder editalert = new AlertDialog.Builder(this);

                editalert.setTitle("Rimuovi Lezione");
                editalert.setMessage("Quale lezione vuoi eliminare?");
               
                final Spinner splezioni = new Spinner(Orario.this);
                 splezioni.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
                    splezioni.setAdapter(listLezioni);
               
                LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.FILL_PARENT);
                splezioni.setLayoutParams(lp);
                editalert.setView(splezioni);
                editalert.setPositiveButton("Rimuovi", new DialogInterface.OnClickListener() {
                   
                       


                        public void onClick(DialogInterface dialog, int whichButton) {
                                stringalettura=splezioni.getSelectedItem().toString();
                                EliminaDaFileLezioni(stringalettura);
                    //Stampo a video rimossa
                        Context context = getApplicationContext();
                        int duration = Toast.LENGTH_SHORT;
                        Toast toast = Toast.makeText(context, "Rimossa", duration);
                        toast.setGravity(Gravity.BOTTOM, 0, 0);
                        toast.show();
                        refresh();
                    }
                });
                editalert.setNegativeButton("Annulla", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {

                    }
                });


                editalert.show();
        }
       

}      

Mentre questa è la classe dove dovrei passargli l'array di String "pieno" in modo da visualizzarne gli elementi in una ListView:

Codice (Java): [Seleziona]
package com.rik194.abcschool;

import java.util.ArrayList;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.Gravity;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;


public class Lunedi extends Activity{
        public void onCreate(Bundle savedInstanceState)
                        {
                                        super.onCreate(savedInstanceState);
                                       setContentView(R.layout.activity_lunedi);
                                       ListView listView = (ListView)findViewById(R.id.listViewLunedi);
                                       Orario o = new Orario();
                                       //String[] values = //Qui devo passargli l'array di string della classe Orario che si chiama ALunedi
                                            ArrayList<String> list = new ArrayList<String>();
                                            for (int i = 0; i < values.length; ++i) {
                                              list.add(values[i]);
                                            }
                                            ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                                                android.R.layout.simple_list_item_1, list);
                                            listView.setAdapter(adapter);

                                     //  Orario o = new Orario();
                                       //listView.setAdapter(o.getALunedi());
                        }

}


L'errore che mi restituisce sta (almeno a quanto ho capito io) nel fatto che una volta che provo a passargli l'array (ad esempio con una Get() ) si svuota magicamente e l'applicazione si blocca in modo anomalo. Infatti ho provato a crearne un'altro a caso che però riempivo io direttamente e poi passandoglielo, arrivavo "pieno" a destinazione.... :( :(

Confido nel vostro aiuto :D

Offline vincenzoc

  • Utente junior
  • **
  • Post: 148
  • Respect: +47
    • Google+
    • cerminarav
    • Mostra profilo
    • Mie applicazioni sul Play Store
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Vincenzo Cerminara
  • Sistema operativo:
    Arch Linux
Re:Passaggio String[ ] da una classe all'altra per creare ListView
« Risposta #1 il: 27 Luglio 2013, 13:05:09 CEST »
0
Ciao rik194,

Poi sfruttare il putExtra(String name, String[] value) della classe Intent quando avvii la classe Lunedi per inviare l'array e prelevarlo poi all'interno di Lunedi con getIntent() e getStringArray(String name) come mostrato in questa discussione  :-)
Ringrazia chi ti aiuta sul forum con l'apposito pulsante :P
Scarica Yazzy

Offline rik194

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
    • Galassia Android
  • Dispositivo Android:
    Galaxy Nexus
  • Play Store ID:
    rik194
  • Sistema operativo:
    Ubuntu 12.04
Re:Passaggio String[ ] da una classe all'altra per creare ListView
« Risposta #2 il: 27 Luglio 2013, 13:21:56 CEST »
0
Grazie mille ho risolto usando un file temporaneo da cui vado a leggere i valori che gli passo :) grazie della risposta, userò questo metodo in futuro :)

Inviato dal mio Galaxy Nexus con Tapatalk 2


Offline vincenzoc

  • Utente junior
  • **
  • Post: 148
  • Respect: +47
    • Google+
    • cerminarav
    • Mostra profilo
    • Mie applicazioni sul Play Store
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Vincenzo Cerminara
  • Sistema operativo:
    Arch Linux
Re:Passaggio String[ ] da una classe all'altra per creare ListView
« Risposta #3 il: 01 Agosto 2013, 18:50:28 CEST »
0
Perfetto!
Contrassegna il topic come risolto  :-P
Ringrazia chi ti aiuta sul forum con l'apposito pulsante :P
Scarica Yazzy