Передача курсора в действие? - PullRequest
2 голосов
/ 16 октября 2010

Возможно ли это?Я пытаюсь открыть курсор базы данных SQLite в одном действии и передать его другому.

Ответы [ 3 ]

5 голосов
/ 10 декабря 2011

Другой способ сделать это, который может быть проще, - создать класс Application для вашего приложения.Это гарантированно будет создано только один раз и существует в течение всего времени жизни вашего приложения.Помимо всего прочего, он может обеспечить возможность «концентратора данных» для вашего приложения, чтобы различные действия могли легко обмениваться данными.Таким образом, для вашего курсора вы просто использовали бы переменную-член класса Application следующим образом (предупреждение, я скопировал этот код из своего приложения и отредактировал его здесь, так что никакой гарантии компиляции. Просто что-то, чтобы показать идею.):

    package com.jcascio.k03;

    import android.app.Application;
    import android.database.Cursor;

// use your application's name instead of "K03Application"

        public class K03Application extends Application { 

        public final String TAG = "K03";

        Cursor sharedCursor; // this cursor can be shared between different Activities

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

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


        public Cursor getSharedCursor() 
        {
            return this.sharedCursor;
        }

        public void setSharedCursor(Cursor c)
        {
            this.sharedCursor = c;
        }

    }

Объект приложения может быть выбран из любого действия, используя

    this.getApplication()

// You cast it to your Application sub-class and call the Cursor accessor function

Cursor c = ((K03Application)this.getApplication()).getSharedCursor();

Итак, ваше первое действие получит некоторую липучку из базы данных, которая возвращается ему в виде курсора.Это действие вызовет setSharedCursor в приложении.Затем он запускает второе действие, которое вызывает getSharedCursor в своей функции onCreate (или любой другой функции в этом отношении) для извлечения курсора.

3 голосов
/ 16 октября 2010

Лично я не знаю ни одного простого способа сделать это.Возможно, будет проще снова сделать запрос в целевой операции.

1 голос
/ 18 октября 2010

Вы должны написать свой собственный курсор, который будет реализовывать интерфейс Parcelable. В этом случае вы можете поместить курсор в пакет и отправить его в другое действие через putExtra (). В целевой деятельности вы можете взорвать (на самом деле просто найдите его через обработчик) курсор с помощью одного из методов Parcel (связанных с Binder).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...