1

기본 네이티브 BlackBerry 응용 프로그램에 간단한 HTML 청크를 표시하고 싶지만 URL에서 반환되지는 않습니다. 이것은 기존의 Stackoverflow 관련 질문 (예 : herehere)과 유사하지만 실행하기 위해 실제 BlackBerry 샘플 코드를 얻는 데 도움이 필요합니다 (또는 어째서 이것이 작동하지 않을 운명인지 말해 줄 사람이 필요합니다). 나는 샘플 코드 구성 요소 팩과 함께 제공 (추가 정보를 here)를 발견했습니다
V4.5 API sample
V5.0 API sample기본 BlackBerry 응용 프로그램에 간단한 HTML 표시

:

블랙 베리 웹 사이트에서 볼 수있는 다양한 API 버전에 따라 몇 가지 예제 '브라우저'코드가 작동하도록 V4.5 샘플 코드를 얻으려고 시도했습니다. 이 유용한 시작점이 될 것이라고 기대했다 ...

나는 BrowserFieldDemo를 Eclipse에서 컴파일하고 시뮬레이터에서 실행할 수 있었다. (나는 BrowserContentManagerDemo.java 전체를 주석 처리해야했다. 대신).

불행히도 시뮬레이터에서 흰색 화면이 나타납니다. 내가 로깅에 추가하고 디버거를 사용하는 경우, 모두 여기에 getBrowserContent() 라인에서 잘못 될 것 같다 : 반환

BrowserContent browserContent = null; 

try 
{ 
    browserContent = _renderingSession.getBrowserContent(connection, this, e); 
    <snip> 
} 
catch (RenderingException re) 
{ 
    EventLogger.logEvent(ID, (re + "").getBytes(), EventLogger.ERROR); 
    System.err.println(re); 
} 

는 예외입니다 :

net.rim.device.api. browser.field.RenderingException : IOException이 연결

에 나는 건물과 4.5.0와 4.7.0 구성 요소 팩과 시뮬레이터를 사용하여 시도했다, 그러나 그들은 모두 같은 증상을 가지고있다.

samples.cod 파일을 내 장치에 푸시하고 시작하면 "샘플 시작 오류 : 모듈 '샘플'보안 API에 액세스하려고 시도합니다. '가 표시됩니다. 아마도 필자는 코드 서명 키 (예제 코드)로 샘플 코드에 서명해야 할 필요가 있습니다.이 코드는 Eclipse에서 수행하는 방법을 잘 모르겠습니다.

그래서, 내 질문은 :

1) 사람이 실제로 작업이 V4.5 샘플 코드를 가지고 했습니까? 시뮬레이터를 포기하고 대신 장치를 사용해야합니까?

2)이 V4.5 접근 방식은 가지고있는 간단한 HTML 데이터를 표시 할 수 있습니까? 예 : 로컬 호스트 URL을 사용할 수 있습니까? 아니면 데이터를 제공하기 위해 사용자 지정 HttpConnection을 만들 수 있습니까?

가능한 경우 V4.5, V4.7 및 V5.0을 실행하는 BlackBerry 모델을 지원해야합니다.

팁을 보내 주시면 감사하겠습니다.

답변

1

장치 시뮬레이터를 시작하기 전에 MDS 시뮬레이터를 시작해야합니다. HTTP를 사용하는 모든 샘플 또는 대부분의 샘플은 전송을 지정하지 않으므로 기본 MDS 전송을 사용합니다. 즉, MDS 시뮬레이터를 실행하지 않으면 HTTP 연결을 만들 수 없습니다.

+0

감사합니다 - 작업 예제 코드를 가지고! 이 Component Pack 디렉토리에서 "run.bat"를 실행해야했습니다. net.rim.eide.componentpack4.5.0_4.5.0.16 \ components \ MDS. 외관상으로는 이것이 정상적인 시뮬레이터가 발사 될 때마다 이것이 일어나는 것을 보장하는 방법이 있습니다. –

+0

시뮬레이터에서 작동하도록하는 것이 저를 차단하는 주된 이유이기 때문에이 대답을 수락합니다. 내 일반 접근법에 도움을 주신 coldice에게 감사드립니다. –

5

당신은 생성자에서 String 인수를 취하여 getType(), getLength(), openStream() 등의 InputStream과 같은 모든 값을 반환하는 자체 HttpConnection을 구현해야합니다. 다음과 같이 브라우저 필드와 함께 사용하십시오. SDKFieldDemo.

public class HttpConnectionImpl implements HttpConnection { 
    private long streamLength = 7000; 
    private DataInputStream dataInput; 
    private InputStream in; 
    private String encoding = "text/html"; 

    public HttpConnectionImpl(String data) { 
     try { 
      in = new ByteArrayInputStream(data.getBytes("UTF-8")); 
      dataInput = new DataInputStream(in); 
     } catch (Exception e) { 
      System.out.println("HttpConnectionImpl : Exception : " + e); 
     } 

    } 

    public String getURL() { 
     return ""; 
    } 

    public String getProtocol() { 
     return ""; 
    } 

    public String getHost() { 
     return ""; 
    } 

    public String getFile() { 
     return ""; 
    } 

    public String getRef() { 
     return ""; 
    } 

    public String getQuery() { 
     return ""; 
    } 

    public int getPort() { 
     return 0; 
    } 

    public String getRequestMethod() { 
     return ""; 
    } 

    public void setRequestMethod(String s) throws IOException { 

    } 

    public String getRequestProperty(String s) { 
     return ""; 
    } 

    public void setRequestProperty(String s, String s1) throws IOException { 

    } 

    public int getResponseCode() throws IOException { 
     return 200; 
    } 

    public String getResponseMessage() throws IOException { 
     return ""; 
    } 

    public long getExpiration() throws IOException { 
     return 0; 
    } 

    public long getDate() throws IOException { 
     return 0; 
    } 

    public long getLastModified() throws IOException { 
     return 0; 
    } 

    public String getHeaderField(String s) throws IOException { 
     return ""; 
    } 

    public int getHeaderFieldInt(String s, int i) throws IOException { 
     return 0; 
    } 

    public long getHeaderFieldDate(String s, long l) throws IOException { 
     return 0; 
    } 

    public String getHeaderField(int i) throws IOException { 
     return ""; 
    } 

    public String getHeaderFieldKey(int i) throws IOException { 
     return ""; 
    } 

    public String getType() { 
     return "text/html"; 
    } 

    public String getEncoding() { 
     return encoding; 
    } 

    public long getLength() { 
     return streamLength; 
    } 

    public InputStream openInputStream() throws IOException { 
     return in; 
    } 

    public DataInputStream openDataInputStream() throws IOException { 
     return dataInput; 
    } 

    public void close() throws IOException { 

    } 

    public OutputStream openOutputStream() throws IOException { 
     return new ByteArrayOutputStream(); 
    } 

    public DataOutputStream openDataOutputStream() throws IOException { 
     return new DataOutputStream(new ByteArrayOutputStream()); 
    } 
} 

See full code with example of use

+0

감사합니다. 다른 사람들도이 접근 방식을 사용하고 있습니다. –

+0

여러분을 환영합니다! –

+0

샘플 코드를 해킹하여이를 테스트했으며 시뮬레이터에서 작동합니다. 아직 어떤 실제 장치에서 시도하지 않았습니다 ... –

관련 문제