SearchableEntity 객체에 대해 EntityBasedSearchable 클래스 정의

구현된 EntityBasedSearchable 인터페이스는 통합 검색 서비스 그리고 직접 만든 검색 가능 엔터티 간의 관계를 관리합니다. 각 EntityBasedSearchable 객체는 동일한 검색 가능 속성을 가진 SearchableEntity 객체의 그룹을 관리합니다.
  1. 필요한 클래스와 인터페이스를 가져옵니다.
    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. 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. 생성자에서 SearchField 객체의 배열을 만듭니다. 각 SearchField는 데이터의 한 검색 가능 속성의 이름을 저장합니다. 다음 코드 샘플에서 이 클래스에 의해 관리되는 프로그램 데이터 객체에는 세 개의 검색 가능 속성이 있습니다. 예를 들어, 프로그램 데이터가 책을 모델링한 경우에는 이들 필드에 제목, 출판사, 페이지 수가 포함될 수 있습니다.
    class MyEBS implements EntityBasedSearchable
    {
        _searchFields = new SearchField[3];
  4. SearchField에 의미 있는 이름을 할당합니다.
        _searchFields[0] = new SearchField("Title");
        _searchFields[1] = new SearchField("Publisher");
        _searchFields[2] = new SearchField("Number of pages");
    }
  5. EntityBasedSearchable에 의해 관리되는 검색 가능 엔터티를 포함하는 검색 결과에 표시할 아이콘을 만듭니다. 아이콘 만들기에 대한 자세한 내용은 "검색 결과에서 데이터 보기 설정 사용자 정의"를 참조하십시오.
  6. getType()를 구현합니다. 프로그램 데이터와 가장 일치하는 콘텐츠 유형을 반환합니다. 유효한 콘텐츠 유형의 목록은 API 참조서에서 net.rim.device.api.unifiedsearch.searchables.SearchableContentTypeConstants 인터페이스를 참조하십시오.
    public long getType() {
        return SearchableContentTypeConstants.CONTENT_TYPE_MEMO;
  7. 프로그램의 검색 결과를 받을 검색 생성자를 선택합니다. 검색에 데이터를 노출하는 방법에 대한 자세한 내용은 API 참조서에서 net.rim.device.api.unifiedsearch.entity.ExposureLevel 클래스를 참조하십시오.
    public int getPrivacyLevel() {
        return ExposureLevel.LEVEL_PUBLIC;
    }
  8. load()를 구현합니다. BlackBerry 단말기가 다른 용무 중이거나 배터리 잔량이 낮은 경우 이 메소드의 작업을 일시 중지했다 요청될 때 다시 시작해야 할 수도 있습니다.
    1. EntityBasedSearchable에 대해 프로그램에 현재 얼마나 많은 데이터 객체가 있는지 확인합니다.
      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. while 루프를 사용하여 검색 가능 엔터티의 배열을 채웁니다.
          Enumeration objects = myObjects.elements();
          int count = 0;
          while (objects.hasMoreElements()) {
    3. 통합 검색 서비스가 pause 명령을 보냈는지 확인합니다. 명령을 보낸 경우에는 검색 가능 엔터티 배열을 채우는 작업을 일시 중지하고 서비스에 알립니다.
              if (_wait){ 
                  try {
                      synchronized(_monitor) { 
                      observer.partiallyCompleted(this, null, NotificationListener.TYPE_SEARCHABLE);
                      _monitor.wait();
                      }
                  } catch (InterruptedException e){
                      observer.error(e);
                      return;
                  }
              }
    4. 프로그램이 스레드를 다시 제어하게 되면 검색 가능 엔터티 배열을 계속 채웁니다.
              MyObject dataObject = (MyObject) objects.nextElement();
              _myEntities[count++] = new MySearchableEntity(dataObject, this);
          }
    5. 데이터 로드가 완료되었음을 통합 검색 서비스에 알립니다.
          observer.completed(this, NotificationListener.TYPE_SEARCHABLE);
      }
    그러면 통합 검색 서비스가 getSearchableEntities()를 호출하여 개발자가 채운 배열을 검색합니다.
  9. pause()에서 _wait 변수의 값을 true로 변경합니다. 통합 검색 서비스는 프로그램이 데이터 로드를 중지하도록 할 때 이 메소드를 호출합니다.
    public void pause() {
        _wait = true;
    }
  10. resume()에서 _wait 변수의 값을 false로 변경합니다. 또한 load() 메소드에 실행을 다시 시작할 수 있다는 것을 알립니다. 통합 검색 서비스는 프로그램이 데이터 로드를 다시 시작하도록 할 때 resume()를 호출합니다.
    public void resume() {
        _wait = false;
        synchronized(_monitor) {
            _monitor.notifyAll();
        }
    }
  11. getSearchableEntities()에서, 8단계에서 만든 _myEntities 배열을 반환합니다.
    public SearchableEntity[] getSearchableEntities() {
        return _myEntities;
    }

이 정보가 도움이 되었습니까? 의견을 보내 주십시오.