Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android RSS解析器致命异常异步任务_Android_Android Asynctask_Rss - Fatal编程技术网

Android RSS解析器致命异常异步任务

Android RSS解析器致命异常异步任务,android,android-asynctask,rss,Android,Android Asynctask,Rss,我是Android初学者,我正在尝试解析RSS提要并存储标题和链接标签中的文本 我使用的是XMLPullParser,我试图只提取item标记之间的数据 AsycTask抛出了一个运行时错误,我不知道是什么导致了它 任何帮助都将不胜感激 代码 公共抽象字符串getName 对于START_标记或END_标记事件,当启用名称空间时,将返回当前元素的本地名称。禁用命名空间处理时,将返回原始名称。对于实体_REF事件,返回实体名称。如果当前事件不是开始标记、结束标记或实体标记,则返回null 所以肯定

我是Android初学者,我正在尝试解析RSS提要并存储标题和链接标签中的文本

我使用的是XMLPullParser,我试图只提取item标记之间的数据

AsycTask抛出了一个运行时错误,我不知道是什么导致了它

任何帮助都将不胜感激

代码

公共抽象字符串getName

对于START_标记或END_标记事件,当启用名称空间时,将返回当前元素的本地名称。禁用命名空间处理时,将返回原始名称。对于实体_REF事件,返回实体名称。如果当前事件不是开始标记、结束标记或实体标记,则返回null


所以肯定的是,你既没有开始标签,也没有结束标签。由于您还没有开始处理,我猜您位于START_DOCUMENT标记上,因此它会抛出该异常。您必须检查要避免此异常的状态。

MainActivity文件的第99行是什么?如果项目标记中有insideItem,则会将其设置为true,然后在提取数据之前检查其是否为true只是一个建议,其中有几种RSS格式以及它们的几种变体,您可以使用GoogleFeedAPI来读取大多数格式,并在saner格式上解析它们
package com.example.simplerssreader;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

import android.app.ListActivity;
import android.content.Intent;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends ListActivity {

    List<String> headlines;
    List<String>links;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

     // Initializing instance variables
        headlines = new ArrayList<String>();
        links = new ArrayList<String>();


      new  XmlParserTask().execute("http://feeds.pcworld.com/pcworld/latestnews");


           ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                    android.R.layout.simple_list_item_1, headlines);

            setListAdapter(adapter);


    }



    public InputStream getInputStream(URL url) {
       try {
           return url.openConnection().getInputStream();
       } catch (IOException e) {
           return null;
         }
    }





       public class  XmlParserTask extends AsyncTask <String, Void, Void>
       {

        @Override
        protected Void doInBackground(String... urls) {

        try{
                    URL url = new URL(urls[0]);

                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                    conn.setReadTimeout(10000 /* milliseconds */);
                    conn.setConnectTimeout(15000 /* milliseconds */);
                    conn.setRequestMethod("GET");
                    conn.setDoInput(true);
                    InputStream stream = conn.getInputStream();
                    // Starts the query
                    conn.connect();
                    XmlPullParserFactory xmlFactoryObject;
                    xmlFactoryObject = XmlPullParserFactory.newInstance();
                    XmlPullParser myParser = xmlFactoryObject.newPullParser();
                    myParser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
                    myParser.setInput(stream, null);

                    int event;
                    String text=null;

                    boolean insideItem =false;


                        event = myParser.getEventType();

                       while (event != XmlPullParser.END_DOCUMENT) {

                       if(myParser.getName().equals("item"))
                       {
                           insideItem = true;
                       }

                       String name=myParser.getName();

                       switch (event){
                          case XmlPullParser.START_TAG:
                        break;
                          case XmlPullParser.TEXT:
                           text = myParser.getText();
                          break;
                          case XmlPullParser.END_TAG:
                           if(name.equals("title") ){

                               if(insideItem == true){
                                headlines.add(text);
                               }
                             }
                             else if(name.equals("link") ){ 
                                 if(insideItem==true)
                                 {
                                links.add(text);
                                 }
                             }

                             else{
                             }
                             break;


                       }
                       if(myParser.getName().equals("item"))
                       {
                           insideItem = false;
                       }
                       event = myParser.next();

    }


        } catch (XmlPullParserException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

            return null;

        }

       }


}
04-29 16:52:02.140: D/dalvikvm(1270): GC_FOR_ALLOC freed 58K, 5% free 2948K/3092K, paused 49ms, total 50ms
04-29 16:52:02.140: I/dalvikvm-heap(1270): Grow heap (frag case) to 3.562MB for 635812-byte allocation
04-29 16:52:02.250: D/dalvikvm(1270): GC_FOR_ALLOC freed 2K, 5% free 3566K/3716K, paused 58ms, total 58ms
04-29 16:52:02.560: I/Choreographer(1270): Skipped 47 frames!  The application may be doing too much work on its main thread.
04-29 16:52:02.650: D/gralloc_goldfish(1270): Emulator without GPU emulation detected.
04-29 16:52:04.880: W/dalvikvm(1270): threadid=11: thread exiting with uncaught exception (group=0xb2a5dba8)
04-29 16:52:04.910: E/AndroidRuntime(1270): FATAL EXCEPTION: AsyncTask #1
04-29 16:52:04.910: E/AndroidRuntime(1270): Process: com.example.simplerssreader, PID: 1270
04-29 16:52:04.910: E/AndroidRuntime(1270): java.lang.RuntimeException: An error occured while executing doInBackground()
04-29 16:52:04.910: E/AndroidRuntime(1270):     at android.os.AsyncTask$3.done(AsyncTask.java:300)
04-29 16:52:04.910: E/AndroidRuntime(1270):     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
04-29 16:52:04.910: E/AndroidRuntime(1270):     at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
04-29 16:52:04.910: E/AndroidRuntime(1270):     at java.util.concurrent.FutureTask.run(FutureTask.java:242)
04-29 16:52:04.910: E/AndroidRuntime(1270):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
04-29 16:52:04.910: E/AndroidRuntime(1270):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
04-29 16:52:04.910: E/AndroidRuntime(1270):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
04-29 16:52:04.910: E/AndroidRuntime(1270):     at java.lang.Thread.run(Thread.java:841)
04-29 16:52:04.910: E/AndroidRuntime(1270): Caused by: java.lang.NullPointerException
04-29 16:52:04.910: E/AndroidRuntime(1270):     at com.example.simplerssreader.MainActivity$XmlParserTask.doInBackground(MainActivity.java:99)
04-29 16:52:04.910: E/AndroidRuntime(1270):     at com.example.simplerssreader.MainActivity$XmlParserTask.doInBackground(MainActivity.java:1)
04-29 16:52:04.910: E/AndroidRuntime(1270):     at android.os.AsyncTask$2.call(AsyncTask.java:288)
04-29 16:52:04.910: E/AndroidRuntime(1270):     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
04-29 16:52:04.910: E/AndroidRuntime(1270):     ... 4 more
04-29 16:57:05.340: I/Process(1270): Sending signal. PID: 1270 SIG: 9