如何在黑莓5.0及以上版本的J2ME代码中使用wifi调用HTTP URL?
我正在使用J2ME代码从BlackBerry调用一个web服务。当我尝试使用如何在黑莓5.0及以上版本的J2ME代码中使用wifi调用HTTP URL?,http,blackberry,java-me,wifi,Http,Blackberry,Java Me,Wifi,我正在使用J2ME代码从BlackBerry调用一个web服务。当我尝试使用HttpConnection打开连接时,它只检查GPRS连接。现在,我想检查Wi-Fi连接并通过Wi-Fi呼叫网络服务 下面的代码是我的连接部分。如何更改Wi-Fi连接的代码 public boolean HttpUrl() { HttpConnection conn = null; OutputStream out = null; String url = "http://www.google
HttpConnection
打开连接时,它只检查GPRS连接。现在,我想检查Wi-Fi连接并通过Wi-Fi呼叫网络服务
下面的代码是我的连接部分。如何更改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;
}
按此方式检查:
HttpConnection conn = null;
String URL = "http://www.myServer.com/myContent;deviceside=true;interface=wifi";
conn = (HttpConnection)Connector.open(URL);
通过以下方式检查:
HttpConnection conn = null;
String URL = "http://www.myServer.com/myContent;deviceside=true;interface=wifi";
conn = (HttpConnection)Connector.open(URL);
建立联系
如果您知道您将只使用Wi-Fi
但是,如果您只需要支持BlackBerry OS 5.0-7.1,我建议您使用ConnectionFactory
通常,您不会将代码限制为仅使用一个传输,但是,您可能需要先对应用程序进行编码以选择某些传输
比如说,
类连接线程扩展线程
{
公开募捐
{
ConnectionFactory connFact=新的ConnectionFactory();
setPreferredTransportTypes(新的int[]{
TransportInfo.TRANSPORT\u TCP\u WIFI,
TransportInfo.TRANSPORT_BIS_B,
TransportInfo.TRANSPORT\u MDS,
TransportInfo.TRANSPORT\u TCP\u蜂窝
});
ConnectionDescriptor connDesc;
connDesc=connFact.getConnection(“http://www.google.com");
如果(connDesc!=null)
{
HttpConnection-httpConn;
httpConn=(HttpConnection)connDesc.getConnection();
尝试
{
//TODO:在此处设置httpConn请求方法和属性!
final int-iResponseCode=httpConn.getResponseCode();
UiApplication.getUiApplication().invokeLater(新的Runnable())
{
公开募捐
{
对话框。警报(“响应代码:”+
Integer.toString(iResponseCode));
}
});
}
捕获(IOE异常)
{
System.err.println(“捕获的IOException:
+e.getMessage());
}
}
}
}
如果Wi-Fi可用,将选择Wi-Fi传输,如果不可用,则使用GPRS连接。我认为5.0+设备通常会考虑这一点
请求属性
此代码
conn.setRequestProperty(“内容长度”、“应用程序/x-www-form-urlencoded”);
这是不对的Content Length
应该是HTTP POST参数的大小(以字节为单位)
穿线
记住,建立网络连接很慢。不要通过在主/UI线程上运行此代码来阻止用户界面。将代码放入后台线程,以便在请求远程内容时保持UI响应。建立连接
如果您知道您将只使用Wi-Fi
但是,如果您只需要支持BlackBerry OS 5.0-7.1,我建议您使用ConnectionFactory
通常,您不会将代码限制为仅使用一个传输,但是,您可能需要先对应用程序进行编码以选择某些传输
比如说,
类连接线程扩展线程
{
公开募捐
{
ConnectionFactory connFact=新的ConnectionFactory();
setPreferredTransportTypes(新的int[]{
TransportInfo.TRANSPORT\u TCP\u WIFI,
TransportInfo.TRANSPORT_BIS_B,
TransportInfo.TRANSPORT\u MDS,
TransportInfo.TRANSPORT\u TCP\u蜂窝
});
ConnectionDescriptor connDesc;
connDesc=connFact.getConnection(“http://www.google.com");
如果(connDesc!=null)
{
HttpConnection-httpConn;
httpConn=(HttpConnection)connDesc.getConnection();
尝试
{
//TODO:在此处设置httpConn请求方法和属性!
final int-iResponseCode=httpConn.getResponseCode();
UiApplication.getUiApplication().invokeLater(新的Runnable())
{
公开募捐
{
对话框。警报(“响应代码:”+
Integer.toString(iResponseCode));
}
});
}
捕获(IOE异常)
{
System.err.println(“捕获的IOException:
+e.getMessage());
}
}
}
}
如果Wi-Fi可用,将选择Wi-Fi传输,如果不可用,则使用GPRS连接。我认为5.0+设备通常会考虑这一点
请求属性
此代码
conn.setRequestProperty(“内容长度”、“应用程序/x-www-form-urlencoded”);
这是不对的Content Length
应该是HTTP POST参数的大小(以字节为单位)
穿线
记住,建立网络连接很慢。不要通过在主/UI线程上运行此代码来阻止用户界面。将代码放在后台线程中,以便在请求远程内容时保持UI响应。据我所知,BlackBerry建议只编写“interface=wifi”代码。我被告知添加“deviceside=true”是不必要的,可能会混淆连接选择逻辑。也就是说,Nate的答案也是我推荐的方法。据我所知,BlackBerry的建议是只编码“interface=wifi”。我被告知添加“deviceside=true”是不必要的,可能会混淆连接选择逻辑。也就是说,内特的答案也是我推荐的方法。