URL을 호출하고 내 Blackberry App에서 URL의 응답 데이터를 가져오고 싶습니다. 이를 위해 HttpConnection
을 사용하고 있습니다.시뮬레이터에서 실행되는 Blackberry HttpConnection prob
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();
}
}
내가 시뮬레이터의 코드를 실행하려고, 나는 점점 후 '1'과 '스택 트레이스'오랜 시간이 지나면 그 이후 '0'하고있다가 나타나는 : 여기에 내가 사용하고있는 코드는 디버그 창에 표시되고 텍스트가 나타나 자마자 텍스트가있는 레벨 앱이 시뮬레이터 화면에 표시됩니다. 시뮬레이터의 인터넷 연결에는 문제가 없습니다. Wi-Fi를 설정했고 브라우저에서 웹 사이트를 열 수 있는지 테스트했습니다. 내 코드의 문제점은 무엇입니까?
정말로 HTTP 패치를 별도의 스레드에서 실행해야합니다 (어쩌면). 당신이하고있는 일은 getResponseCode()가 돌아 오기를 기다리면서 이벤트 스레드 (그리고 OS)가 블록하는 것을 야기하는 것입니다. 운영 체제를 차단 한 이후로 절대로 실행되지 않을 수 있습니다. – Richard