Guida allo sviluppo

Local Navigation

Definizione di una classe EntityBasedSearchable per gli oggetti SearchableEntity

L'implementazione dell'interfaccia EntityBasedSearchable consente di gestire la relazione tra il servizio Unified Search e le entità ricercabili create dall'utente. Ogni oggetto EntityBasedSearchable gestisce un gruppo di oggetti SearchableEntity dotati delle stesse proprietà ricercabili.
  1. Importare le classi e le interfacce richieste.
    import net.rim.device.api.unifiedsearch.SearchField;
    import net.rim.device.api.unifiedsearch.searchables.EntityBasedSearchable;
    import net.rim.device.api.unifiedsearch.searchables.SearchableContentTypeConstants;
    import net.rim.device.api.unifiedsearch.searchables.Searchable;
  2. Creare le variabili di istanza per memorizzare le informazioni pertinenti a EntityBasedSearchable.
    private MySearchableEntity[] _myEntities; // You will need this in steps 8 and 11
    private long _registrationID;
    private SearchField[] _searchFields;
    private Image _icon;
    private final Object _monitor = new Object();
    private boolean _wait = false;
  3. Nel costruttore, creare una matrice di oggetti SearchField. Ogni SearchField memorizza il nome di una proprietà ricercabile dei dati. Nel seguente esempio di codice, gli oggetti dei dati delle applicazioni, gestiti da questa classe, sono dotati di tre proprietà ricercabili. Ad esempio, se i dati delle applicazioni hanno modellato dei libri, questi campi potrebbero includere il titolo, il distributore e il numero di pagine.
    class MyEBS implements EntityBasedSearchable
    {
        _searchFields = new SearchField[3];
  4. Assegnare un nome significativo a ogni SearchField.
        _searchFields[0] = new SearchField("Title");
        _searchFields[1] = new SearchField("Publisher");
        _searchFields[2] = new SearchField("Number of pages");
    }
  5. Creare un'icona da visualizzare nei risultati della ricerca, che includono le entità ricercabili gestite da questo oggetto EntityBasedSearchable. Per ulteriori informazioni sulla creazione di icone, consultare la sezione "Personalizzazione della modalità di visualizzazione dei dati nei risultati della ricerca".
  6. Implementare getType(). Restituire il tipo di contenuto che corrisponde meglio ai dati delle applicazioni. Per un elenco dei tipi di contenuto validi, vedere l'interfaccia net.rim.device.api.unifiedsearch.searchables.SearchableContentTypeConstants nel riferimento API.
    public long getType() {
        return SearchableContentTypeConstants.CONTENT_TYPE_MEMO;
  7. Scegliere gli iniziatori della ricerca che devono ricevere i risultati della ricerca dall'applicazione. Per ulteriori informazioni sull'esposizione dei dati per le ricerche, vedere la classe net.rim.device.api.unifiedsearch.entity.ExposureLevel nel riferimento API.
    public int getPrivacyLevel() {
        return ExposureLevel.LEVEL_PUBLIC;
    }
  8. Implementare load(). Se il dispositivo BlackBerry è occupato o il livello di carica della batteria è basso, potrebbe essere necessario interrompere momentaneamente il funzionamento di questo metodo e riprenderlo quando richiesto.
    1. Per EntityBasedSearchable, determinare il numero di oggetti dati attualmente esistenti nell'applicazione.
      public void load (NotificationListener observer, int loadType) {
          Vector myObjects = MyObjectManager.getDataObjects();
          if (myObjects != null) {
              int size = myObjects.size()
              if(size < 1) {
                  _myEntities = new MySearchableEntity[0]; 
              } else {
                  _myEntities = new MySearchableEntity[size];
              }
          } else {
              // handle the condition where you have no data objects
          }
    2. Utilizzare un loop while per compilare una matrice di entità ricercabili.
          Enumeration objects = myObjects.elements();
          int count = 0;
          while (objects.hasMoreElements()) {
    3. Verificare se il servizio Unified Search ha inviato un comando pause. In caso affermativo, interrompere momentaneamente l'operazione di compilazione della matrice di entità ricercabili e inviare una notifica al servizio.
              if (_wait){ 
                  try {
                      synchronized(_monitor) { 
                      observer.partiallyCompleted(this, null, NotificationListener.TYPE_SEARCHABLE);
                      _monitor.wait();
                      }
                  } catch (InterruptedException e){
                      observer.error(e);
                      return;
                  }
              }
    4. Quando l'applicazione riprende il controllo del thread, continuare a compilare la matrice di entità ricercabili.
              MyObject dataObject = (MyObject) objects.nextElement();
              _myEntities[count++] = new MySearchableEntity(dataObject, this);
          }
    5. Notificare al servizio Unified Search l'avvenuto caricamento dei dati.
          observer.completed(this, NotificationListener.TYPE_SEARCHABLE);
      }
    Il servizio Unified Search richiama getSearchableEntities() oltre a recuperare la matrice compilata dall'utente.
  9. In pause(), impostare la variabile _wait su true. Il servizio Unified Search chiama questo metodo quando desidera che l'applicazione interrompa il caricamento dei dati.
    public void pause() {
        _wait = true;
    }
  10. In resume(), impostare la variabile _wait su false. Inoltre, notificare al metodo load() che può riprendere l'esecuzione. Il servizio Unified Search richiama resume() quando desidera che l'applicazione riprenda il caricamento dei dati.
    public void resume() {
        _wait = false;
        synchronized(_monitor) {
            _monitor.notifyAll();
        }
    }
  11. In getSearchableEntities(), restituire la matrice _myEntities creata nel passaggio 8.
    public SearchableEntity[] getSearchableEntities() {
        return _myEntities;
    }

Le informazioni sono state utili? Inviateci i vostri commenti.