我正在制作一个使用HttpURLConnection检索网页内容的android程序。我是Java和Android的新手。
问题是:读取器读取整个页面源,但在最后一次迭代时,它不会追加到最后一部分的stringBuffer。
使用debbuger我已经确定,在最后一次循环迭代中,会创建字符串buff,但stringBuffer不会附加它。
我需要解析检索到的内容。有没有比使用字符串更好的方法来处理解析内容。我在许多其他网站上看到,Java中的字符串大小仅受可用堆大小的限制。我也尝试过使用StringBuilder。
任何人都知道可能是什么问题。顺便提一下,建议对代码进行任何改进。
谢谢!
URL u;
try {
u = new URL("http://feeds.timesonline.co.uk/c/32313/f/440134/index.rss");
HttpURLConnection c = (HttpURLConnection) u.openConnection();
c.setRequestProperty("User-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727)");
c.setRequestMethod("GET");
c.setDoOutput(true);
c.setReadTimeout(3000);
c.connect();
StringBuffer stringBuffer = new StringBuffer("");
InputStream in = c.getInputStream();
InputStreamReader inp = new InputStreamReader(in);
BufferedReader reader = new BufferedReader(inp);
char[] buffer = new char[3072];
int len1 = 0;
while ( (len1 = reader.read(buffer)) != -1 )
{
String buff = new String(buffer,0,len1);
stringBuffer.append(buff);
}
String stranica = new String(stringBuffer);
c.disconnect();
reader.close();
inp.close();
in.close();
答案 0 :(得分:1)
您可能想要使用simpler implementation。或者,切换到使用HttpClient
来检索数据,尤其是使用ResponseHandler
模式。
答案 1 :(得分:1)
我在J2SE和Android上测试了你的代码并且运行良好。我添加了几行来比较J2SE的结果:
System.out.println("ITERATIONS: " + iterations);
System.out.println("LEN: " + stranica.length());
System.out.println("LAST 50 chars: "
+ stranica.substring(stranica.length() - 50, stranica
.length()));
FileWriter fw = new FileWriter("/tmp/tmp-j2se.txt");
fw.write(stranica);
fw.close();
Android:
System.out.println("ITERATIONS: " + iterations);
System.out.println("LEN: " + stranica.length());
System.out.println("LAST 50 chars: "
+ stranica.substring(stranica.length() - 50, stranica
.length()));
FileOutputStream fos = openFileOutput("tmp-and.txt",
Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE);
System.out.println(getFileStreamPath("tmp-and.txt")
.getAbsolutePath());
fos.write(stranica.getBytes());
fos.close();
我对两个文件进行了比较并且完全相同,但令我困惑的是两个平台上String返回的长度不匹配:
J2SE:
LEN:22479
机器人:
05-22 20:28:22.733:INFO / System.out(455):LEN:22433
然而,在Android平台上获得的文件大小也有22479字节的长度。我无法进一步研究的唯一解释是,一些编码(可能是行/结尾)翻译是透明地完成的。
回到您的问题,您的代码似乎(并证明)是正确的。您在哪个Android平台版本/硬件上测试代码?