2012-04-11 6 views
4

Я работаю с android и ormlite. У меня возникла проблема при инициализации ForeignCollection.Где я могу найти ApplicationContext для инициализации ORMLite?

Я нашел это, чтобы инициализировать его: dao.getEmptyForeignCollection()

Но для дао, мне нужно DatabaseHelper, и для databasehelper мне нужно ApplicationContext, но в сущности я не контекст. есть ли другой вариант?

И это Код, его отношение 1: n. Класс команды:

@DatabaseField(canBeNull = true, foreign = true) 
private Club club; 

Class Club:

@DatabaseField(canBeNull = true, foreign = true) 
private ForeignCollection<Team> teams; 

Спасибо за помощь

ответ

2

Ваш вопрос не о зарубежных коллекциях, а о том, как ORMLite подключается к Android. Все это объясняется в документации:

http://ormlite.com/docs/android

Вы конкретно спросил:

Но для дао, мне нужно DatabaseHelper, и для помощника базы данных я нужен приложение Context, но в сущности у меня нет контекста. есть ли другой вариант?

Под Android, каждый класс, который расширяет Activity, ListActivity, Service и TabActivityтакже является Context.Вы можете увидеть иерархию классов из online docs:

java.lang.Object 
    ↳ android.content.Context 
     ↳ android.content.ContextWrapper 
      ↳ android.view.ContextThemeWrapper 
       ↳ android.app.Activity 

Если вы посмотрите на Android example проектов, доступных на веб-сайте вы можете увидеть, как правило, подключается андроида приложения:

  • Ваш главный Activity расширяет OrmLiteBaseActivity

    public class HelloAndroid extends OrmLiteBaseActivity<DatabaseHelper> { 
    
  • onCreate метод OrmLiteBaseActivity строит ваши DatabaseHelper используя ORMLite OpenHelperManager и себя как Context:

    OpenHelperManager.getHelper(this.getApplicationContext()); 
    
  • используется метод OrmLiteBaseActivity.getHelper(), чтобы получить доступ к помощнику, для создания объектов DAO, так что вы можете сохраняться вещи в базу данных.

1

Вы должны вводить необходимые зависимости.

Если вы нуждаетесь в помощнике базы данных, дайте это. Если вашему помощнику базы данных нужен контекст, укажите его.

Обеспечение конструкторов классов, которые делают обязательную необходимую зависимость:

public DataHelper(Context context) { 
    this.context = context; 
} 

Тогда из вашей деятельности или модели приложения, используйте

new DataHelper(this); 

вводить зависимость.

Априорно было бы интересно использовать класс приложения, который предоставит общий контекст для вашего помощника базы данных, больше, чем создание нового помощника базы данных для каждого вида деятельности в методе onCreate.

+1

Вы имеете в виду что-то вроде этого [link] (http://stackoverflow.com/questions/987072/using-application-context-everywhere). Или еще что-то вроде этого 'public Club (контекст контекста, название строки) { \t this.name = name; } ' – Flow

+0

Именно это :) Счастливое кодирование. – Snicolas

+0

Спасибо за помощь – Flow

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

  • Нет связанных вопросов^_^