CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: complicazio con ben 2 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: 9mm con ben 11 Thanks ricevuti negli ultimi sette giorni
Utente del mese: 9mm con ben 34 Thanks ricevuti nell'ultimo mese

Pagina 1 di 2 12 ultimoultimo
Ultima pagina
Visualizzazione dei risultati da 1 a 10 su 15
Discussione:

Passaggio parametri tra Activity

Se questa discussione ti č stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Senior Droid


    Registrato dal
    Jan 2012
    Messaggi
    304
    Smartphone
    LG G6

    Ringraziamenti
    76
    Ringraziato 3 volte in 3 Posts
    Predefinito

    Passaggio parametri tra Activity

    Ho un problema grande, nella mia applicazione vorrei usare un menł con una voce in cui cliccando faccio una scansione delle reti wifi usando una
    List<ScanResult> in cui memorizzo i risultati, poi vorrei avviare dal menł un' altra activity che ottiene quella lista, e la usa per elaborare l' arrayadapter per la ListView in cui visualizzare l' elenco delle reti. Il problema č che tra gli intent il metodo putExtras non č compatibile, o meglio i parametri non supportano la List<ScanResult>, e non so come rendere Serializable una struttura dati di default. C' č un modo per passare questo oggetto List<ScanResult> ? Ho provato creando un oggetto di tipo:

    codice:
    Progetto element=new Progetto()
    con cui accedere alle variabili di istanza dall' altra activity, ma ovviamente i valori restano a null....

  2.  
  3. #2
    Baby Droid


    Registrato dal
    Sep 2012
    Messaggi
    41

    Ringraziamenti
    3
    Ringraziato 3 volte in 3 Posts
    Predefinito

    nel tuo intent inserisci alla fine un .putExtras(parametro da passare)

  4. Il seguente Utente ha ringraziato tabita90 per il post:

    Darčios89 (09-09-12)

  5. #3
    Senior Droid L'avatar di frank17next


    Registrato dal
    Jan 2010
    Localitą
    Campobasso
    Messaggi
    739
    Smartphone
    GNexus, Galaxy Note, GT 10.1

    Ringraziamenti
    16
    Ringraziato 143 volte in 102 Posts
    Predefinito

    Ciao,
    Devi implementare una interfaccia di parcellizzazione per passare oggetti complessi.
    Prova a dare 1 occhio a questo (ottimo) esempio http://androidideasblog.blogspot.it/...tween.html?m=1

    Inviato dal mio Galaxy Nexus con Tapatalk 2
    Nexus 6 - 5.0.1 Stock
    Nexus 5 - 5.0.1 Stock + Root
    Galaxy Note 3 GT-N9005 - 4.4.4 Stock + Root
    Galaxy Tab 10.1 Slim P7500 - [JB] CyanogenMod 10 4.1.2 Pershoot (Nightly 20121013)
    ------------------------------------------------------------------------
    https://sites.google.com/site/frank17next/

  6. Il seguente Utente ha ringraziato frank17next per il post:

    Darčios89 (09-09-12)

  7. #4
    Senior Droid


    Registrato dal
    Jan 2012
    Messaggi
    304
    Smartphone
    LG G6

    Ringraziamenti
    76
    Ringraziato 3 volte in 3 Posts
    Predefinito

    Ma se invece volessi usare una classe statica? Non riesco....mi spunta il messaggio only final supported o una cosa simile....come posso fare a creare una classe statica?


    Inviato dal mio GT-I9100 usando Androidiani App

  8. #5
    Senior Droid L'avatar di frank17next


    Registrato dal
    Jan 2010
    Localitą
    Campobasso
    Messaggi
    739
    Smartphone
    GNexus, Galaxy Note, GT 10.1

    Ringraziamenti
    16
    Ringraziato 143 volte in 102 Posts
    Predefinito

    Una classe statica? Prob. intende un' istanza di una classe statica (oggetto). A che altezza del codice istanzi l'oggetto che vuoi passare? Se lo fai nel metodo on create(), forse pretende il suffisso 'final' nella sua dichiarazione.
    Oppure puoi provare a dichiarare l'oggetto da passare come attributo della tua classe activity (nella sezione creata dalla prima e ultima parentesi graffa).

    Inviato dal mio Galaxy Nexus con Tapatalk 2
    Nexus 6 - 5.0.1 Stock
    Nexus 5 - 5.0.1 Stock + Root
    Galaxy Note 3 GT-N9005 - 4.4.4 Stock + Root
    Galaxy Tab 10.1 Slim P7500 - [JB] CyanogenMod 10 4.1.2 Pershoot (Nightly 20121013)
    ------------------------------------------------------------------------
    https://sites.google.com/site/frank17next/

  9. Il seguente Utente ha ringraziato frank17next per il post:

    Darčios89 (09-09-12)

  10. #6
    Senior Droid


    Registrato dal
    Jan 2012
    Messaggi
    304
    Smartphone
    LG G6

    Ringraziamenti
    76
    Ringraziato 3 volte in 3 Posts
    Predefinito

    Quote Originariamente inviato da frank17next Visualizza il messaggio
    Una classe statica? Prob. intende un' istanza di una classe statica (oggetto). A che altezza del codice istanzi l'oggetto che vuoi passare? Se lo fai nel metodo on create(), forse pretende il suffisso 'final' nella sua dichiarazione.
    Oppure puoi provare a dichiarare l'oggetto da passare come attributo della tua classe activity (nella sezione creata dalla prima e ultima parentesi graffa).

    Inviato dal mio Galaxy Nexus con Tapatalk 2

    Allora io ho una classe NON statica che estende MapActivity, e tra gli attributi ho dichiarato:

    codice:
    static List<ScanResult> tmplist;	
        
        static  Double geoLat;
        
        static Double geoLng;
    In questa sezione uso la lista:

    codice:
    case 4:
    		{ //IMPLEMENTARE RICERCA RETI
    
    			 Context tmpContext=getApplicationContext();
    			      
    		        WifiManager tmpManager=(WifiManager)tmpContext.getSystemService(android.content.Context.WIFI_SERVICE);
    		                 
    		        if(tmpManager.isWifiEnabled())
    		        {
    		        	
    		        	tmpManager.startScan();
    		        	tmplist=tmpManager.getScanResults();
    		        }
    		        
    		    
    		            AlertDialog.Builder miaAlert = new AlertDialog.Builder(this);
    		            miaAlert.setTitle("Scansione effettuata");
    		            miaAlert.setMessage("Cliccare dal menł la voce relativa ai risultati.")
    		        .setCancelable(false)
    		        .setPositiveButton("OK", new DialogInterface.OnClickListener() {
    		            public void onClick(DialogInterface dialog, int id) {
    		            //Non fare nulla
    		                
    		            }
    		        });
    		            //AlertDialog alert = miaAlert.create();
    		            miaAlert.show();
    		      
    		        			   
    			return true;
    		}

    E poi elaboro le informazioni in un' altra activity che č questa:

    codice:
    import java.util.Comparator;
    import java.util.List;
    
    import android.app.Activity;
    import android.content.Context;
    import android.net.ConnectivityManager;
    import android.net.NetworkInfo;
    import android.net.wifi.ScanResult;
    import android.os.Bundle;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    
    public class Risultati extends Activity {
    	
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
                 
            Context tmpContext=getApplicationContext();
            
            ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
        			this, R.layout.listitem, R.id.listItemTextView
        			);
            
            ListView listView = (ListView)findViewById(R.id.miaLista);
            List<ScanResult> tmplist=Progetto.tmplist;
            
            Double geoLat =Progetto.geoLat*1E6;
            Double geoLng =Progetto.geoLng*1E6;
            	
      	
            	for (ScanResult result : tmplist) 
            	{
            		String tot="";
            		
            		String SSID=result.SSID;
            		String BSSID=result.BSSID;
            		String capabilities=result.capabilities;
            		int frequency=result.frequency;
            		int level=result.level;
            		
            		tot+="Tipo: WiFi\n"+"SSID: "+SSID+"\n"+"BSSID: "+BSSID+"\n"+"Chiave: "
            		+capabilities+"\n"+"Frequenza: "+frequency+" MHz\n"+"Potenza: "+level+" dBm"
            		+"Latitudine: "+geoLat.intValue()+"\n"+"Longitudine: "+geoLng.intValue();
            		
            		arrayAdapter.add(tot);
            		
            	}
            	
    
            
            
            
            ConnectivityManager connectivityManager = (ConnectivityManager)tmpContext.getSystemService(Context.CONNECTIVITY_SERVICE);
                NetworkInfo networkInfo = null;
                if (connectivityManager != null) {
                    networkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
                }
                
                if(networkInfo!=null)
                {
                	
                	
                	String tot="Tipo: "+networkInfo.getTypeName()+"\n"+"Stato: "+networkInfo.getState()+
                			"\n"+"Errori: "+networkInfo.getReason()+"\n"+"Extra: "+networkInfo.getExtraInfo()+
                			"\n"+"Attiva: "+networkInfo.isConnected()+"\n"+"Disponibile: "+networkInfo.isAvailable()
                			+"Latitudine: "+geoLat.intValue()+"\n"+"Longitudine: "+geoLng.intValue();
                	
                	
                	arrayAdapter.add(tot);
                }
           
                
                listView.setAdapter(arrayAdapter);
             
        }
    }

    Solo che ho un nullPointerException alla riga
    codice:
    listView.setAdapter(arrayAdapter);
    Cioč arrayAdapter č null.........e non capisco perchč...

    Aggiungo questa parte in cui avvio l' altra activity Risultati:

    codice:
    case 5:	
    		{    		
    			if(tmplist.size()!=0){
    					Intent i=new Intent(getApplicationContext(), Risultati.class);
    					startActivity(i);
    					return true;}
    			
    			else {
    				 AlertDialog.Builder miaAlert = new AlertDialog.Builder(this);
    		            miaAlert.setTitle("Errore");
    		            miaAlert.setMessage("Effettuare scansione prima di vedere i risultati.")
    		        .setCancelable(false)
    		        .setPositiveButton("OK", new DialogInterface.OnClickListener() {
    		            public void onClick(DialogInterface dialog, int id) {
    		            //Non fare nulla
    		                
    		            }
    		        });
    		            //AlertDialog alert = miaAlert.create();
    		            miaAlert.show();
    			
    				}				
    		}
    Ultima modifica di Darčios89; 09-09-12 alle 11:44

  11. #7
    Senior Droid L'avatar di frank17next


    Registrato dal
    Jan 2010
    Localitą
    Campobasso
    Messaggi
    739
    Smartphone
    GNexus, Galaxy Note, GT 10.1

    Ringraziamenti
    16
    Ringraziato 143 volte in 102 Posts
    Predefinito

    Ok,

    per cominciare, nella classe Risultati, inzia a dichiarare arrayAdapter non nel metodo onCreate() ma all'esterno del metodo, in modo da renderlo un attributo di quella classe.
    Ovvero da cosģ:
    codice:
    ...
    public class Risultati extends Activity {
    	
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
                 
            Context tmpContext=getApplicationContext();
            
            ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
        			this, R.layout.listitem, R.id.listItemTextView
        			);
            
            ListView listView = (ListView)findViewById(R.id.miaLista);
    ...
    a cosģ:

    codice:
    ...
    public class Risultati extends Activity {
    
    private ArrayAdapter<String> arrayAdapter;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
                 
            Context tmpContext=getApplicationContext();
            
            arrayAdapter = new ArrayAdapter<String>(
        			this, R.layout.listitem, R.id.listItemTextView
        			);
            
            ListView listView = (ListView)findViewById(R.id.miaLista);
    ...
    inoltre... alla creazione di arrayAdapter con costruttore new, non č definita la sorgente da adattare... che -secondo dichiarazione- deve essere un array di Stringhe.

    Ho di recente usato un ArrayAdapter<String> per popolare una Spinner (menu a tendina di Android).

    Eseguo una .rawQuery sul db sqlite che da un Cursor mi crea un vettore di Stringhe.
    Sulla documentazione ufficiale della classe ArrayAdapter č indicato che il costruttore di questa classe prevede quattro parametri:

    codice:
    ArrayAdapter (Context context, int resource, int textViewResourceId, T[] objects)
    ho guardato il codice che hai postato in tutta fretta, ma non vedo a che altezza del codice assegni al tuo arrayAdapter il parametro T[] object (che puņ essere un vettore di qualunque tipo di dato atomico).

    Io personalmente l'ho implementato cosģ (esempio):

    1) Preparo l'array di stringhe che rappresenterą la lista da visualizzare nella Spinner (il numero di elementi č ottenuto da una COUNT sulla tabella coinvolta):
    codice:
    String[] listaPartiNonMatricolate = new String[numeroPartiNonMatricolate];
    2) Leggo l'intera tabella e la memorizzo in quell'array di Stringhe:
    codice:
     public String[] selectPartiNonMatricolate(String pCdc){
    	 String sql = "select DISTINCT(DESCRIZIONE) from GiacenzePartiMagazzino where tp = '" + pCdc + "' and flagmatricola = 0 order by descrizione asc";
    	 Cursor cursor = sqLiteDatabase.rawQuery(sql, null);
    	 String[] parti = new String[cursor.getCount()];
    	 int x = 0;
    	 	cursor.moveToFirst();
    	 	for(int i = 0; i<cursor.getCount(); i++) {
    	 		parti[x] = cursor.getString(0);
    	 		x++;
    	 		cursor.moveToNext();
    	 	}
    	 	cursor.close();
    	 	return parti;
     }
    3) Utilizzo finalmente l'ArrayAdapter:
    codice:
    adapterPartiNonMatricolate =  new ArrayAdapter<String>(this, R.layout.rowspinner, R.id.textViewSpinnerRow, listaPartiNonMatricolate);
    4) Popolo infine la spinner con quell'Array Adapter:
    codice:
    spinnerPartiNonMatricolate.setAdapter(adapterPartiNonMatricolate);
    ... probabilmente quell'arrayAdapter risulta null poichč nel costruttore in fase di creazione non č stato indicato il parametro T[] objects

    Giusto per test, prova a creare al volo un array String[] testArray con dentro 2/3 elementi, e crea il tuo ArrayAdapter cosģ:

    codice:
    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, R.layout.listitem, R.id.listItemTextView, testArray);
    se il null pointer exception rientra, il problema č lģ. Devi preparare i valori prima della dichiarazione dell'adapter.
    Ultima modifica di frank17next; 09-09-12 alle 12:47 - Motivo: correzione ortografica
    Nexus 6 - 5.0.1 Stock
    Nexus 5 - 5.0.1 Stock + Root
    Galaxy Note 3 GT-N9005 - 4.4.4 Stock + Root
    Galaxy Tab 10.1 Slim P7500 - [JB] CyanogenMod 10 4.1.2 Pershoot (Nightly 20121013)
    ------------------------------------------------------------------------
    https://sites.google.com/site/frank17next/

  12. Il seguente Utente ha ringraziato frank17next per il post:

    Darčios89 (09-09-12)

  13. #8
    Senior Droid


    Registrato dal
    Jan 2012
    Messaggi
    304
    Smartphone
    LG G6

    Ringraziamenti
    76
    Ringraziato 3 volte in 3 Posts
    Predefinito

    Bņ non va.....premesso che quel codice che ho scritto io lo avevo provato in una activity e si vede l' elenco dei wifi, quindi anche il solo uso del costruttore senza quell' array E[] dovrebbe andare bene, ho cercato di modificare sulla base di quello che hai detto tu, facendo:

    codice:
    public class Risultati extends Activity {
    	
    
    	int geoLat;
    	int geoLng;
    	private ArrayAdapter<String> arrayAdapter;
    	String[] array=new String[100];                //METTO 100 perchč per ora non so quante sono le reti che devo trovare
    	int dim=0;

    codice:
     @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            Intent intent = getIntent();
            String pkg = getPackageName();
           geoLat = intent.getIntExtra(pkg+".myLat" , -1);
           geoLng = intent.getIntExtra(pkg+".myLng" , -1);
           
                 
            Context tmpContext=getApplicationContext();
            
            		
            ListView listView = (ListView)findViewById(R.id.miaLista);
            List<ScanResult> tmplist=Progetto.tmplist;
            
      	
            	for (ScanResult result : tmplist) 
            	{
            		String tot="";
            		
            		String SSID=result.SSID;
            		String BSSID=result.BSSID;
            		String capabilities=result.capabilities;
            		int frequency=result.frequency;
            		int level=result.level;
            		
            		tot+="Tipo: WiFi\n"+"SSID: "+SSID+"\n"+"BSSID: "+BSSID+"\n"+"Chiave: "
            		+capabilities+"\n"+"Frequenza: "+frequency+" MHz\n"+"Potenza: "+level+" dBm"
            		+"Latitudine: "+geoLat+"\n"+"Longitudine: "+geoLng;
            		
            		array[dim++]=tot;    //aggiungo all' array la stringa trovata.
            		
            		
            		
            			
            	}
            	
            	arrayAdapter = new ArrayAdapter<String>(
            			this, R.layout.listitem, R.id.listItemTextView,array
            			);
            	
            	
           
                listView.setAdapter(arrayAdapter);             //SEMPRE NULL
             
        }
    }

  14. #9
    Senior Droid L'avatar di frank17next


    Registrato dal
    Jan 2010
    Localitą
    Campobasso
    Messaggi
    739
    Smartphone
    GNexus, Galaxy Note, GT 10.1

    Ringraziamenti
    16
    Ringraziato 143 volte in 102 Posts
    Predefinito

    mmm.. aspetta stavo rivedendo il codice, in pratica ora hai due Activity dove in una produci la lista e in un'altra popoli l'arrayString e quindi questo č proprio l'oggetto parcellizzato che passi tra activity di cui chiedevi prima?

    Hai provato a fare un check sul passaggio di valori nei bundle/intent, per verificare la bontą del dato?
    Ancora: se vuoi, puoi postare o inviarmi l'intero project o solo la parte interessata, affinchč possa avere maggiore visibilitą di tutto il flusso?
    Grazie,Ciao
    Nexus 6 - 5.0.1 Stock
    Nexus 5 - 5.0.1 Stock + Root
    Galaxy Note 3 GT-N9005 - 4.4.4 Stock + Root
    Galaxy Tab 10.1 Slim P7500 - [JB] CyanogenMod 10 4.1.2 Pershoot (Nightly 20121013)
    ------------------------------------------------------------------------
    https://sites.google.com/site/frank17next/

  15. Il seguente Utente ha ringraziato frank17next per il post:

    Darčios89 (09-09-12)

  16. #10
    Senior Droid


    Registrato dal
    Jan 2012
    Messaggi
    304
    Smartphone
    LG G6

    Ringraziamenti
    76
    Ringraziato 3 volte in 3 Posts
    Predefinito

    Se hai dubbi chiedi perchč penso ti perderai un poco con la mia scrittura, sostanzialmente ho una app che ha una schermata splash, subito dopo si avvia un' activity che controlla se sia presente o meno la connessione internet, in caso affermativo avvia l' activity progetto, da cui tramite option menł con un case: faccio la scansione, e memorizzo in una lista i risultati (NON HO USATO ALCUN PARCELABLE) e tramite un altra activity voglio mantenere quella lista di risultati e visualizzarli mediante una listview con adapter, se ai problemi dimmi:

    P.S Il progetto dove ho il problema č Retografo Geolocalizzato, l' altro (Wifi) te lo mando perchč se non ricordo male lģ non avevo problemi col costruttore dell' adapter, facevo semplicemente una scansione e visualizzavo i risultati, se lo provi capisci meglio sicuramente.

    Zippyshare.com - Retografo Geolocalizzato.zip

    Zippyshare.com - Wifi.zip

    Grazie in anticipo della disponibilitą....mi manca solo questa cosa per completare il progetto.

Pagina 1 di 2 12 ultimoultimo
Ultima pagina

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy