Отображение простого HTML в собственном приложении BlackBerry
Я хочу иметь возможность отображать некоторые простые фрагменты HTML в моем родном приложении BlackBerry, НЕ возвращаемые из URL. Это похоже на существующие вопросы Stackru (например, здесь и здесь), но мне нужна помощь для запуска реального примера кода BlackBerry (или, возможно, кто-нибудь, кто скажет мне, почему это обречено на неудачу!).
На веб-сайте BlackBerry есть пример кода "браузера", основанный на различных доступных версиях API:
Пример API V4.5
Пример API V5.0
Я нашел пример кода, который поставляется с пакетами компонентов (подробнее здесь), и попытался заставить пример кода 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 для обработки данных?
Мне нужно поддерживать модели BlackBerry под управлением V4.5, V4.7 и V5.0, если это вообще возможно.
Любые советы будут оценены!
2 ответа
Убедитесь, что вы запускаете симулятор MDS перед запуском симулятора устройства. Все или большинство примеров, которые используют HTTP, не определяют транспорт и поэтому будут использовать транспорт MDS по умолчанию, что означает, что если у вас не запущен симулятор MDS, он не сможет установить соединение HTTP.
Вы должны реализовать свой собственный HttpConnection, который будет принимать аргумент String в конструкторе и возвращать все значения, такие как getType(), getLength(), InputStream для openInputStream() и т. Д. Затем используйте его с полем браузера, как в 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());
}
}