我正在尝试将小时scheldule(来自http://golfnews.no/golfpaatv.php)旁边的粗体文本放入String数组中,然后将其显示在我的设备屏幕上。我已经获得了Internet访问权限,因此这不是问题。应用程序在我的设备上崩溃了。原因:索引超出范围。我不明白问题出在哪里。我的代码是:
package com.work.webrequest;
import java.io.IOException;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class WebRequest extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String trax;
String aux[] = new String[10];
setContentView(R.layout.main);
TextView txt = (TextView) findViewById(R.id.textView1);
trax=getPage();
aux= title (trax);
txt.setText(" Here I will display every title!!!");
}
private String[] title (String trax)
{
String result[] = new String[10];
int ok=1;
int s1,s2;
int i=0;
while(ok==1)
{
System.out.println("INDEX = "+trax.indexOf("<h2>"));
ok=0;
if(trax.indexOf("<h2>")!=-1)
{
ok=1;
s1 =trax.indexOf("<h2>");
s2 = trax.indexOf("</h2>");
result[i] = trax.substring(s1+4,s2);
i++;
trax = trax.substring(trax.indexOf("</h2>"));
}
}
return result;
}
private String getPage() {
String str = "***";
try
{
HttpClient hc = new DefaultHttpClient();
HttpPost post = new HttpPost("http://www.golfnews.no/feed.php?feed=1");
HttpResponse rp = hc.execute(post);
if(rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK)
{
str = EntityUtils.toString(rp.getEntity());
}
}catch(IOException e){
e.printStackTrace();
}
return str;
}
}
<h2>
和</h2>
的数量低于10。我的应用程序在第二次迭代时崩溃了。我是android的初学者,所以我不太了解。你能给我一个暗示吗?我真的很感激 。谢谢!
PS:我知道Index Out of bounds意味着什么,我只是不知道为什么我会在这里得到错误。
答案 0 :(得分:2)
如果要访问超出范围的数组索引,则会得到IndexOutOfBoundsException
。例如:
String[] myArray = new String[10];
myArray[10] = "test"; // 10 is out of limits(0-9)
会产生这样的例外。检查stacktrace以查找此异常源自的行。它告诉你这个问题来自的类名/方法名称/行号。
在您的情况下,我怀疑<h2>
中有trax
个<h2>
,因此您会遇到此异常。
最初你不知道String result[] = new String[10];
的数量,所以改变这一行:
ArrayList<String> result= new ArrayList<String>();
用这个:
// result[i] = trax.substring(s1+4,s2);
result.add(trax.substring(s1+4,s2));
然后,您可以使用以下内容向此列表添加元素:
//trax = trax.substring(trax.indexOf("</h2>"));
trax = trax.substring(s2 + 5);
<强> EDIT1 强>
我想你的意思是:
//String aux[] = new String[10];
String[] aux = new String[10];
//String result[] = new String[10];
String[] result = new String[10];
EDIT2
另外我意识到你分配了错误的数组,你正在分配10个字符串而不是10个字符串的数组:
{{1}}
答案 1 :(得分:0)
试试这个......
if(trax.indexOf("<h2>")!=-1&&i<10)
{
ok=1;
s1 =trax.indexOf("<h2>");
s2 = trax.indexOf("</h2>");
result[i] = trax.substring(s1+4,s2);
i++;
trax = trax.substring(trax.indexOf("</h2>"));
}