Autore Topic: come salvare un dato in sessione  (Letto 269 volte)

Offline andream1977

  • Utente normale
  • ***
  • Post: 214
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
come salvare un dato in sessione
« il: 06 Settembre 2010, 10:31:37 CEST »
0
Buongiorno

Sto studiando il framework di android e sto provando a scrivere la mia prima app, volevo sapere:
Nell'activity principale accedo al db e leggo un dato
Questo dato me lo devo portare dietro per tutte le varie activity della mia app
Come posso fare? Esiste una sessione dove posso salvare questo dato e leggerlo dalle activity in cui ne avrò bisogno? oppure da ogni activity che ne fa uso devo accedere al db per leggere questo dato?

Offline MarcoDuff

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 914
  • Respect: +150
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    HTC Desire
  • Market Developer Name:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:come salvare un dato in sessione
« Risposta #1 il: 06 Settembre 2010, 10:33:19 CEST »
0
Ti basta usare le Shared Preferences! ;)
Le mie Applicazioni Android | Il mio Blog

Io faccio parte del Gruppo AndDev.it LOGTFO, tu no? Allora GTFO!
Quando un utente fornisce una risposta utile si può ringraziarlo premendo il tasto  alla destra del titolo del post. (Ricky` rulez)

Offline Ricky`

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 2466
  • Respect: +339
    • Google+
    • rciovati
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Sistema operativo:
    OS X Lion
Re:come salvare un dato in sessione
« Risposta #2 il: 06 Settembre 2010, 10:53:00 CEST »
+1
Ti basta usare le Shared Preferences! ;)

Usare le preferences è la soluzione "greedy".

In realtà si può anche fare in questo modo, estendendo la classe Application
Codice (Java): [Seleziona]
class MyApp extends Application {

  private String myState;

  public String getState(){
    return myState;
  }
  public void setState(String s){
    myState = s;
  }
}

class Blah extends Activity {

  @Override
  public void onCreate(Bundle b){
    ...
    MyApp appState = ((MyApp)getApplicationContext());
    String state = appState.getState();
    ...
  }
}

Hai anche la possibilità di gestire il lifecycle.

Android: How to declare global variables? - Stack Overflow

Offline MarcoDuff

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 914
  • Respect: +150
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    HTC Desire
  • Market Developer Name:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:come salvare un dato in sessione
« Risposta #3 il: 06 Settembre 2010, 10:55:06 CEST »
0
In realtà si può anche fare in questo modo, estendendo la classe Application

Ma in questo modo, se esci dall'applicazione non perdi il valore?
Le mie Applicazioni Android | Il mio Blog

Io faccio parte del Gruppo AndDev.it LOGTFO, tu no? Allora GTFO!
Quando un utente fornisce una risposta utile si può ringraziarlo premendo il tasto  alla destra del titolo del post. (Ricky` rulez)

Offline Ricky`

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 2466
  • Respect: +339
    • Google+
    • rciovati
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Sistema operativo:
    OS X Lion
Re:come salvare un dato in sessione
« Risposta #4 il: 06 Settembre 2010, 10:58:13 CEST »
0
Ma in questo modo, se esci dall'applicazione non perdi il valore?

Lo perdi quando viene distrutta... comunque ha senso appunto per tenere dati "di sessione".

Offline andream1977

  • Utente normale
  • ***
  • Post: 214
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
Re:come salvare un dato in sessione
« Risposta #5 il: 06 Settembre 2010, 11:03:47 CEST »
0
Ricky cosa vuol dire:
Usare le preferences è la soluzione "greedy". ?



Offline MarcoDuff

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 914
  • Respect: +150
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    HTC Desire
  • Market Developer Name:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:come salvare un dato in sessione
« Risposta #6 il: 06 Settembre 2010, 11:07:54 CEST »
0
Usare le preferences è la soluzione "greedy". ?

Troppo complessa/onerosa per l'effettivo utilizzo.

La soluzione di Ricky`è perfetta se con sessione intendi il ciclo di vita di una applicazione. Io con sessione intendevo da quando accendi il terminale a quando lo spegni!  :-[

Vedi tu quale è la soluzione che più si avvicina alle tue esigenze!
Le mie Applicazioni Android | Il mio Blog

Io faccio parte del Gruppo AndDev.it LOGTFO, tu no? Allora GTFO!
Quando un utente fornisce una risposta utile si può ringraziarlo premendo il tasto  alla destra del titolo del post. (Ricky` rulez)

Offline Ricky`

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 2466
  • Respect: +339
    • Google+
    • rciovati
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Sistema operativo:
    OS X Lion
Re:come salvare un dato in sessione
« Risposta #7 il: 06 Settembre 2010, 11:13:42 CEST »
0
Ricky cosa vuol dire:
Usare le preferences è la soluzione "greedy". ?

In informatica quando si parla di algoritmo o soluzione greedy si intende la prima soluzione che viene in mente :)

Offline andream1977

  • Utente normale
  • ***
  • Post: 214
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
Re:come salvare un dato in sessione
« Risposta #8 il: 06 Settembre 2010, 11:41:32 CEST »
0
mi va benissimo la soluzione di Ricky ma no nriesco ad implementarla

Ho scritto questo codice:

Codice (Java): [Seleziona]
package it.test;

import android.app.ListActivity;


public class Prova extends ListActivity {

        View view = null;
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);

                Appoggio appState = ((Appoggio)getApplicationContext());        //<-- linea 31
                appState.setState("stato 5");
                String state = appState.getState();
                Log.d(this.toString(), "stato recuperato: "+state);
                }
}

mentre la classe Appoggio:

Codice (Java): [Seleziona]
import android.app.Application;

class Appoggio extends Application {

          private String myState;

          public String getState(){
            return myState;
          }
          public void setState(String s){
            myState = s;
          }
        }

Quando eseguo l'app ho quest'errore:

09-06 09:32:36.195: ERROR/AndroidRuntime(222): java.lang.RuntimeException: Unable to start activity ComponentInfo{it.test/it.test.Prova}: java.lang.ClassCastException: android.app.Application

09-06 09:32:36.195: ERROR/AndroidRuntime(222):     at it.test.Prova.onCreate(Prova.java:31)


Offline Ricky`

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 2466
  • Respect: +339
    • Google+
    • rciovati
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Sistema operativo:
    OS X Lion
Re:come salvare un dato in sessione
« Risposta #9 il: 06 Settembre 2010, 11:44:38 CEST »
0
Hai messo nel manifest:
Codice (XML): [Seleziona]
<application android:name=".Appoggio"
      android:icon="@drawable/icon"
      android:label="@string/app_name">

Offline andream1977

  • Utente normale
  • ***
  • Post: 214
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
Re:come salvare un dato in sessione
« Risposta #10 il: 06 Settembre 2010, 11:50:55 CEST »
0
Ricky appunto ti stavo scrivendo:

In questo post
Android: How to declare global variables? - Stack Overflow
leggo che devo definire cla classe Appoggio nel manifest
quando aggiungo la classe Appoggio nella sezione Application del manifest mi fa scegliere tra le seguenti tipologie:

Activity
Activity Alias
Meta Data
Provider
Receiver
Service
Uses Library

cosa devo scegliere?

Offline Ricky`

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 2466
  • Respect: +339
    • Google+
    • rciovati
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Sistema operativo:
    OS X Lion
Re:come salvare un dato in sessione
« Risposta #11 il: 06 Settembre 2010, 11:54:32 CEST »
0
Devi aggiungere android:name=".Appoggio"  all'Application che già hai.

Offline andream1977

  • Utente normale
  • ***
  • Post: 214
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
Re:come salvare un dato in sessione
« Risposta #12 il: 06 Settembre 2010, 12:27:11 CEST »
0
io ho questo manifest:

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="it.test"
     android:versionCode="1"
     android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name" >
        <activity android:name=".Prova"
                 android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    <activity android:name="MyMenu"></activity>
    <activity android:name="Risposta"></activity>
   
   
</application>
    <uses-sdk android:minSdkVersion="4" />

</manifest>

ho provato a modificarlo così e mi da errore:

Codice (XML): [Seleziona]
<application android:icon="@drawable/icon" android:label="@string/app_name" android:name=".Appoggio">
allora ho scritto così ma da sempre errore, dice "la classe Appoggio non estende android.app.Activity"

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="it.test"
     android:versionCode="1"
     android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name" >
        <activity android:name=".Prova"
                 android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    <activity android:name="MyMenu"></activity>
    <activity android:name="Risposta"></activity>
    <activity android:name="Appoggio"></activity>    
   
</application>
    <uses-sdk android:minSdkVersion="4" />

</manifest>
« Ultima modifica: 06 Settembre 2010, 12:37:23 CEST da andream1977 »

Offline andream1977

  • Utente normale
  • ***
  • Post: 214
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
Re:come salvare un dato in sessione
« Risposta #13 il: 06 Settembre 2010, 15:59:23 CEST »
0
ho letto questo:

The way to do this is to create your own subclass of android.app.Application, and then specify that class in the application tag in your manifest.

ma non sono riuscito a capire cosa scrivere nel manifest

Qualcuno sa come devo modificare il manifest?

Offline DX89B

  • Utente junior
  • **
  • Post: 121
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Market Developer Name:
    Daniele Bonadiman
  • Sistema operativo:
    Mac OS X 10.6
Re:come salvare un dato in sessione
« Risposta #14 il: 06 Settembre 2010, 16:17:46 CEST »
0
è errato  farlo (alla vecchia maniera) creando una classe che contiene una variabile statica e in ogni activity creare una nuova istanza di questa classe eseguendo una get della variabile??