我刚尝试了一些来自互联网的代码并运行它,但它阻止了我的模拟器。代码是:
public void getcontents()
{
HttpConnection c = null;
InputStream is = null;
StringBuffer sb = new StringBuffer();
try
{
c = (HttpConnection)Connector.open("http://www.java-samples.com",Connector.READ_WRITE, true);
c.setRequestMethod(HttpConnection.GET); //default
is = c.openInputStream(); // transition to connected!
int ch = 0;
for(int ccnt=0; ccnt < 150; ccnt++) { // get the title.
ch = is.read();
if (ch == -1){
break;
}
sb.append((char)ch);
}
}
catch (IOException x){
x.printStackTrace();
}
finally{
try{
is.close();
c.close();
} catch (IOException x){
x.printStackTrace();
}
}
System.out.println(sb.toString());
}
我用OK命令调用了该函数。
模拟器被阻止,直到我杀死进程。 我该如何解决这个问题?
答案 0 :(得分:1)
尝试逐步调试调试器中的代码。或者至少添加一些日志语句。我的猜测是,流正在等待来自HTTP连接的数据并且没有被刷新,但是我还没有运行代码来验证断言。
答案 1 :(得分:1)
我在代码中看到的唯一循环是for循环,它是有限的(不超过150次迭代),因此不会使代码无限期地执行。
我建议通过代码在各个点放置一些调试输出语句(输出到控制台甚至对话框警报)。这将帮助您确定导致问题的代码行。例如,如果在for循环之前和之后放置一行,并且在执行时只显示第一行,则表示您的问题在循环内的某处。然后,您可以通过在循环中放置调试行(包括循环编号)来缩小范围,以找出导致问题的确切位置。
答案 2 :(得分:0)
尝试从服务器读取响应正文之前,请尝试检查响应代码。这将确认连接成功或打印出错误响应。在致电Connector.open()
之后放置以下内容:
if (c.getResponseCode() != HttpConnection.HTTP_OK) {
throw new IOException("HTTP response code: " + c.getResponseCode());
} else {
System.out.println("**Debug** : HTTP_OK received, connection established");
}
如果运行代码然后没有输出异常或HTTP确认,那么您可能会阻止连接尝试(检查模拟器与Internet的连接)。如果你确实得到了HTTP_OK,那么你可能会阻止服务器的HTTP响应,或者没有。在结果上发表评论将是一个好主意。