1

我正在使用 J2ME 代码从 BlackBerry 调用 Web 服务。当我尝试使用 打开连接HttpConnection时,它只检查 GPRS 连接。现在,我想检查 Wi-Fi 连接并通过 Wi-Fi 调用 Web 服务。

以下代码是我的连接部分。如何更改 Wi-Fi 连接的代码?

public boolean HttpUrl() 
{
    HttpConnection conn = null;
    OutputStream out = null;
    String url = "http://www.google.com";
    try 
    {
        conn = (HttpConnection) new ConnectionFactory().getConnection(url).getConnection();
        if (conn != null) 
        {

            conn.setRequestMethod(HttpConnection.POST);
            conn.setRequestProperty("Content-Length", "application/x-www-form-urlencoded");
            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            conn.setRequestProperty("User-Agent", "Profile/MIDP-2.0 Configuration/CLDC-1.0");


        }
    } 
    catch (Exception e) 
    {
        return false;
    } 
    finally 
    {
        try 
        {
            out.close();
        } 
        catch (Exception e2) 
        {
        }
    }

    //Only if exception occurs, we close the connection.
    //Otherwise the caller should close the connection himself.
    try 
    {
        conn.close();
    } 
    catch (Exception e1)
    {
    }
    return true;
}
4

2 回答 2

1

检查这种方式:

HttpConnection conn = null;
String URL = "http://www.myServer.com/myContent;deviceside=true;interface=wifi";
conn = (HttpConnection)Connector.open(URL);

资源

于 2013-08-10T11:49:21.373 回答
0

建立联系

如果您知道您只会使用 Wi-Fi,那么Rafael 的回答肯定会奏效。

但是,如果您只需要支持 BlackBerry OS 5.0 - 7.1,我建议您使用ConnectionFactory. 通常,您不会将代码限制为仅使用一种传输方式您通常会(几乎)支持设备具有的任何传输,但您可能希望对您的应用程序进行编码以首先选择某些传输。

例如,

class ConnectionThread extends Thread
{
    public void run()
    {
        ConnectionFactory connFact = new ConnectionFactory();
        connFact.setPreferredTransportTypes(new int[] { 
                TransportInfo.TRANSPORT_TCP_WIFI,
                TransportInfo.TRANSPORT_BIS_B,
                TransportInfo.TRANSPORT_MDS,
                TransportInfo.TRANSPORT_TCP_CELLULAR
        });
        ConnectionDescriptor connDesc;
        connDesc = connFact.getConnection("http://www.google.com");
        if (connDesc != null)
        {
            HttpConnection httpConn;
            httpConn = (HttpConnection)connDesc.getConnection();
            try
            {
                // TODO: set httpConn request method and properties here!
                final int iResponseCode = httpConn.getResponseCode();
                UiApplication.getUiApplication().invokeLater(new Runnable()
                {
                    public void run()
                    {
                        Dialog.alert("Response code: " + 
                                Integer.toString(iResponseCode));
                    }
                });
            } 
            catch (IOException e) 
            {
                System.err.println("Caught IOException: " 
                        + e.getMessage());
            }
        }
    }
}    

如果 Wi-Fi 可用,将选择 Wi-Fi 传输,但如果不可用,则使用 GPRS 连接。我认为这通常被认为是5.0+ 设备的最佳实践

请求属性

这段代码

conn.setRequestProperty("Content-Length", "application/x-www-form-urlencoded");

是不正确的。 Content-Length应该是 HTTP POST 参数的大小(以字节为单位)。 请参阅此处的示例

穿线

请记住,建立网络连接很慢。不要通过在主/UI 线程上运行此代码来阻塞用户界面。将您的代码放入后台线程,以在您请求远程内容时保持 UI 响应。

于 2013-08-10T23:50:21.640 回答