Отображение простого 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());
    }
}

Смотрите полный код с примером использования

Другие вопросы по тегам