2012-12-06 31 views
0

获取服务器返回信息时,LOGCAT显示1 2 3.结果为1,5,6。如果语句判断无法通过

当判断语句是否有错时。我认为结果是1,但它仍然是错误的。

try { 
    URL url=new URL(urlstr); 
    URLConnection conn = null; 
    Log.i("Text", "1"); 
    try { 
     conn = url.openConnection(); 
     Log.i("Text", "2"); 
     InputStream in=conn.getInputStream(); 
     Log.i("Text", "3"); 
     byte[] buffer=new byte[in.available()]; 
     in.read(buffer); 
     String result=new String(buffer); 
     Log.i("Text", "result="+result); 
     if(result.equals("1")) 
     {  
      Log.i("Text", "4"); 
     } else { 
      Log.i("Text", "5"); 
     } 
     Log.i("Text", "6"); 
    } 
}         

我不知道为什么。任何人都可以帮我吗?非常感谢。

+0

你的问题是什么?你能清楚一点吗? –

+1

这条线的结果是什么? 'Log.i(“Text”,“result =”+ result);' –

回答

3

目前还不清楚你想实现什么,但是这三条线有三个问题:

byte[] buffer=new byte[in.available()]; 
in.read(buffer); 
String result=new String(buffer); 
  1. 您应该差不多从未使用available()。相反,创建一个固定大小的缓冲区(这听起来像你不期望太多的数据,所以只需一个小缓冲区就可以)。如果在调用available()时没有可用数据会怎么样?你将会创建一个空数组 - 你肯定不想那么做。
  2. 您忽略了InputStream.read()的返回值。 从来没有这样做。你不知道有多少数据被实际读过。
  3. 您正在从byte[]创建String,但未指定编码。不要这样做。哪个编码是数据实际上是使用?

我的猜测是,你要么通过空数组中,你实际上读超过一个字节。