2012-03-16 17 views
6

Zajmuję się tworzeniem aplikacji na Androida. Mam kilka działań w tym. I muszę mieć obiekt, który może być dostępny ze wszystkich działań. Jakieś pomysły, jak to zorganizować?Globalny obiekt aplikacji na Androida

+0

co masz na myśli przez "obiekt globalny"? Jeśli masz na myśli klasę, która jest dostępna w całej aplikacji, spójrz na ten wątek http://androidforums.com/developer-101/124278-global-objects.html – evilone

+0

W mojej sytuacji musi to być obiekt jakiejś klasy. We wszystkich działaniach muszę używać metod tego obiektu, dodawać dane do pól obiektu i tak dalej. – mmmaaak

Odpowiedz

11

Użyj globalnego Application obiekt w następujący sposób:

package com.yourpackagename; 

public class App extends Application { 
} 

W AndroidManifest.xml:

<application android:name=".App"> 

Aby uzyskać do niego dostęp z Activity:

App globalApp = (App) getApplicationContext(); 

Klasa App będzie tworzone automatycznie po uruchomieniu aplikacji. Będzie on dostępny, o ile proces aplikacji jest żywy. Może działać jako globalny sklep, w którym możesz umieścić swoje rzeczy i mieć do nich dostęp przez cały okres użytkowania aplikacji.

+0

Mam wrażenie, że w tym jest trochę literówek, ale nie wiem, które z nich poprawić!:) –

+1

poprawiono literówki. nie krępuj się komentować, jeśli czegoś brakuje. –

+0

Twoja początkowa definicja klasy to 'GolbalObject', ale twoje użycie to' GlobalObject' .. –

3

Istnieje kilka sposobów, aby to zrobić. Jeśli obiektem, który chcesz udostępnić, jest Ciąg (lub łatwo opisany za pomocą ciągu znaków), polecam Shared Preferences. Służy jako magazyn klucz-wartość do udostępniania danych w aplikacji.

Jeśli tak nie jest (tj. Przydatność napisu), można rozważyć przekazanie go jako dodatkowego z intencją, która uruchamia różne działania. Na przykład:

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

więcej szczegółów na temat tej strategii (szczególnie o klasie Bundle, jeśli nie jesteś zaznajomiony), chciałbym przeczytać this Android doc.

1

Można użyć SharedPreferences w tym przypadku:

Aby dodać lub edytować:

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

Aby wyczyścić:

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

Aby uzyskać wartość:

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

zakłada to, że obiektem, który chce udostępnić plakat, jest Ciąg, który może, ale nie musi być dobrym założeniem; chociaż być może najlepszym rozwiązaniem jest toString i konstruktor taki, że Object x = new Object (y.toString()); da wartość x równoważną y? – mfrankli

+0

Myślę, że potrzebuje pewnych atrybutów obiektu zamiast prawdziwego obiektu. Przekazywanie obiektu przez intencję to kolejna dobra metoda, ale kod wysyłania i obsługi jest złożony. – PhatHV

0

Najpierw utwórz klasę o nazwie MasterActivity, która rozszerza działanie i definiuje obiekt globalny.

public class MasterActivity extends Activity 
{ 
    public Object mObject; 
} 

Następnie trzeba rozszerzyć swoją główną klasę aktywności z MasterActivity podoba:

// 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(); 
    } 
} 

W ten sposób, będzie można korzystać z obiektu we wszystkich swoich działaniach po prostu poprzez rozszerzenie MasterActivity zamiast aktywności.

Powiązane problemy