Android Cursore con ORMLite per l’uso in CursorAdapter

C’è un modo, come arrivare Cursore per una query, che io sono l’elaborazione con ORMLite oggetto Dao?

InformationsquelleAutor sealskej | 2011-08-23

 

4 Replies
  1. 64

    ORMLite ora supporta next(), previous(), moveRelative(offset), … metodi sul CloseableIterator classe. Questo dovrebbe consentire il movimento del sottostante Cursor oggetto attorno a volontà.

    Supporta anche i seguenti DAO Cursore metodi:

    • dao.mapSelectStarRow(databaseResults) Ritorno l’ultima riga dal database i risultati di una query di select *. Con questo si può modificare la posizione del cursore (per esempio) e quindi ottenere l’oggetto corrente.
    • dao.getSelectStarRowMapper() Fornisce un mapper che è possibile utilizzare per mappare l’oggetto al di fuori del Dao.

    Quando si crea una query con ORMLite, è possibile utilizzare il QueryBuilder oggetto. queryBuilder.prepare() restituisce un PreparedQuery che è utilizzato da vari metodi di DAO. È possibile chiamare dao.iterator(preparedQuery) che restituirà un CloseableIterator che viene utilizzato per scorrere i risultati. C’è un iterator.getRawResults() per ottenere l’accesso a DatabaseResults classe. Sotto Android, questo può essere convertito in un AndroidDatabaseResults che ha un getCursor() metodo per tornare Android Cursor.

    Qualcosa di simile al codice riportato di seguito:

    // build your query
    QueryBuilder<Foo, String> qb = fooDao.queryBuilder();
    qb.where()...;
    // when you are done, prepare your query and build an iterator
    CloseableIterator<Foo> iterator = dao.iterator(qb.prepare());
    try {
       // get the raw results which can be cast under Android
       AndroidDatabaseResults results =
           (AndroidDatabaseResults)iterator.getRawResults();
       Cursor cursor = results.getRawCursor();
       ...
    } finally {
       iterator.closeQuietly();
    }

    Questo è un po ‘ complicato, ma si sono sicuramente dover peer dietro la vallata per arrivare a questo oggetto che è nascosto dall’astrazione del database classi.

    • come posso ottenere il databaseConnection?
    • Ho cambiato questa risposta per mostrare come si può essere fatto senza bisogno di una connessione al database.
    • Qual è il modo migliore per gonfiare il list_item vista utilizzando il cursore? Inoltre, è un CursorAdapter la cosa migliore da utilizzare con OrmLiteBaseListActivity?
    • Mi dispiace @mattblang. Io non sono uno sviluppatore Android. Vorrei chiedere a quella domanda sulla mailing list: groups.google.com/forum/#!forum/ormlite-android
    • il tuo contributo in MODO particolare per quanto riguarda ORMLite è molto apprezzato, tnx
    • Grazie mille @dakait.
    • quando si utilizza questa strategia e passare il cursore fuori per un SimpleCursorAdapter o CursorAdapter sottoclasse del mio usato con Android Griglia/ListView, ho un StaleDataException — ho notato commentando le iterator.closeQuietly() impedisce che ciò accada. Cosa suggeriresti per il lavoro-tutto questo-oltre che a mantenere l’iteratore intorno fino a che ho fatto con il cursore?
    • Sì, stesso problema qui. Cosa si finisce per fare?

  2. 0

    Fatto provare alcuni di Grigio consigli da questo post? Egli spiega come è possibile selezionare una colonna di un altro nome, ad esempio, selezionare l’id _id.

    • Dal momento che è possibile assegnare un nome alle colonne ormlite credo perché non solo di nome, li _id, piuttosto che fare l’selezionare 🙂 ?
    • Certo, è possibile, ma in un caso in cui la ridenominazione di loro non è un’opzione, è sufficiente utilizzare la sintassi sql di “come”;)
    • vero che hai un punto 🙂
  3. 0

    Se hai un’Attività e non si vuole pasticciare con il Generatore di dare un andare,, che è altrettanto efficace.

    Cursor cursor = getHelper().getReadableDatabase().query(tableName, projection, selection, selectionArgs, groupBy, having, sortOrder)
  4. 0

    Se intendi il getHelper() metodo per raggiungere i metodi dao creare etc. hai solo ereditare dalla OrmLiteBaseActivity<YourDBHelper> e si può chiamare. Apparirà qualcosa di simile a questo:

    public class YourClass extends OrmLiteBaseActivity<YourDBHelper> {
      @Override
      protected void onCreate(Bundle savedInstanceState) {
         ...
         getHelper().getDao().queryForAll();
         ...
      }
    }

    Se intendi il cursore per gestire il funzionamento del database: non credo che si può raggiungere! Ma non capisco perché si dovrebbe bisogno. ORMLite ha quasi tutte le funzioni del cursore. Così che cosa avete bisogno per?

    • So che su questo, ma ho bisogno di Cursore da utilizzare in CursorAdapter.

Lascia un commento