2014-02-21 1 views
17

Я расширил класс Android.Application, чтобы сохранить состояние (используя приложение в качестве одноэлементного).Использование Sugar ORM, когда также используется однопользовательский класс приложения

Однако теперь я хочу использовать библиотеку Sugar ORM для упрощения доступа к базе данных, но для документов Sugar (http://satyan.github.io/sugar/getting-started.html) требуется указать «SugarApp» в качестве моего класса приложения в AndroidManifest.xml.

Какие столкновения с моим классом приложений, который расширяет приложение Android.

Есть ли альтернативный подход?

Из документов Сахар:

Э.Г. путем изменения атрибута android: name тега приложения.

<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> 

ответ

55

Отвечая на мой собственный вопрос -tut Тута ;-)

Это просто, я просто изменил мой класс пользовательского приложения для расширения SugarApp вместо Android.Application, так как сам SugarApp расширяет приложение для Android!

+1

Убедитесь, что андроид: name = ". MyApplication" вместо android: name = "com.orm.SugarApp" в AndroidManifest – Andrew

+0

Это сработало для меня! Однако внезапно мои унитаты потерпели неудачу. Решение для этого можно найти здесь (https://stackoverflow.com/questions/27964666/testing-with-sugarorm-and-robolectric/44421666#44421666): Однако принятый ответ не включает пользовательский класс приложения, поэтому, пожалуйста, ознакомьтесь с моим дополнительным ответом. –

9

Если вы посмотрите на класс SugarApp, вы обнаружите, что он расширяет класс Application переопределении в OnCreate() & OnTerminate() методы делают его подмостки:

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

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

Единственное, что вы должны делать, если вы хотите сохранить свой базовый класс приложения, чтобы добавить эти вызовы методов в свой собственный класс.

Таким образом, вы можете сохранить свой собственный класс приложений вместо расширения класса SugarApp.

+0

Хорошая альтернатива принятому ответу, конечно, это поможет другим читателям. благодаря – DEzra

Смежные вопросы