如何在 BlackBerry 5.0 及更高版本的 J2ME 代码中使用 wifi 调用 HTTP URL?
Posted
技术标签:
【中文标题】如何在 BlackBerry 5.0 及更高版本的 J2ME 代码中使用 wifi 调用 HTTP URL?【英文标题】:How to call HTTP URL using wifi in J2ME code for BlackBerry 5.0 and above? 【发布时间】:2013-08-10 10:52:19 【问题描述】:我正在使用 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;
【问题讨论】:
【参考方案1】:这样检查:
HttpConnection conn = null;
String URL = "http://www.myServer.com/myContent;deviceside=true;interface=wifi";
conn = (HttpConnection)Connector.open(URL);
source
【讨论】:
据我了解,BlackBerry 的建议是仅编码“;interface=wifi”。有人告诉我添加“;deviceside=true”不是必需的,可能会混淆连接选择逻辑。也就是说,内特的回答也是我推荐的方法。【参考方案2】:建立联系
Rafael's answer will certainly work 如果您知道您将仅使用 Wi-Fi。
但是,如果您只需要支持 BlackBerry OS 5.0 - 7.1,我建议您使用ConnectionFactory
。 通常,您不会将代码限制为仅使用一个传输。 You'll normally support (almost) any transport the device has,但您可能希望对您的应用程序进行编码以首先选择某些传输方式。
例如,
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+ 设备,这通常被认为是 best practice。
请求属性
这段代码
conn.setRequestProperty("Content-Length", "application/x-www-form-urlencoded");
不对。 Content-Length
应该是您的 HTTP POST 参数的大小(以字节为单位)。 See an example here.
线程
请记住,建立网络连接很慢。不要通过在主/UI 线程上运行此代码来阻塞用户界面。将您的代码放入后台线程,以在您请求远程内容时保持 UI 响应。
【讨论】:
以上是关于如何在 BlackBerry 5.0 及更高版本的 J2ME 代码中使用 wifi 调用 HTTP URL?的主要内容,如果未能解决你的问题,请参考以下文章