2014-02-21 5 views
17

Ich habe die Android.Application-Klasse erweitert, sodass ich den Status beibehalten kann (mit der Anwendung als Singleton).Verwenden von Sugar ORM bei Verwendung der Singleton-Anwendungsklasse

Ich möchte jetzt die Sugar ORM-Bibliothek verwenden, um meinen Datenbankzugriff zu vereinfachen, aber die Sugar-Dokumentation (http://satyan.github.io/sugar/getting-started.html) erfordert, dass ich 'SugarApp' als meine Anwendungsklasse in AndroidManifest.xml festlege.

Welche Konflikte mit meiner Application-Klasse, die Android-Anwendung erweitert.

Gibt es einen alternativen Ansatz?

Von dem Zucker docs:

Z.B. indem Sie das Attribut android: name des Anwendungs-Tags ändern.

<application android:label="@string/app_name" android:icon="@drawable/icon" 
android:name="com.orm.SugarApp"> 
. 
. 
<meta-data android:name="DATABASE" android:value="sugar_example.db" /> 
<meta-data android:name="VERSION" android:value="2" /> 
<meta-data android:name="QUERY_LOG" android:value="true" /> 
<meta-data android:name="DOMAIN_PACKAGE_NAME" android:value="com.example" /> 
. 
. 
</application> 

Antwort

55

Beantwortung meiner Frage -tut tut ;-)

Es ist einfach, änderte ich meine Gewohnheit App nur Klasse SugarApp statt Android.Application zu verlängern, wie SugarApp selbst android app erweitert!

+1

Stellen Sie sicher, Android: name = ". MyApplication" anstelle von Android: name = "com.orm.SugarApp" in AndroidManifest – Andrew

+0

Das hat bei mir funktioniert! Doch plötzlich versagten meine Unittests. Eine Lösung dafür finden Sie [hier] (https://stackoverflow.com/questions/27964666/testing-with-sugarorm-and-robolectric/44421666#44421666): Die angenommene Antwort enthält jedoch keine benutzerdefinierte App-Klasse, bitte überprüfen Sie meine zusätzliche Antwort. –

9

Wenn Sie einen Blick auf SugarApp Klasse zu nehmen, werden Sie feststellen, dass es die onCreate zwingende Anwendung Klasse erweitert() & OnTerminate() -Methoden seine Gerüst tun:

@Override 
public void onCreate() { 
    super.onCreate(); 
    SugarContext.init(this); 
} 

@Override 
public void onTerminate() { 
    super.onTerminate(); 
    SugarContext.terminate(); 
} 

Das einzige, was Sie tun müssen, wenn Sie möchten, dass Ihre Basisanwendungsklasse diese Methodenaufrufe zu Ihrer benutzerdefinierten Klasse hinzufügt.

Auf diese Weise können Sie Ihre benutzerdefinierte Anwendungsklasse beibehalten, anstatt die SugarApp-Klasse zu erweitern.

+0

Schöne Alternative zur angenommenen Antwort, sicher wird es anderen Lesern helfen. Vielen Dank – DEzra

Verwandte Themen