浏览器在黑莓的风暴设备中提出了问题

时间:2011-01-12 12:16:56

标签: java blackberry

我正在使用浏览器字段,它将在模拟器4.7风暴中显示。但是当我在设备上执行时,它仍然是空白的,并且页面没有显示。任何人都可以提供帮助。

2 个答案:

答案 0 :(得分:0)

这是代码,我尝试将“; interface = true”附加到url仍然不在9550设备上执行,而在9550模拟器中执行

/ *  * BrowserFieldDemo.java  *  *版权所有©1998-2009 Research In Motion Ltd.  *  *注意:为简单起见,此示例应用程序可能无法利用  *资源包和资源字符串。但是,强烈推荐  *应用程序开发人员使用可用的本地化功能  *在BlackBerry开发平台内​​确保无缝应用  *跨越各种语言和地理区域的经验。欲获得更多信息  *有关本地化您的应用程序的信息,请参阅BlackBerry Java Development  *与此版本相关的环境开发指南。  * /

import java.io.IOException;

import javax.microedition.io.HttpConnection;

import net.rim.device.api.browser.field。; import net.rim.device.api.io.http.HttpHeaders; import net.rim.device.api.system.Application; import net.rim.device.api.ui。; import net.rim.device.api.ui.component.Status; import net.rim.device.api.ui.container.MainScreen; import net.rim.device.api.system。*;

final类BrowserFieldDemo扩展UiApplication实现RenderingApplication {

private static final String REFERER = "referer";   

private RenderingSession _renderingSession;   
private HttpConnection  _currentConnection;
private MainScreen _mainScreen;


/***************************************************************************
 * Main.
 **************************************************************************/
public static void main(String[] args) 
{
    BrowserFieldDemo app = new BrowserFieldDemo();
    app.enterEventDispatcher();
}

private BrowserFieldDemo() 
{        

    _mainScreen = new MainScreen();        
    pushScreen(_mainScreen);
    _renderingSession = RenderingSession.getNewInstance();

    // Enable javascript.
    //_renderingSession.getRenderingOptions().setProperty(RenderingOptions.CORE_OPTIONS_GUID, RenderingOptions.JAVASCRIPT_ENABLED, true);                        

    PrimaryResourceFetchThread thread = new PrimaryResourceFetchThread("http://wwww.vensi.com"+";interface=true", null, null, null, this);
    thread.start();                       

}

void processConnection(HttpConnection connection, Event e) 
{
    // Cancel previous request.
    if (_currentConnection != null) 
    {
        try 
        {
            _currentConnection.close();
        } 
        catch (IOException e1) 
        {
        }
    }

    _currentConnection = connection;

    BrowserContent browserContent = null;

    try 
    {
        browserContent = _renderingSession.getBrowserContent(connection, this, e);

        if (browserContent != null) 
        {
            Field field = browserContent.getDisplayableContent();

            if (field != null) 
            {
                synchronized (Application.getEventLock()) 
                {
                    _mainScreen.deleteAll();
                    _mainScreen.add(field);
                }
            }

            browserContent.finishLoading();
        }

    } 
    catch (RenderingException re) 
    {
    } 
    finally 
    {
        SecondaryResourceFetchThread.doneAddingImages();
    }

}    

/**
 * @see net.rim.device.api.browser.RenderingApplication#eventOccurred(net.rim.device.api.browser.Event)
 */
public Object eventOccurred(Event event) 
{
    int eventId = event.getUID();

    switch (eventId) 
    {
        case Event.EVENT_URL_REQUESTED : 
        {
            UrlRequestedEvent urlRequestedEvent = (UrlRequestedEvent) event;    

            PrimaryResourceFetchThread thread = new PrimaryResourceFetchThread(urlRequestedEvent.getURL(),
                                                                                     urlRequestedEvent.getHeaders(), 
                                                                                     urlRequestedEvent.getPostData(),
                                                                                     event, this);
            thread.start();

            break;

        } 
        case Event.EVENT_BROWSER_CONTENT_CHANGED: 
        {                
            // Browser field title might have changed update title.
            BrowserContentChangedEvent browserContentChangedEvent = (BrowserContentChangedEvent) event; 

            if (browserContentChangedEvent.getSource() instanceof BrowserContent) 
            { 
                BrowserContent browserField = (BrowserContent) browserContentChangedEvent.getSource(); 
                String newTitle = browserField.getTitle();
                if (newTitle != null) 
                {
                    synchronized (getAppEventLock()) 
                    { 
                        _mainScreen.setTitle(newTitle);
                    }                                               
                }                                       
            }                   

            break;                

        } 
        case Event.EVENT_REDIRECT : 
        {
            RedirectEvent e = (RedirectEvent) event;
            String referrer = e.getSourceURL();

            switch (e.getType()) 
            {  
                case RedirectEvent.TYPE_SINGLE_FRAME_REDIRECT :
                    // Show redirect message.
                    Application.getApplication().invokeAndWait(new Runnable() 
                    {
                        public void run() 
                        {
                            Status.show("You are being redirected to a different page...");
                        }
                    });

                break;

                case RedirectEvent.TYPE_JAVASCRIPT :
                    break;

                case RedirectEvent.TYPE_META :
                    // MSIE and Mozilla don't send a Referer for META Refresh.
                    referrer = null;     
                    break;

                case RedirectEvent.TYPE_300_REDIRECT :
                    // MSIE, Mozilla, and Opera all send the original
                    // request's Referer as the Referer for the new
                    // request.
                    Object eventSource = e.getSource();
                    if (eventSource instanceof HttpConnection) 
                    {
                        referrer = ((HttpConnection)eventSource).getRequestProperty(REFERER);
                    }

                    break;
                }

                HttpHeaders requestHeaders = new HttpHeaders();
                requestHeaders.setProperty(REFERER, referrer);
                PrimaryResourceFetchThread thread = new PrimaryResourceFetchThread(e.getLocation(), requestHeaders,null, event, this);
                thread.start();
                break;

        } 
        case Event.EVENT_CLOSE :
            // TODO: close the appication
            break;

        case Event.EVENT_SET_HEADER :        // No cache support.
        case Event.EVENT_SET_HTTP_COOKIE :   // No cookie support.
        case Event.EVENT_HISTORY :           // No history support.
        case Event.EVENT_EXECUTING_SCRIPT :  // No progress bar is supported.
        case Event.EVENT_FULL_WINDOW :       // No full window support.
        case Event.EVENT_STOP :              // No stop loading support.
        default :
    }

    return null;
}

/**
 * @see net.rim.device.api.browser.RenderingApplication#getAvailableHeight(net.rim.device.api.browser.BrowserContent)
 */
public int getAvailableHeight(BrowserContent browserField) 
{
    // Field has full screen.
    return Display.getHeight();
}

/**
 * @see net.rim.device.api.browser.RenderingApplication#getAvailableWidth(net.rim.device.api.browser.BrowserContent)
 */
public int getAvailableWidth(BrowserContent browserField) 
{
    // Field has full screen.
    return Display.getWidth();
}

/**
 * @see net.rim.device.api.browser.RenderingApplication#getHistoryPosition(net.rim.device.api.browser.BrowserContent)
 */
public int getHistoryPosition(BrowserContent browserField) 
{
    // No history support.
    return 0;
}


/**
 * @see net.rim.device.api.browser.RenderingApplication#getHTTPCookie(java.lang.String)
 */
public String getHTTPCookie(String url) 
{
    // No cookie support.
    return null;
}

/**
 * @see net.rim.device.api.browser.RenderingApplication#getResource(net.rim.device.api.browser.RequestedResource,
 *      net.rim.device.api.browser.BrowserContent)
 */
public HttpConnection getResource( RequestedResource resource, BrowserContent referrer) 
{
    if (resource == null) 
    {
        return null;
    }

    // Check if this is cache-only request.
    if (resource.isCacheOnly()) 
    {
        // No cache support.
        return null;
    }

    String url = resource.getUrl();

    if (url == null) 
    {
        return null;
    }

    // If referrer is null we must return the connection.
    if (referrer == null) 
    {
        HttpConnection connection = Utilities.makeConnection(resource.getUrl(), resource.getRequestHeaders(), null);

        return connection;

    } 
    else 
    {
        // If referrer is provided we can set up the connection on a separate thread.
        SecondaryResourceFetchThread.enqueue(resource, referrer);
    }

    return null;
}

/**
 * @see net.rim.device.api.browser.RenderingApplication#invokeRunnable(java.lang.Runnable)
 */
public void invokeRunnable(Runnable runnable) 
{       
    (new Thread(runnable)).start();
}    

}

class PrimaryResourceFetchThread扩展Thread {

private BrowserFieldDemo _application;
private Event _event;
private byte[] _postData;
private HttpHeaders _requestHeaders;
private String _url;

PrimaryResourceFetchThread(String url, HttpHeaders requestHeaders, byte[] postData, 
                              Event event, BrowserFieldDemo application) 
{
    _url = url;
    _requestHeaders = requestHeaders;
    _postData = postData;
    _application = application;
    _event = event;
}

public void run() 
{
    HttpConnection connection = Utilities.makeConnection(_url, _requestHeaders, _postData);
    _application.processConnection(connection, _event);        
}

}

答案 1 :(得分:-1)

示例中存在一个错误,BB人员多年来一直没有做任何事情。您永远不会知道您的页面没有呈现,您将被重定向到所有调用页面。当他们无法呈现页面时,他们在HTTP响应中插入重定向代码,而不是给出渲染异常(在输入流中检查它并将其转换为字符串,你应该知道),并且从不显示目标页面。他们使用BrowserField在5.0及更高版本中解决了这个问题,但我们需要针对低端手机的解决方案。