2012-03-16 10 views
6

Sto sviluppando un'applicazione Android. Ho alcune attività in esso. E devo avere un oggetto che può essere disponibile da tutte le attività. Qualche idea su come organizzarlo?Oggetto globale dell'app Android

+0

cosa intendi con "oggetto globale"? Se intendi una classe disponibile in tutta l'applicazione, guarda questa discussione http://androidforums.com/developer-101/124278-global-objects.html – evilone

+0

Nella mia situazione deve essere un oggetto di qualche classe. In tutte le attività devo usare i metodi di questo oggetto, aggiungere dati nei campi dell'oggetto e così via. – mmmaaak

risposta

11

Utilizzare l'Application oggetto globale nel modo seguente:

package com.yourpackagename; 

public class App extends Application { 
} 

In AndroidManifest.xml:

<application android:name=".App"> 

di accedervi da un Activity:

App globalApp = (App) getApplicationContext(); 

La classe App sarà istanziato automaticamente all'avvio dell'app. Sarà disponibile fino a quando il processo di applicazione è vivo. Può agire come un negozio globale nel quale puoi mettere le tue cose e averne accesso per tutta la durata dell'applicazione.

+0

Mi sembra che ci siano errori di battitura in questo, ma non so quali correggere!:) –

+1

corretti errori di battitura. sentiti libero di commentare se mi manca qualcosa. –

+0

La definizione della classe iniziale è 'GolbalObject', ma il tuo utilizzo è' GlobalObject' .. –

3

Ci sono alcuni modi per farlo. Se l'oggetto che si desidera condividere è una stringa (o facilmente descritta con una stringa), raccomanderei lo Shared Preferences. Serve come un negozio di valore chiave per la condivisione di dati all'interno di un'applicazione.

Se questo non è il caso (cioè l'idoneità di una stringa), potresti considerare di passarlo come un extra con l'Intent che lancia le tue varie attività. Per esempio:

Intent newActivity = new Intent(CurrentActivity.class, ActivityToLaunch.class); 
newActivity.putExtra("object_key", Bundle_With_Your_Object); 

Per maggiori dettagli su questa strategia (in particolare sulla classe Bundle, se non hai familiarità), leggevo this Android doc.

1

È possibile utilizzare SharedPreferences in questo caso:

Per aggiungere o modificare:

SharedPreferences prefs = this.getSharedPreferences("Cusom Name", Activity.MODE_PRIVATE); 
prefs.edit().putString("your_key", value).commit(); 

Per cancellare:

SharedPreferences prefs = this.getSharedPreferences("Cusom Name", Activity.MODE_PRIVATE); 
prefs.edit().clear(); 

per ottenere il valore:

SharedPreferences prefs = this.getSharedPreferences("Cusom Name", Activity.MODE_PRIVATE);    
String value = prefs.getString("your_key", ""); 
+0

ciò presuppone che l'oggetto che il manifesto desidera condividere sia una stringa, che può essere o non essere una buona ipotesi; sebbene, forse la soluzione "migliore" sia avere un toString e un costruttore tale che Object x = new Object (y.toString()); darà una x che è equivalente a y? – mfrankli

+0

Penso che abbia bisogno di alcuni attributi di un oggetto invece di un oggetto reale. Passare l'oggetto su un intent è un altro buon modo, ma il codice per inviarlo e gestirlo è complesso. – PhatHV

0

Innanzitutto, creare una classe denominata MasterActivity che estenda Activity e definisca il proprio oggetto globale.

public class MasterActivity extends Activity 
{ 
    public Object mObject; 
} 

Quindi, è necessario estendere la classe di attività principale con il tuo MasterActivity simile al primo:

// your main activity 
public class MainActivity extends MasterActivity 
{ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     // you can now use mObject in your main class 
     mObject.yourmethod(); 
    } 
} 

In questo modo, sarete in grado di utilizzare l'oggetto in tutte le vostre attività semplicemente estendendo MasterActivity invece di attività.