Definieren einer EntityBasedSearchable-Klasse für Ihre SearchableEntity-Objekte

Ihre Implementierung der EntityBasedSearchable-Schnittstelle verwaltet die Beziehung zwischen dem einheitlichen Suchdienst und den suchbaren Entitäten, die Sie erstellen. Jedes EntityBasedSearchable-Objekt verwaltet eine Gruppe von SearchableEntity-Objekten, die die gleichen suchbaren Eigenschaften haben.
  1. Importieren Sie die erforderlichen Klassen und Schnittstellen.
    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. Erstellen Sie Instanzvariablen, um für die EntityBasedSearchable relevante Informationen zu speichern.
    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. Erstellen Sie im Konstruktor ein Array von SearchField-Objekten. Jedes SearchField speichert den Namen einer suchbaren Eigenschaft Ihrer Daten. Im folgenden Codebeispiel haben die Anwendungsdatenobjekte, die von dieser Klasse verwaltet werden, drei suchbare Eigenschaften. Wenn Ihre Anwendungsdaten z. B. Bücher beschreiben, können diese Felder den Titel, den Herausgeber und die Anzahl der Seiten enthalten.
    class MyEBS implements EntityBasedSearchable
    {
        _searchFields = new SearchField[3];
  4. Weisen Sie jedem SearchField einen aussagekräftigen Namen zu.
        _searchFields[0] = new SearchField("Title");
        _searchFields[1] = new SearchField("Publisher");
        _searchFields[2] = new SearchField("Number of pages");
    }
  5. Erstellen Sie ein Symbol, das in Suchergebnissen angezeigt werden soll und das die suchbaren Entitäten enthält, die von diesem EntityBasedSearchable verwaltet werden. Weitere Informationen zu Erstellen von Symbolen finden Sie unter "Anpassen der Anzeige Ihrer Daten in Suchergebnissen".
  6. Implementieren Sie getType(). Geben Sie den Inhaltstyp zurück, der Ihren Anwendungsdaten am besten entspricht. Eine Liste gültiger Inhaltstypenerhalten finden Sie in der net.rim.device.api.unifiedsearch.searchables.SearchableContentTypeConstants-Schnittstelle der API-Referenz.
    public long getType() {
        return SearchableContentTypeConstants.CONTENT_TYPE_MEMO;
  7. Wählen Sie die Suchinitiatoren aus, die Suchergebnisse von Ihrer Anwendung empfangen sollen. Weitere Informationen darüber, wie Sie Ihre Daten für Suchen verfügbar machen, finden Sie unter der net.rim.device.api.unifiedsearch.entity.ExposureLevel-Klasse in der API-Referenz.
    public int getPrivacyLevel() {
        return ExposureLevel.LEVEL_PUBLIC;
    }
  8. Implementieren Sie load(). Wenn das BlackBerry-Gerät beschäftigt oder der Akku-Ladezustand niedrig ist, müssen Sie den Vorgang dieser Methode ggf. anhalten und nach Aufforderung fortsetzen.
    1. Legen Sie für EntityBasedSearchable fest, wie viele Datenobjekte derzeit in Ihrer Anwendung vorhanden sind.
      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. Verwenden Sie eine while-Schleife, um ein Array suchbarer Entitäten aufzufüllen.
          Enumeration objects = myObjects.elements();
          int count = 0;
          while (objects.hasMoreElements()) {
    3. Prüfen Sie, ob der einheitliche Suchdienst einen pause-Befehl gesendet hat. Ist dies der Fall, pausieren Sie den Vorgang, der Ihr Array von suchbaren Entitäten füllt, und benachrichtigen Sie den Dienst.
              if (_wait){ 
                  try {
                      synchronized(_monitor) { 
                      observer.partiallyCompleted(this, null, NotificationListener.TYPE_SEARCHABLE);
                      _monitor.wait();
                      }
                  } catch (InterruptedException e){
                      observer.error(e);
                      return;
                  }
              }
    4. Wenn Ihre Anwendung die Steuerung des Threads wiedergewinnt, füllen Sie Ihr Array von suchbaren Entitäten weiter auf.
              MyObject dataObject = (MyObject) objects.nextElement();
              _myEntities[count++] = new MySearchableEntity(dataObject, this);
          }
    5. Benachrichtigen Sie den einheitlichen Suchdienst, dass Sie das Laden der Daten abgeschlossen haben.
          observer.completed(this, NotificationListener.TYPE_SEARCHABLE);
      }
    Der einheitliche Suchdienst ruft als Nächstes getSearchableEntities() auf, um das Array abzurufen, das Sie aufgefüllt haben.
  9. Ändern Sie unter pause() den Wert der _wait-Variablen in true. Der einheitliche Suchdienst ruft diese Methode an, wenn Ihre Anwendung das Laden von Daten anhalten soll.
    public void pause() {
        _wait = true;
    }
  10. Ändern Sie unter resume() den Wert der _wait-Variablen in false. Benachrichtigen Sie auch die load()-Methode, dass sie die Ausführung wiederaufnehmen kann. Der einheitliche Suchdienst ruft resume() auf, wenn Ihre Anwendung das Laden von Daten wiederaufnehmen soll.
    public void resume() {
        _wait = false;
        synchronized(_monitor) {
            _monitor.notifyAll();
        }
    }
  11. Geben Sie unter getSearchableEntities() das _myEntities-Array zurück, das Sie in Schritt 8 erstellt haben.
    public SearchableEntity[] getSearchableEntities() {
        return _myEntities;
    }

Waren diese Informationen hilfreich? Senden Sie uns Ihren Kommentar.