Guía de desarrollo

Local Navigation

Definir una clase EntityBasedSearchable para sus objetos SearchableEntity.

Su implementación de la interfaz EntityBasedSearchable administra la relación entre el servicio de búsqueda unificada y las entidades que cree y se puedan buscar. Cada objeto EntityBasedSearchable administra un grupo de objetos SearchableEntity que tienen las mismas propiedades que se pueden buscar.
  1. Importe las clases y las interfaces necesarias.
    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. Cree las variables de instancia para almacenar información que sea pertinente a su 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. En el constructor, cree una matriz de objetos SearchField. Cada SearchField almacena el nombre de una propiedad de sus datos que se puede buscar. En el siguiente ejemplo de código, los objetos de datos de aplicación administrados por esta clase tienen tres propiedades que se pueden buscar. Por ejemplo, si los datos de su aplicación modelaron libros, estos campos pueden incluir el título, el editor y el número de páginas.
    class MyEBS implements EntityBasedSearchable
    {
        _searchFields = new SearchField[3];
  4. Asigne un nombre significativo a cada SearchField.
        _searchFields[0] = new SearchField("Title");
        _searchFields[1] = new SearchField("Publisher");
        _searchFields[2] = new SearchField("Number of pages");
    }
  5. Cree un icono que aparecerá en los resultados de búsqueda que incluyan las entidades que se pueden buscar administradas por EntityBasedSearchable. Para obtener más información acerca de crear iconos, consulte "Personalización de la apariencia de sus datos en los resultados de la búsqueda ".
  6. Implemente getType(). Devuelva el tipo de contenido que encaje mejor con los datos de su aplicación. Para ver una lista de tipos de contenido válidos, consulte la interfaz net.rim.device.api.unifiedsearch.searchables.SearchableContentTypeConstants en la referencia de la API.
    public long getType() {
        return SearchableContentTypeConstants.CONTENT_TYPE_MEMO;
  7. Elija los iniciadores de búsqueda que deben recibir resultados de búsqueda desde su aplicación. Para obtener más información acerca de la exposición de sus datos a las búsquedas, consulte la clase net.rim.device.api.unifiedsearch.entity.ExposureLevel en la referencia de la API.
    public int getPrivacyLevel() {
        return ExposureLevel.LEVEL_PUBLIC;
    }
  8. Implemente load(). Si el dispositivo BlackBerry está ocupado o el nivel de batería es bajo, puede que tenga que detener la operación de este método y reanudarlo cuando le sea solicitado.
    1. Para EntityBasedSearchable, determine cuántos objetos de datos existen actualmente en su aplicación.
      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. Utilice un bucle while para rellenar una matriz de entidades que se pueden buscar.
          Enumeration objects = myObjects.elements();
          int count = 0;
          while (objects.hasMoreElements()) {
    3. Compruebe si el servicio de búsqueda unificada ha enviado un comando pause. Si es así, detenga la operación que rellena su matriz de entidades que se pueden buscar y notifíqueselo al Servicio.
              if (_wait){ 
                  try {
                      synchronized(_monitor) { 
                      observer.partiallyCompleted(this, null, NotificationListener.TYPE_SEARCHABLE);
                      _monitor.wait();
                      }
                  } catch (InterruptedException e){
                      observer.error(e);
                      return;
                  }
              }
    4. Cuando su aplicación recupere el control del subproceso, continúe rellenando su matriz de entidades que se pueden buscar.
              MyObject dataObject = (MyObject) objects.nextElement();
              _myEntities[count++] = new MySearchableEntity(dataObject, this);
          }
    5. Notifique al Servicio de búsqueda unificada cuando haya terminado de cargar sus datos.
          observer.completed(this, NotificationListener.TYPE_SEARCHABLE);
      }
    El servicio de búsqueda unificada invoca getSearchableEntities() a continuación para recuperar la matriz que ha rellenado.
  9. En pause(), cambie el valor de la variable _wait a true. El Servicio de búsqueda unificada llama a este método cuando quiere que su aplicación deje de cargar datos.
    public void pause() {
        _wait = true;
    }
  10. En resume(), cambie el valor de la variable _wait a false. También, notifique al método load() que puede reanudar la ejecución. El servicio de búsqueda unificada invoca resume() cuando desea que su aplicación reanude los datos que carga.
    public void resume() {
        _wait = false;
        synchronized(_monitor) {
            _monitor.notifyAll();
        }
    }
  11. En getSearchableEntities(), devuelva la matriz _myEntities que creó en el paso 8.
    public SearchableEntity[] getSearchableEntities() {
        return _myEntities;
    }

¿Le ha resultado útil esta información? Envíenos sus comentarios.