我在从模拟器打开一个简单的HttpConnection时遇到了麻烦,我已经将deviceside = true后缀附加到我的url,但是它仍然不能正常工作,我收到一个响应代码为0的空http连接。这是给我带来问题的代码:
public void readUrl(){
HttpConnection conn=null;
try {
conn = (HttpConnection) Connector.open("http://www.google.com;deviceside=true");
conn.setRequestMethod("GET");
if(conn.getResponseCode()==HttpConnection.HTTP_OK){
System.out.println("Create connection sucessfully");
}
} catch (ConnectionNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
DataInputStream din=null;
ByteVector responseBytes=null;
try {
din = conn.openDataInputStream();
responseBytes = new ByteVector();
int i = din.read();
while (-1 != i) {
responseBytes.addElement((byte) i);
i = din.read();
}
} catch (IOException e) {
//TODO: HANDLE EXCEPTIONS
e.printStackTrace();
}
responseBytes.toArray();
我不知道发生了什么。它假设通过附加deviceside = true它应该直接连接。无论如何我尝试安装MDS服务器并将我的url设置为deviceside = false,但结果是一样的。
现在我使用像http://localhost:8080/resources/mypage.html这样的本地网址测试了相同的代码,并且它按预期工作,所以我想知道这是否可能是模拟器配置问题。我该如何解决?
非常感谢。
答案 0 :(得分:3)
根据我的经验,你需要追加;当使用MDS模拟器时,deviceside = true。 blackberry.com论坛上有一个很棒的post,它向您展示了如何确定应该使用的连接后缀,以及在BlackBerry中使用连接的一些一般性建议。
为了帮助您更轻松地获取请求的内容,您可以使用IOUtilities类:
InputStream stream = conn.openInputStream();
String contents = new String(IOUtilities.streamToBytes(stream));
答案 1 :(得分:2)
在模拟器设置选项卡“常规”中,您是否选中了“启动带模拟器的MDS-CS”? 如果是这样,您根本不需要附加任何后缀......
答案 2 :(得分:2)
“; deviceside = true”用于DIRECT TCP传输。要使用MDS传输,您需要附加“; deviceside = false”。
当您在设备模拟器上运行时,您可以使用DIRECT TCP传输而无需启动MDS模拟器。但是,如果要测试MDS传输,则需要在启动设备模拟器之前启动MDS模拟器。
答案 3 :(得分:1)
是的你是对的,如果使用了deviceide = true,则使用了互联网连接,但是当我使用这个代码时,它似乎是HttpConnection类的一个问题:
public StreamConnection openConnection(){
StreamConnection conn=null;
try {
conn = (StreamConnection) Connector.open(url+";deviceside=true");
//conn.setRequestMethod(httpMethod);
} catch (ConnectionNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
return conn;
}
它工作正常,所以我想知道一些事情......当在黑莓中打开一个连接时,我应该把我的代码用于检查响应代码。创建连接后?像上面的代码或打开dataStream之后的那样:
din = conn.openDataInputStream();
responseBytes = new ByteVector();
int i = din.read();
while (-1 != i) {
responseBytes.addElement((byte) i);
i = din.read();
}
感谢。