Visualizza HTML semplice in un’applicazione BlackBerry nativa

Voglio essere in grado di visualizzare alcuni semplici blocchi di codice HTML nella mia app nativa BlackBerry, NON restituita da un URL. Questo è simile alle domande Stackoverflow esistenti (ad es. Qui e qui ), ma ho bisogno di aiuto per ottenere l’effettivo codice di esempio di BlackBerry da eseguire (o forse qualcuno che mi dica perché questo è destinato a non funzionare!).

Il sito Web BlackBerry presenta alcuni esempi di codice “browser” basato su diverse versioni API disponibili:
Esempio di API V4.5
Esempio di API V5.0

Ho trovato il codice di esempio fornito con i pacchetti di componenti (maggiori informazioni qui ) e ho cercato di far funzionare il codice di esempio V4.5. Speravo che questo sarebbe stato un utile punto di partenza …

Sono riuscito a compilare BrowserFieldDemo in Eclipse ed eseguire il Simulatore (avevo bisogno di commentare l’intero BrowserContentManagerDemo.java altrimenti la class sarebbe stata eseguita).

Sfortunatamente, ho appena ottenuto una schermata bianca nel simulatore. Quando aggiungo la registrazione e utilizzo il debugger, sembra che tutto vada male nella riga getBrowserContent () qui:

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

L’eccezione restituita è:

net.rim.device.api.browser.field.RenderingException: IOException in connessione

Ho provato a creare e usare il simulatore con i pacchetti di componenti 4.5.0 e 4.7.0, ma entrambi hanno gli stessi sintomi.

Se spingo il file samples.cod sul mio dispositivo e lo avvio, viene visualizzato il messaggio “Errore nell’avvio dei campioni: il modulo ‘samples’ tenta di accedere a un’API sicura”. Presumibilmente avrei bisogno di firmare il codice di esempio con le mie chiavi di firma del codice (che ho), che non sono sicuro di come fare in Eclipse.

Quindi, le mie domande sono:

1) Qualcuno ha effettivamente ottenuto questo codice di esempio V4.5 funzionante? Dovrei rinunciare al simulatore e utilizzare il dispositivo, invece?

2) Questo approccio V4.5 può funzionare per visualizzare alcuni semplici dati HTML che ho? ad esempio posso usare un URL localhost, o forse creare una HttpConnection personalizzata per servire i dati?

Devo supportare i modelli BlackBerry che eseguono V4.5, V4.7 e V5.0, se ansible.

Qualsiasi consiglio sarebbe apprezzato!

Assicurati di avviare il simulatore MDS prima di avviare il simulatore di dispositivo. Tutti o la maggior parte degli esempi che utilizzano HTTP non specificano un trasporto e quindi utilizzeranno il trasporto MDS predefinito, il che significa che se non si esegue il simulatore MDS, non sarà ansible effettuare una connessione HTTP.

È necessario implementare la propria HttpConnection che utilizzerà l’argomento String nel costruttore e restituirà tutti i valori come getType (), getLength (), InputStream su openInputStream (), ecc. Quindi utilizzarlo con il campo del browser, proprio come in sdk BrowserFieldDemo.

 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()); } } 

Vedi il codice completo con l’esempio di utilizzo