我有一个获取某个网站HTML代码的功能。最终该函数将整个页面作为数组返回。我试图将页面保存在另一个数组中,但由于某种原因它总是会抛出异常(ArrayIndexOutOfBoundsException)。
我不确定我是否只是缺少一些基本的东西,或者它不仅仅是那个。给你一些我的代码:
protected String[] doInBackground(String... login)
{
String[] page = new String[1024];
try {
page = executeHttpGet(); //THIS IS WHERE IT FAILS
} catch (Exception e) {
page[0] = "Error";
}
return page;
}
public String[] executeHttpGet() throws Exception {
URL u;
InputStream is = null;
DataInputStream dis;
String s;
int i = 0;
String[] page = new String[1024];
addSecurityException();
Authenticator.setDefault(new MyAuthenticator(activity));
try {
u = new URL("https://myurl.com");
is = u.openStream();
dis = new DataInputStream(new BufferedInputStream(is));
while ((s = dis.readLine()) != null) {
if (s.toString().length() > 10)
{
page[i] = s.toString();
i++;
}
}
} catch (IOException ioe) {
}
finally {
try {
is.close();
} catch (IOException ioe) {
}
}
return page;
}
}
有没有人知道为什么我无法将返回的数组分配给doInBackground()中的数组?非常感谢帮助。
答案 0 :(得分:7)
page
(您必须更改catch
- 块以创建新数组,'虽然)。s.toString()
为s
时,您不需要String
,因为它只会返回s
。当您有一个未指定数量的元素List
时,它是一种更灵活,更易于使用的数组替代方案。一般来说,数组是非常低级的,并且几乎没有理由直接使用它们(它们对构建 List
实现非常有用。