CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: 4eyes81 con ben 3 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: elmegio con ben 7 Thanks ricevuti negli ultimi sette giorni
Utente del mese: bluemask con ben 43 Thanks ricevuti nell'ultimo mese

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

[Eclipse+adt] Salvare un dato da un'edit text

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
    Baby Droid


    Registrato dal
    Aug 2010
    Messaggi
    23

    Ringraziamenti
    1
    Ringraziato 0 volte in 0 Posts
    Predefinito

    [Eclipse+adt] Salvare un dato da un'edit text

    Ciao a tutti,
    ho realizzato un'attività che chiama una sotto attività da un menù a tendina.
    La sotto attività ha un "edit text" per inserire un dato (vorrei salvare un int sebbene dal codice recupero una CharSequence) e un bottone con scritto salva.

    Ho usato SharedPreferences per recuperare dall'edit text il dato e poi salvarlo nel file preferenze, per poi visualizzare tutto su schermo per capire se tutto è andato liscio.

    Nel codice non ci sono errori ma non appena avvio la sotto attività questa va in crash.

    Ho pensato fosse per la mancanza di questo file xml delle "preferenze" (che poi ho creato) si chiama "mypref" poichè la var. d'istanza ha questo valore memorizzato nel codice. Si trova sotto res/xml però l'applicazione crasha sempre allo stesso punto

    Cosa devo fare?? Sto sbagliando qualcosa?? Vi ricordo che visto che ho seguito un tutorial il codice dovrebbe essere corretto!

    Grazie a tutti

    L'errore è questo:
    codice:
    08-31 14:20:01.869: ERROR/AndroidRuntime(309): FATAL EXCEPTION: main
    08-31 14:20:01.869: ERROR/AndroidRuntime(309): java.lang.RuntimeException: Unable to start activity ComponentInfo{mieapplicazioni.menudemo/mieapplicazioni.menudemo.SubActivity}: java.lang.NullPointerException
    08-31 14:20:01.869: ERROR/AndroidRuntime(309):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
    08-31 14:20:01.869: ERROR/AndroidRuntime(309):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
    08-31 14:20:01.869: ERROR/AndroidRuntime(309):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
    08-31 14:20:01.869: ERROR/AndroidRuntime(309):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
    08-31 14:20:01.869: ERROR/AndroidRuntime(309):     at android.os.Handler.dispatchMessage(Handler.java:99)
    08-31 14:20:01.869: ERROR/AndroidRuntime(309):     at android.os.Looper.loop(Looper.java:123)
    08-31 14:20:01.869: ERROR/AndroidRuntime(309):     at android.app.ActivityThread.main(ActivityThread.java:4627)
    08-31 14:20:01.869: ERROR/AndroidRuntime(309):     at java.lang.reflect.Method.invokeNative(Native Method)
    08-31 14:20:01.869: ERROR/AndroidRuntime(309):     at java.lang.reflect.Method.invoke(Method.java:521)
    08-31 14:20:01.869: ERROR/AndroidRuntime(309):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    08-31 14:20:01.869: ERROR/AndroidRuntime(309):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    08-31 14:20:01.869: ERROR/AndroidRuntime(309):     at dalvik.system.NativeStart.main(Native Method)
    08-31 14:20:01.869: ERROR/AndroidRuntime(309): Caused by: java.lang.NullPointerException
    08-31 14:20:01.869: ERROR/AndroidRuntime(309):     at mieapplicazioni.menudemo.SubActivity.onCreate(SubActivity.java:30)
    08-31 14:20:01.869: ERROR/AndroidRuntime(309):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    08-31 14:20:01.869: ERROR/AndroidRuntime(309):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
    Il file mypref.xml l'ho fatto così, non so se è giusto:
    codice:
    <?xml version="1.0" encoding="utf-8"?>
    <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
      
      <Preference android:defaultValue="No Preferences!" android:key="textData" ></Preference>
    </PreferenceScreen>
    La mia intenzione sarebbe quella di modificare questo elemento di chiave textData
    Ultima modifica di helldron; 31-08-10 alle 17:34

  2.  
  3. #2
    Senior Droid L'avatar di Cymon


    Registrato dal
    Jul 2010
    Messaggi
    419

    Ringraziamenti
    7
    Ringraziato 43 volte in 42 Posts
    Predefinito

    Quote Originariamente inviato da helldron Visualizza il messaggio

    Cosa devo fare?? Sto sbagliando qualcosa?? Vi ricordo che visto che ho seguito un tutorial il codice dovrebbe essere corretto!
    Mica vero
    In realtà già in un paio di casi ho dovuto debuggare i tutorial, nobody's perfect.

    A occhio potrebbe essere un problema di permessi, ma la nullPointer ho paura sia dovuta a altro. L'applicazione ti crasha in avvio, dopo aver selezionato il form dal menu a tendina o dopo aver cliccato su salva?
    La mia katana: Slackware 13.1
    La mia wakizashi: Acer A1 Liquid con Android 2.1 Eclair
    Il mio sito: Follow the rabbit (con la sua App )

  4. #3
    Baby Droid


    Registrato dal
    Aug 2010
    Messaggi
    23

    Ringraziamenti
    1
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Quote Originariamente inviato da Cymon Visualizza il messaggio
    Mica vero
    In realtà già in un paio di casi ho dovuto debuggare i tutorial, nobody's perfect.

    A occhio potrebbe essere un problema di permessi, ma la nullPointer ho paura sia dovuta a altro. L'applicazione ti crasha in avvio, dopo aver selezionato il form dal menu a tendina o dopo aver cliccato su salva?
    In pratica dall'emulatore clicco sul tasto menù, appare il menù a tendina e clicco sul pulsante che avvia la sotto attività, però invece di aprirsi mi crasha
    Ultima modifica di helldron; 31-08-10 alle 19:07

  5. #4
    Senior Droid L'avatar di Cymon


    Registrato dal
    Jul 2010
    Messaggi
    419

    Ringraziamenti
    7
    Ringraziato 43 volte in 42 Posts
    Predefinito

    Quote Originariamente inviato da helldron Visualizza il messaggio
    In pratica dall'emulatore clicco sul tasto menù, appare il menù a tendina e clicco sul pulsante che avvia la sotto attività, però invece di aprirsi mi crasha
    Guarda, la maggior parte dei nullpointer che ricevo io sviluppando vengono da recuperi errati di view all'interno del java, quando si fanno le findViewById... se si potesse dare una sbirciatina almeno al codice del form...
    La mia katana: Slackware 13.1
    La mia wakizashi: Acer A1 Liquid con Android 2.1 Eclair
    Il mio sito: Follow the rabbit (con la sua App )

  6. #5
    Baby Droid


    Registrato dal
    Aug 2010
    Messaggi
    23

    Ringraziamenti
    1
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Mi pare strano visto che ho controllato pure io però eccolo:

    codice:
    <EditText android:numeric="decimal" android:text="" android:id="@+id/EditText01" android:layout_width="wrap_content" android:layout_height="wrap_content"></EditText>
    Nel codice quando recupero la risorsa EditText01 faccio così, Eclipse cmq individua già automaticamente le possibili risorse da caricare:

    codice:
    EditText outputView = (EditText)findViewById(R.id.EditText01);
    Lo stesso vale per la text view che fa vedere l'output e il bottone:

    codice:
    <Button android:text="salva" android:id="@+id/Button01" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
    codice:
    Button button = (Button)findViewById(R.id.Button01);
    codice:
    <TextView android:numeric="decimal" android:text="" android:id="@+id/TextView03" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
    codice:
    TextView outputText = (TextView)findViewById(R.id.TextView03);
    Al di là della logica, la mia sotto attività usa queste 3 risorse con findViewById().

  7. #6
    Baby Droid


    Registrato dal
    Aug 2010
    Messaggi
    23

    Ringraziamenti
    1
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Nessun altra idea ??

  8. #7
    Senior Droid L'avatar di Cymon


    Registrato dal
    Jul 2010
    Messaggi
    419

    Ringraziamenti
    7
    Ringraziato 43 volte in 42 Posts
    Predefinito

    Quote Originariamente inviato da helldron Visualizza il messaggio
    Nessun altra idea ??
    Sicuramente il problema è nella activity col form visto che scoppia nel momento in cui viene invocato.
    Se parliamo di un nullpointer in generale deve esserci qualche metodo che ritorna sbagliato qualche classe...
    Quello che faccio io di solito a questo punto è importarmi android.util.Log e cominciare a fargli scrivere sul log abbondanti info. Print è il debug universale*
    Controlla tutte le instanziazioni e fatti dire dal codice se qualcosa sta a null.




    *C'è sicuramente un modo figo per fare ciò con Eclipse e senza far loggare l'applicativo, ma far loggare l'applicativo secondo me è professionale e poi non uso Eclipse...
    La mia katana: Slackware 13.1
    La mia wakizashi: Acer A1 Liquid con Android 2.1 Eclair
    Il mio sito: Follow the rabbit (con la sua App )

  9. #8
    Baby Droid


    Registrato dal
    Aug 2010
    Messaggi
    23

    Ringraziamenti
    1
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Ti posto tutto il codice così capisci meglio.
    Ho questa sotto attività che chiamo dal menù a tendina:
    Io vorrei salvare dall' "editText01" il valore che inserisco e metterlo in questo file delle preferenze e stamparlo subito (per vedere se tutto funziona bene) nella "textView03".
    Appena clicco sul bottone del menù a tendina per avviare la sotto attività questa mi crasha.

    Da quanto ho capito dal tutorial che ho usato le SharedPreferences vogliono un file (che io ho chiamato "mypref" come vedi dalla classe SubActivity.java) nel quale sarà contenuto questo valore che voglio salvare.
    Sto usando bene le Shared Preferences??
    Tra l'altro vorrei poter dire all'xml che il valore dell'edit text è solo numerico, l'ho fatto mettendo la proprietà android:numeric="decimal" ma non so se basta!!

    Il tutorial: [facile] Semplice esempio di Shared Preferences - Android Developers Italia

    Spero sia utile!!
    codice:
    package mieapplicazioni.menudemo;
    
    import android.app.Activity;
    import android.content.Context;
    import android.content.SharedPreferences;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
    
    public class SubActivity extends Activity {
    	
    	    private static int range;
    	
    	  // Costante relativa al nome del file preferenze
            private final static String MY_PREFERENCES = "mypref";
          // Costante relativa al nome della particolare preferenza
           	private final static String TEXT_DATA_KEY = "textData";
         
    	 
    	  
    	
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    	super.onCreate(savedInstanceState);
    	
    	Button button = (Button)findViewById(R.id.Button01);
    	button.setOnClickListener(new View.OnClickListener(){
    		@Override
    		public void onClick(View v){
    			
    			  //Otteniamo il riferimento alle Preferences
                    SharedPreferences prefs = getSharedPreferences(MY_PREFERENCES, Context.MODE_PRIVATE);
                    // Otteniamo il corrispondente Editor
                    SharedPreferences.Editor editor = prefs.edit();
                    // Modifichiamo il valore con quello inserito nell'EditText
                    EditText outputView = (EditText)findViewById(R.id.EditText01); 
                    CharSequence textData = outputView.getText();
                    if (textData != null) {
                            // Lo salviamo nelle Preferences
                            editor.putString(TEXT_DATA_KEY, textData.toString());
                            editor.commit();
                    }
                    updatePreferencesData();
    			
    			/*Chiudo la sub-attivià*/
    			finish();
    		}
    	});
    	
    	setContentView(R.layout.subactivitylayout);
    	
      
    	updatePreferencesData();
       
    	}
    	
    	
    
    	  private void updatePreferencesData(){
                    // Leggiamo le Preferences
                    SharedPreferences prefs = getSharedPreferences(MY_PREFERENCES, Context.MODE_PRIVATE);
                    // Leggiamo l'informazione associata alla proprietà TEXT_DATA
                    String textData = prefs.getString(TEXT_DATA_KEY, "No Preferences!");
                    // Lo impostiamo alla TextView che mostra il range selezionato
                    TextView outputText = (TextView)findViewById(R.id.TextView03);
                    outputText.setText(textData);
            }
    	 
    	
    	public static int getRange(){
    		return range;
    	}
    	
    	public static void setRange(int nuovoRange){
    	 	range = nuovoRange;
    	}
    }
    codice:
    package mieapplicazioni.menudemo;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.widget.Toast;
    
    public class MenuDemo extends Activity {
    	
    	/* E' buon uso avere della variabili per specificare l'id degli elemti del menù*/
    	private static final int MENUITEM_COMANDO_1 = 1;
    	private static final int MENUITEM_COMANDO_2 = 2;
    	private static final int MENUITEM_COMANDO_3 = 3;
    	
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);    
        }
        
        /* Con questo metodo creo il menù, l'argomento Menu agginunge degli elementi
         * e ogni elemento MenuItem setta la sua icona*/
        @Override
        	public boolean onCreateOptionsMenu(Menu menu) {
    		MenuItem comando1 = menu.add(Menu.NONE, MENUITEM_COMANDO_1, 1, "Set Range");
    		comando1.setIcon(R.drawable.icon);
    		MenuItem comando2 = menu.add(Menu.NONE, MENUITEM_COMANDO_2, 2, "Comando 2");
    		comando2.setIcon(R.drawable.icon);
    		MenuItem comando3 = menu.add(Menu.NONE, MENUITEM_COMANDO_3, 3, "Comando 3");
    		comando3.setIcon(R.drawable.icon);
    		return true;
        	}
        
        /* Questo metodo gestisce gli eventi di ogni singolo tasto del menù recuperando
         * il suo id e tramite uno switch descrivendo per ogni caso un'azione*/
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
        	int id = item.getItemId();
        	switch (id) {
        	case MENUITEM_COMANDO_1:
        	//Toast.makeText(this, "Comando 1", Toast.LENGTH_SHORT).show();
        	startSubActivity();
        	return true;
        	case MENUITEM_COMANDO_2:
        	Toast.makeText(this, "Comando 2", Toast.LENGTH_SHORT).show();
        	return true;
        	case MENUITEM_COMANDO_3:
        	Toast.makeText(this, "Comando 3", Toast.LENGTH_SHORT).show();
        	return true;
        	}
        	return false;
        }
        
        /* Con l'oggetto Intent dico quale attività dovrà essere lanciata, con
         * startActivity quell'attività si avvierà occupando effettivamente lo schermo*/
        private void startSubActivity() {
        	Intent intent = new Intent(this, SubActivity.class);
        	startActivity(intent);
        	}
    }
    Dentro il metodo onOptionsItemSelected(MenuItem item) lancio la sotto attività:
    codice:
    startSubActivity();
    che poi definisco più sotto

    Questo è ilo layout della sotto attività, non di quella principale che è il default
    codice:
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content">
      
    <TableLayout android:id="@+id/TableLayout01" android:layout_width="wrap_content" android:layout_height="wrap_content">
    	<TableRow android:id="@+id/TableRow01" android:layout_width="wrap_content" android:layout_height="wrap_content">
    		<TextView android:text="Set Range: " android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
    			<!--sotto una editText numerica -->
    		<EditText android:numeric="decimal" android:text="" android:id="@+id/EditText01" android:layout_width="wrap_content" android:layout_height="wrap_content"></EditText>
    	</TableRow>
    	<TableRow android:id="@+id/TableRow02" android:layout_width="wrap_content" android:layout_height="wrap_content">
    		<Button android:text="Cerca" android:id="@+id/Button01" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
    	</TableRow>
    	<TableRow android:id="@+id/TableRow03" android:layout_width="wrap_content" android:layout_height="wrap_content">
    		<TextView android:text="Range selezionato: " android:id="@+id/TextView02" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
    			<!--sotto una textView numerica -->
    		<TextView android:numeric="decimal" android:text="" android:id="@+id/TextView03" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
    	</TableRow> 
    	
    </TableLayout>
    
    </LinearLayout>
    Ultima modifica di helldron; 01-09-10 alle 13:05

  10. #9
    Senior Droid L'avatar di Cymon


    Registrato dal
    Jul 2010
    Messaggi
    419

    Ringraziamenti
    7
    Ringraziato 43 volte in 42 Posts
    Predefinito

    Mi piacerebbe provarle le robe, prima di dirle, ma dall'ufficio mi è complesso
    Vabbè, cazzata più cazzata meno...
    Prova a mettere il setContentView in testa alla onCreate e prima di fare le findViewById...
    La mia katana: Slackware 13.1
    La mia wakizashi: Acer A1 Liquid con Android 2.1 Eclair
    Il mio sito: Follow the rabbit (con la sua App )

  11. Il seguente Utente ha ringraziato Cymon per il post:

    helldron (01-09-10)

  12. #10
    Baby Droid


    Registrato dal
    Aug 2010
    Messaggi
    23

    Ringraziamenti
    1
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Quote Originariamente inviato da Cymon Visualizza il messaggio
    Mi piacerebbe provarle le robe, prima di dirle, ma dall'ufficio mi è complesso
    Vabbè, cazzata più cazzata meno...
    Prova a mettere il setContentView in testa alla onCreate e prima di fare le findViewById...
    Grazieeeee, funziona tutto come previsto!!

    Ora una cosa che vorrei chiederti:
    praticamente appena inserisco il valore me lo salva in questo famoso file delle preferenze e poi lo stampa, tornando subito all'attività principale.

    In realtà il file che ho creato io (mypref.xml) non è stato modificato, cioè non ci trovo il valore inserito. Dove avrà salvato il valore?? Devo impostare qualcosa??

    Per farti capire come sono arrivato a creare il file ti posto un pezzetto del tutorial:
    La classe android.content.SharedPreferences permette agli sviluppatori di salvare dei settaggi applicativi in un file e condividerli nella applicazione stessa o tra tutte le applicazioni.
    Il file dove vengono salvate queste applicazioni è presente nel path /data/data/<package_applicazione>/.
    Android mette a disposizione un framework per gestire la persistenza dei dati e la presentazione dell'interfaccia per modificarli.

    Ecco io sotto il mio package di MenuDemo non trovo nulla quindi ho creato un file myoref.xml di preferenze che però mi viene messo nella cartella res/xml (il codice l'ho già postato prima, all'inizio del thread).


    Grazie mille

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