Autore Topic: Condividere variabili tra più Activity  (Letto 330 volte)

Offline Funesto

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
Condividere variabili tra più Activity
« il: 22 Aprile 2017, 16:25:44 CEST »
0
Salve!
Non so se questa è la sezione giusta nella quale chiedere. Sto seguendo vari tutorial su YouTube e ne ho trovato uno molto semplice che mi permette di passare dalla "MainActivity" ad altre Activity.

Mi interesserebbe sapere come potrei fare in modo da rendere delle variabili, disponibili per tutte le activity che andrei a creare.

Esempio banale: se nella "prima_Activity" do ad "A" il valore di 1, nella "seconda_Activity" do a "B" il valore di 2 e nella terza do a C il valore di 3 ....

come faccio poi a leggere A,B e C dalla MainActivity?

Grazie a tutti! :)

Offline tonno16

  • Utente storico
  • *****
  • Post: 1233
  • Respect: +60
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Condividere variabili tra più Activity
« Risposta #1 il: 23 Aprile 2017, 22:11:43 CEST »
0
Se le activity sono fatte a step, nel senso che dalla 1 passi alle 2 e poi dalle 2 avvi la tre, allora con due startActivityForResult puoi cavartela bene.
Se invece non è un fatto di step, puoi creare un service e convididere variabili. Oppure puoi creare un piccolo database. Oppure puoi usare le sharedpreferences. Oppure puoi salvare dati in un file

Offline Funesto

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
Re:Condividere variabili tra più Activity
« Risposta #2 il: 24 Aprile 2017, 13:24:12 CEST »
0
 ??? ??? ???

Arabissimo!!!!! :) Non ci ho capito nulla ma almeno mi hai dato delle dritte! Cercherò tutorial su cosa sono e come funzionano "i service", perché no, non è a step!

Nel caso non dovessi trovare nulla, chiederò ancora su questo thread!

Grazie mille!!!!

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 804
  • Respect: +168
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 10 x64
Re:Condividere variabili tra più Activity
« Risposta #3 il: 26 Aprile 2017, 15:25:02 CEST »
+1
Non esiste un metodo univoco.

Per farla breve, se e solo se si parla di piccole quantità di dati, puoi fare così:

1- Crei una classe che eredita da Application

Codice (Java): [Seleziona]
public class MainApplication extends Application {
  @Override
  public void onCreate() {
    super.onCreate();
  }
}

2- Aggiungi un riferimento a sé stessa, che popoli nella onCreate

Codice (Java): [Seleziona]
public class MainApplication extends Application {

  private static MainApplication selfReference = null;

  @Override
  public void onCreate() {
    super.onCreate();

    selfReference = this;
  }
}

3- Crei un metodo statico per accedere al riferimento dell'application
Codice (Java): [Seleziona]
  public static MainApplication getInstance() {
    return selfReference;
  }

4- Assicurati di aver messo nel manifest il riferimento alla tua classe:

Codice (XML): [Seleziona]
<application
                android:name="com.example.app.MainApplication"
                >

5- Aggiungi tutte le variabili di cui hai bisogno in MainApplication

Codice (Java): [Seleziona]
  String variabileA;

  public String getVariabileA() {
    return variabileA;
  }
  public void setVariabileA(String a) {
    variabileA = a;
  }

A questo punto, in qualsiasi parte del codice puoi fare

Codice (Java): [Seleziona]
MainApplication.getInstance().setVariabileA("Test a");
e

Codice (Java): [Seleziona]
String a = MainApplication.getInstance().getVariabileA();
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline Funesto

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
Re:Condividere variabili tra più Activity
« Risposta #4 il: 26 Aprile 2017, 17:05:57 CEST »
0
Ciao Ohmnibus, grazie per la risposta.

Ho bisogno di ulteriori chiarimenti, dato che sono completamente a zero.

Lo scenario è questo:

Io ho diverse variabili, mettiamo una trentina, che ho bisogno di impostare e richiamare in una decina di "Activity" che fanno parte di un'unica APP. Per facilitare l'esempio, diciamo che nella MainActivity (che AndroidStudio crea di default) inserisco 5 TextView che mostrino i valori di "A", "B", "C","D," ed "E", variabili che sono specificate rispettivamente nella SecondaActivity, TerzaActivity e così via. Il mio problema è dunque quello di leggere ed impostare queste variabili da una qualsiasi delle Activity che fanno parte del progetto.

Nella tua soluzione (dato che sono più che principiante) non ho capito già la primissima indicazione.

Io dovrei creare una nuova classe, quindi: File->New->Java Class che chiamerò ad esempio "VariabiliGlobali".
Questa nuova classe pubblica dovrà estendere quindi MainActivity, giusto?

Poi creo tante variabili quante me ne servono con relativi metodi di lettura e scrittura .... ri-giusto?

Adesso vado a sperimentare ... per ora GRAZIE! :)


EDIT:

Sto avendo problemi con @override (Method does not override from its superclass) e con il manifest:

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.dostalgia.passavariabili">




    <application
       android:allowBackup="true"
       android:icon="@mipmap/ic_launcher"
       android:label="@string/app_name"
       android:roundIcon="@mipmap/ic_launcher_round"
       android:supportsRtl="true"
       android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>


    <application
       android:name="com.dostalgia.app.VariabiliGlobali"
       >
</application>

</manifest>


dice che Attribute android:name is not allowed here! :-/
« Ultima modifica: 26 Aprile 2017, 17:23:27 CEST da Funesto »

Offline iClaude

  • Utente normale
  • ***
  • Post: 311
  • Respect: +25
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S8
  • Sistema operativo:
    Windows 10
Re:Condividere variabili tra più Activity
« Risposta #5 il: 26 Aprile 2017, 18:05:58 CEST »
0
Non esiste un metodo univoco.

Per farla breve, se e solo se si parla di piccole quantità di dati, puoi fare così:

1- Crei una classe che eredita da Application

Codice (Java): [Seleziona]
public class MainApplication extends Application {
  @Override
  public void onCreate() {
    super.onCreate();
  }
}

2- Aggiungi un riferimento a sé stessa, che popoli nella onCreate

Codice (Java): [Seleziona]
public class MainApplication extends Application {

  private static MainApplication selfReference = null;

  @Override
  public void onCreate() {
    super.onCreate();

    selfReference = this;
  }
}

3- Crei un metodo statico per accedere al riferimento dell'application
Codice (Java): [Seleziona]
  public static MainApplication getInstance() {
    return selfReference;
  }

4- Assicurati di aver messo nel manifest il riferimento alla tua classe:

Codice (XML): [Seleziona]
<application
                android:name="com.example.app.MainApplication"
                >

5- Aggiungi tutte le variabili di cui hai bisogno in MainApplication

Codice (Java): [Seleziona]
  String variabileA;

  public String getVariabileA() {
    return variabileA;
  }
  public void setVariabileA(String a) {
    variabileA = a;
  }

A questo punto, in qualsiasi parte del codice puoi fare

Codice (Java): [Seleziona]
MainApplication.getInstance().setVariabileA("Test a");
e

Codice (Java): [Seleziona]
String a = MainApplication.getInstance().getVariabileA();

Ok, per una piccola app per principianti può andare bene così.
Però è meglio ricordare che usare variabili globali non è una buona tecnica di programmazione per tutta una serie di ragioni (possibili bug, difficoltà a fare unit test, ecc.).
Meglio passare le variabili tra le varie Activity o recuperarle da delle fonti comuni (database, preferenze, ecc.).
Ciao.

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 804
  • Respect: +168
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 10 x64
Re:Condividere variabili tra più Activity
« Risposta #6 il: 26 Aprile 2017, 18:11:13 CEST »
0

Sì, concordo in pieno, e l'ho anche ribadito in grassetto :D

Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline Funesto

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
Re:Condividere variabili tra più Activity
« Risposta #7 il: 26 Aprile 2017, 18:12:25 CEST »
0
Uhm ...

Concretamente dovrei gestire diversi "timer" che al raggiungimento di un TOT facciano cose ... e fin qui ci siamo.

Mi consigliate quindi di trovare dei tutorial sulla creazione e sull'uso di Database? In questo database dovrebbero passare variabili quali minuti e secondi di una decina di timer differenti e altre variabili "trigger" (si chiamano così?) che dovrebbero scatenare azioni.

Insomma questo database dovrebbe gestire molte chiamate al secondo .... prima di sapere come si fa, mi chiedo se sia la strada giusta!

Sempre grazie per l'aiuto ed i pareri!

P.S.
Il database sarebbe locale. Quando avrò bisogno di uno online, vi stresserò ancora e per diverse ragioni! :D
« Ultima modifica: 26 Aprile 2017, 18:14:05 CEST da Funesto »