我想调用一个url,并从我的黑莓应用程序的url中获取响应数据。为此,我使用HttpConnection
。这是我正在使用的代码:
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.component.Dialog;
import javax.microedition.io.Connector;
import javax.microedition.io.ContentConnection;
import javax.microedition.io.HttpConnection;
import java.io.DataInputStream;
import java.io.IOException;
public class TestApp extends UiApplication {
private MainScreen _mainScreen;
private static TestApp _app;
public TestApp(){
_mainScreen = new MainScreen();
LabelField testField = new LabelField("hello world");
_mainScreen.add(testField);
pushScreen(_mainScreen);
HttpConnection c = null;
DataInputStream dis = null;
try {
System.out.println("0");
c = (HttpConnection)Connector.open("http://www.google.com");
System.out.println("1");
int rc = c.getResponseCode();
System.out.println("2");
if (rc != HttpConnection.HTTP_OK) {
throw new IOException("HTTP response code: " + rc);
}
System.out.println("3");
dis = c.openDataInputStream();
System.out.println("4");
int len = (int)c.getLength();
if (len > 0) {
byte[] data = new byte[len];
dis.readFully(data);
} else {
int ch;
while ((ch = dis.read()) != -1) {
//...
}
}
} catch(Exception e){
e.printStackTrace();
}finally {
try {
if (dis != null)
dis.close();
if (c != null)
c.close();
} catch (IOException e) {
e.printStackTrace();
}
catch(NullPointerException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
_app = new TestApp();
_app.enterEventDispatcher();
}
}
当我尝试在模拟器中运行代码时,我得到了"0",然后是"1",在那之后很长一段时间"无堆栈跟踪"出现在调试窗口中,文本一出现,带有文本的级别应用程序就可以在模拟器屏幕中看到。模拟器中的互联网连接没有问题,我已经设置了Wi-Fi,我已经测试过我可以在浏览器中打开任何网站。我的代码有什么问题?
最好阅读BlackBerry基础设施中的网络。请查看BlackBerry文档。
要使您的代码快速运行,只需在请求的URL中添加后缀-";interface=wifi"可通过wifi运行,或";deviceside=false"可通过无线电访问。因此,您的原始url将为"http://www.google.com;deviceside=false"或"http://www.google.com;interface=wifi".
也许您应该显示屏幕,然后生成一个工作线程来进行连接。无论如何,您应该在OS>=5.0中使用ConnectionFactory
,以避免在以前的版本中管理它所需要的"地狱般的后缀"。还要注意,失败的连接通常需要2分钟才能超时。
当您在blackberry中打开http连接时,您的url"http://www.google.com"
还应包含连接后缀。因此,您的url应为"http://www.google.com"+connectionsuffix
如果你有正常的gprs包,那么你的url变成"http://www.google.com"+";deviceside=true"