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

Offline andream1977

  • Utente normale
  • ***
  • Post: 260
  • 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 storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    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! ;)

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
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 storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    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?

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
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: 260
  • 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 storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    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!

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
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: 260
  • 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`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
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: 260
  • 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`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
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: 260
  • 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: 260
  • 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
  • Play Store ID:
    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??