2013-07-26 4 views
4

LWUIT-IO의 저장소를 사용하여 데이터를 저장하기 위해 Externalizable 인터페이스를 구현하려고합니다. 이것은 String, boolean 및 int로 구성된 간단한 객체에 유용했습니다.자바로 작성된 오브젝트에 대한 외부화 가능 인터페이스 임 플레멘 테이션. (LWUIT)

그러나 이러한 유형으로 구성된 개체가 있지만 위에 언급 한 Externalizable 개체의 Vector도 있습니다. 이것은 프로세스를 엉망으로 만드는 것처럼 보이며 저장소에서 객체를 검색하려고 할 때 아무 것도 얻지 못합니다.

나는 이것이 Serializable 인터페이스와 같았고 메인 오브젝트 내부의 Externalizable 오브젝트가 자동으로 처리된다고 가정했다. 이것이 사실인지 또는 실패한 이유가 확실하지 않습니다.

물체 내부의 객체는 다음과 같이

public class Song implements Externalizable{ 

    String name = "examplesongname"; 

    public void externalize(DataOutputStream out) throws IOException { 
     out.writeUTF(name); 
    } 

    public void internalize(int version, DataInputStream in) throws IOException { 
     name = in.readUTF(); 
    } 

    public String getObjectId() { 
     return "pat.objects.Song"; 
    } 

    public int getVersion() { 
     return 1; 
    } 
} 

포함하는 객체는 다음과 같습니다

public class Playlist implements Externalizable{ 
    String name = "exampleplaylistname"; 
    Vector songs = new Vector(); 

    public void externalize(DataOutputStream out) throws IOException {   
     out.writeUTF(name); 
     out.write(songs.size()); 
     Enumeration allItems = songs.elements(); 

     while(allItems.hasMoreElements()){ 
       Externalizable nextItem = (Externalizable) allItems.nextElement(); 
       nextItem.externalize(out); 
     } 
    } 

    public void internalize(int version, DataInputStream in) throws IOException { 
     name = in.readUTF(); 

     int size = in.readInt(); 
     songs= new Vector(); 
     for(int currentIndex = 0; currentIndex < size; currentIndex++){ 
      Object nextItem = new Object(); 
      ((Externalizable)nextItem).internalize(version, in); 
       songs.addElement(nextItem); 
     } 
    } 
    } 

    public String getObjectId() { 
     return "pat.objects.Playlist"; 
    } 

    public int getVersion() { 
     return 1; 
    } 
} 

내가 실패 잘못된 일을하거나 플레이리스트 (포함하는 객체)를 만드는 실종입니다 무엇 저장하는 동안 내가 처음으로 하나를 저장하려고하면 작동합니까?

오버 라이딩하는 방법이 일반화 된 Java와는 다르다는 점에 유의하십시오. 이것은 LWUIT 버전의 Externalizable 인터페이스이기 때문에주의하십시오.

답변

2

앱을 시작할 때 외부 화 가능 클래스로 등록하려면 Util.register(...)을 사용해야합니다.

또한 externalize에 대한 직접 호출이 올바르지 않습니다. 다른 외부화 가능 객체 (자체 버전 번호 포함)를 작성하려면 Util.writeObject/readObject을 사용해야합니다. 그런 다음 중복 된 벡터 위에 루프를 피하고 전체 벡터를 쓸 수 있습니다.

null 문자열도 지원하는 Util.readUTF/writeUTF을 사용하는 것이 좋습니다.

편의상 LWUIT는 더 이상 다른 사람이 관리하지 않으므로 Codename one으로 마이그레이션하는 것이 좋습니다. 또한 Steve Hannah는 LWUIT와 매우 유사한 코드 네임 원이다 (목록 및지도를 지원하지만). http://www.shannah.ca/blog/?p=234

+0

답장을 보내 주셔서 감사합니다! 코드 명 1로 마이그레이션하는 것과 관련하여 필자가 작성한 앱은 Nokia Asha 전화를 대상으로하므로 Nokia의 LWUIT 버전을 사용하고 있습니다. http://developer.nokia.com/Resources/Library/LWUIT/#!lwuit- for-nokia-asha-software-platform.html을 본다. Codename 하나가이 효과를 얻을 수 있습니까? – Pat

+0

예, Asha 장치 및 테마를 지원합니다. –

+0

카테고리 바 및 액션과 같은 기본 Nokia UI 구성 요소는 어떻습니까? http://developer.nokia.com/Resources/Library/LWUIT/#!lwuit-for-nokia-asha-software-platform/ux-guidelines/category-bar.html – Pat