这是我的错误:
`E / AndroidRuntime:致命异常:AsyncTask#2 流程:com.example.yasht.recyclerviewrss,PID:4097 java.lang.RuntimeException:执行doInBackground()时发生错误
at android.os.AsyncTask$3.done(AsyncTask.java:325)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
Caused by: java.lang.StringIndexOutOfBoundsException: length=225; regionStart=4; regionLength=-2
at java.lang.String.substring(String.java:1931)
at com.example.yasht.recyclerviewrss.m_Rss.RssParser.parseRSS(RssParser.java:107)
at com.example.yasht.recyclerviewrss.m_Rss.RssParser.doInBackground(RssParser.java:47)
at com.example.yasht.recyclerviewrss.m_Rss.RssParser.doInBackground(RssParser.java:21)`
发生错误的来源:
case XmlPullParser.END_TAG:
if(!isSiteMeta)
{
if(tagName.equalsIgnoreCase("title"))
{
article.setTitle(tagValue);
}else if(tagName.equalsIgnoreCase("description"))
{
String desc=tagValue;
//EXTRACT IMAGE FROM DESC
// error in this line =>
String
imageUrl=desc.substring(desc.indexOf("src=")+5,desc.indexOf("jpg")+3);
article.setImageurl(imageUrl);`
答案 0 :(得分:0)
jpg
中似乎没有desc
,因此desc.indexOf("jpg")
返回-1
,而+3
给出了-2
!
答案 1 :(得分:0)
这就是我要怎么做。
为XML创建XSD 如果使用Intellij,则可以从XML创建XSD
使用JAXB创建映射对象 您可以将XSD放入资源文件夹,并使用JAXB maven插件在构建maven项目时为您生成类。
<plugin> <groupId>org.jvnet.jaxb2.maven2</groupId> <artifactId>maven-jaxb2-plugin</artifactId> <version>0.12.3</version> <executions> <execution> <goals> <goal>generate</goal> </goals> </execution> </executions> </plugin>
类在
中生成JAXBContext jaxbContext = JAXBContext.newInstance(MessageType.class, ObjectFactory.class); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); Source source = new StreamSource(new StringReader(xml)); JAXBElement<MessageType> root = unmarshaller.unmarshal(source, MessageType.class);
这种方法比尝试自己解析XML文档要好得多。
如果您必须手动进行
如果您只是想按照自己的方式去做,那么在做子字符串之前,我会检查一些事情。
if (desc.indexOf("src=") > 0 && desc.indexOf("jpg") > desc indexOf("src") + 5) {
....
}