Как передать адаптер базы данных в другой вид деятельности? - PullRequest
3 голосов
/ 11 мая 2011

У меня проблемы с пониманием диалогового окна поиска в Android SDK.

«Основным видом деятельности» моего приложения является кнопка. Если пользователь нажимает эту кнопку, вызывается диалоговое окно поиска. Сам поиск затем выполняется в асинхронной задаче, так как для этого может потребоваться некоторое время. Пока все хорошо.

Основное действие также создает объект адаптера базы данных, который используется для инициализации базы данных, выполнения запросов и т. Д. Но как я могу использовать этот объект адаптера в операции поиска?

ОСНОВНАЯ активность
// Init database<br> DatabaseAdapter dba = new DatabaseAdapter();<br> dba.init();<br> // open search dialog<br> if (buttonClick) onSearchRequest();

Активность для поиска

  1. Получить намерение и получить запрос из диалогового окна поиска -> ОК
  2. Как снова использовать адаптер базы данных для выполнения запроса?

Должен ли я создать новый объект? Могу ли я как-нибудь передать его из минимальной активности в поисковую активность, [...]?

Спасибо
Роберт

Ответы [ 3 ]

8 голосов
/ 11 мая 2011

Вы можете создать адаптер в классе Application и получить его во всех ваших действиях. Это то, что я делаю для своих проектов.

public class ApplicationClass extends Application {

    Adapter adapter.

    @Override 
    public void onCreate(){
    adapter=new Adapter();
        super.onCreate();
    }

    public Adapter getAdapter(){
        return adapter;
    }

}

Тогда звоните из Активности:

Adapter adapter=(ApplicationClass)getApplication().getAdapter();

Нечто подобное. ApplicationClass для вашего имени приложения. Может быть MyAppNameApplication Вы должны создать его в своем пакете и затем объявить в AndroidManifest.xml

3 голосов
/ 11 мая 2011

Один из вариантов - использовать одиночный код и предоставлять доступ к DatabaseAdapter статическим методом. Пример:

private static DatabaseAdapter sWritableAdapter = null;
private static DatabaseAdapter sReadableAdapter = null;

public static DatabaseAdapter openForReading(Context ctx) {
    if(sReadableAdapter == null)
    sReadableAdapter = new DatabaseAdapter(new DatabaseHelper(ctx).getReadableDatabase());

    return sReadableAdapter;

}

или для доступа на запись:

public static DatabaseAdapter openForWriting(Context ctx) {
if(sWritableAdapter == null)
        sWritableAdapter = new DatabaseAdapter(new DatabaseHelper(ctx).getWritableDatabase());

    return sWritableAdapter;

}

Итак, в своей поисковой деятельности вы бы написали, например:

DatabaseAdapter adapter = DatabaseAdapter.openForReading(ctx);
adapter.searchSomething();

Marco

0 голосов
/ 11 мая 2011

Вы должны скорее реализовать ContentProvider

http://developer.android.com/guide/topics/providers/content-providers.html

Они являются синглетонами и доступны (почти) везде в вашем приложении.

...