Guide de développement

Local Navigation

Définition d'une classe EntityBasedSearchable pour vos objets SearchableEntity

Votre implémentation de l'interface EntityBasedSearchable gère la relation entre le service de recherche unifiée et les entités de recherche que vous créez. Chaque objet EntityBasedSearchable gère un groupe d'objets SearchableEntity présentant les mêmes propriétés de recherche.
  1. Importez les classes et les interfaces requises.
    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. Créez des variables d'instance pour stocker les informations adaptées à votre 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. Dans le constructeur, créez un tableau d'objets SearchField. Chaque objet SearchField stocke le nom d'une propriété de recherche de vos données. Dans l'échantillon de code suivant, les objets de données d'application gérés par cette classe ont trois propriétés pouvant faire l'objet d'une recherche. Par exemple, si vos données d'application modélisent des livres, ces champs pourraient inclure le titre, l'éditeur et le nombre de pages.
    class MyEBS implements EntityBasedSearchable
    {
        _searchFields = new SearchField[3];
  4. Donnez un nom parlant à chaque objet SearchField.
        _searchFields[0] = new SearchField("Title");
        _searchFields[1] = new SearchField("Publisher");
        _searchFields[2] = new SearchField("Number of pages");
    }
  5. Créez une icône à afficher dans les résultats de recherche, incluant les entités de recherche gérées par votre classe EntityBasedSearchable. Pour plus d'informations sur la création d'icônes, voir la section « Personnaliser l'apparence de vos données dans les résultats de recherche ».
  6. Implémentez getType(). Renvoyez le type de contenu qui correspond le mieux à vos données d'application. Pour obtenir une liste des types de contenu valides, reportez-vous à l'interface net.rim.device.api.unifiedsearch.searchables.SearchableContentTypeConstants dans la référence API.
    public long getType() {
        return SearchableContentTypeConstants.CONTENT_TYPE_MEMO;
  7. Choisissez les initiateurs de recherche qui devraient recevoir les résultats de recherche de votre application. Pour plus d'informations à propos de la mise à disposition de vos données pour les recherches, reportez-vous à la classe net.rim.device.api.unifiedsearch.entity.ExposureLevel dans la référence API.
    public int getPrivacyLevel() {
        return ExposureLevel.LEVEL_PUBLIC;
    }
  8. Implémentez load(). Si le terminal BlackBerry est occupé, ou que le niveau de charge de la pile est bas, vous pouvez avoir besoin d'interrompre momentanément le fonctionnement de cette méthode, et de le reprendre à la demande.
    1. Pour votre classe EntityBasedSearchable, déterminez le nombre d'objets de données pouvant coexister dans votre application.
      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. Utilisez une boucle while pour remplir un tableau d'entités de recherche.
          Enumeration objects = myObjects.elements();
          int count = 0;
          while (objects.hasMoreElements()) {
    3. Vérifiez si le service de recherche unifiée a envoyé une commande pause. Si oui, interrompez momentanément l'opération de remplissage de votre tableau d'entités pouvant faire l'objet d'une recherche et notifiez le service.
              if (_wait){ 
                  try {
                      synchronized(_monitor) { 
                      observer.partiallyCompleted(this, null, NotificationListener.TYPE_SEARCHABLE);
                      _monitor.wait();
                      }
                  } catch (InterruptedException e){
                      observer.error(e);
                      return;
                  }
              }
    4. Lorsque votre application a de nouveau le contrôle du thread, continuez à remplir votre tableau d'entités pouvant faire l'objet d'une recherche.
              MyObject dataObject = (MyObject) objects.nextElement();
              _myEntities[count++] = new MySearchableEntity(dataObject, this);
          }
    5. Avertissez le service de recherche unifiée lorsque le chargement de vos données est terminé.
          observer.completed(this, NotificationListener.TYPE_SEARCHABLE);
      }
    Le service de recherche unifiée appelle ensuite getSearchableEntities() pour récupérer le tableau que vous avez rempli.
  9. Dans pause(), définissez la valeur de la variable _wait sur true. Le service de recherche unifiée appelle cette méthode lorsqu'il souhaite que votre application arrête le chargement des données.
    public void pause() {
        _wait = true;
    }
  10. Dans resume(), définissez la valeur de la variable _wait sur false. De plus, informez la méthode load() du fait qu'elle peut reprendre l'exécution. Le service de recherche unifiée appelle resume() lorsqu'il souhaite que votre application reprenne le chargement de données.
    public void resume() {
        _wait = false;
        synchronized(_monitor) {
            _monitor.notifyAll();
        }
    }
  11. Dans getSearchableEntities(), renvoyez le tableau _myEntities que vous avez créé à l'étape 8.
    public SearchableEntity[] getSearchableEntities() {
        return _myEntities;
    }

Ces informations vous ont-elles été utiles ? Envoyez-nous vos commentaires.