Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.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_Rss_Sax_Saxparser - Fatal编程技术网

Android 使用RSS解析库,不';不行。应用崩溃

Android 使用RSS解析库,不';不行。应用崩溃,android,rss,sax,saxparser,Android,Rss,Sax,Saxparser,我正在尝试使用这个实现来实现非常简单的RSS解析器,根据实现,我所要做的就是粘贴提供的示例代码,一旦我将代码导入到库中 我已采取的步骤: 从上面提供的链接下载zip文件 从现有代码创建新项目 将添加的项目作为库添加到我的项目中 从上面提供的链接中添加示例代码,并使用try-and-catch语句对其进行修改,并添加textview作为rss提要中标题的输出 尝试并运行应用程序。它崩溃了 是因为图书馆很旧吗?我做错什么了吗?非常感谢您的帮助 代码: package com.example.rss

我正在尝试使用这个实现来实现非常简单的RSS解析器,根据实现,我所要做的就是粘贴提供的示例代码,一旦我将代码导入到库中

我已采取的步骤:

  • 从上面提供的链接下载zip文件
  • 从现有代码创建新项目
  • 将添加的项目作为库添加到我的项目中
  • 从上面提供的链接中添加示例代码,并使用try-and-catch语句对其进行修改,并添加textview作为rss提要中标题的输出
  • 尝试并运行应用程序。它崩溃了
  • 是因为图书馆很旧吗?我做错什么了吗?非常感谢您的帮助


    代码:

    package com.example.rssparser;
    
    import java.io.IOException;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.util.ArrayList;
    
    import org.xml.sax.SAXException;
    
    import nl.matshofman.saxrssreader.RssFeed;
    import nl.matshofman.saxrssreader.RssItem;
    import nl.matshofman.saxrssreader.RssReader;
    import android.app.Activity;
    import android.os.Bundle;
    //import android.util.Log;
    import android.view.Menu;
    import android.widget.TextView;
    
    public class MainActivity extends Activity {
    TextView rss_feed_data;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        URL url;
        try {
            url = new URL("http://wwwnc.cdc.gov/travel/rss/notices.xml");
    
            RssFeed feed;
            try {
                feed = RssReader.read(url);
                ArrayList<RssItem> rssItems = feed.getRssItems();
                for(RssItem rssItem : rssItems) {
                    //Log.i("RSS Reader", rssItem.getTitle());
                    rss_feed_data = (TextView) findViewById(R.id.rss_feed_data);
                    rss_feed_data.setText(rssItem.getTitle());
    
                }
            } catch (SAXException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
    
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
       }
    
    }
    

    当应用程序试图在其主线程上执行联网操作时,会引发此异常。在
    AsyncTask
    中运行代码:

    public class MainActivity extends Activity {
    TextView rss_feed_data;
    String ur = "http://wwwnc.cdc.gov/travel/rss/notices.xml";
    ProgressDialog pDialog;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        rss_feed_data = (TextView) findViewById(R.id.rss_feed_data);
    
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
             new XmlParsing(ur).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, new String[]{null});
        else
             new XmlParsing(ur).execute(new String[]{null});
    
    }
    
    public class XmlParsing extends AsyncTask<String, String, ArrayList<RssItem>> {
    
            // variables passed in:
            String urls;
            //  constructor
            public XmlParsing(String urls) {
                this.urls = urls;
            }
    
            @Override
            protected void onPreExecute() {
                pDialog = ProgressDialog.show(NetActivity.this, "Fetching Details..", "Please wait...", true);
            }
    
    
            @Override
            protected String doInBackground(String... params) {
                // TODO Auto-generated method stub
    
    
                URL url;
            try {
                url = new URL();
    
                RssFeed feed;
                try {
                    feed = RssReader.read(url);
                    ArrayList<RssItem> rssItems = feed.getRssItems();
                    return rssItems;
                    }
                } catch (SAXException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
    
    
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
                return null;
            }
    
            @Override
            protected void onPostExecute(String result) {
                // Now we have your JSONObject, play around with it.
                if (pDialog.isShowing())
                    pDialog.dismiss();
    
                for(RssItem rssItem : rssItems) {
                        //Log.i("RSS Reader", rssItem.getTitle());
    
                        rss_feed_data.setText(rssItem.getTitle());
            }
    
        }
    
    公共类MainActivity扩展活动{
    TextView rss_提要_数据;
    字符串ur=”http://wwwnc.cdc.gov/travel/rss/notices.xml";
    ProgressDialog;
    @凌驾
    创建时受保护的void(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    rss_提要_数据=(TextView)findViewById(R.id.rss_提要_数据);
    if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.HONEYCOMB)
    新的XmlParsing(ur).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,新字符串[]{null});
    其他的
    新建XmlParsing(ur).execute(新字符串[]{null});
    }
    公共类XmlParsing扩展了异步任务{
    //传入的变量:
    字符串URL;
    //建造师
    公共XML解析(字符串URL){
    this.url=url;
    }
    @凌驾
    受保护的void onPreExecute(){
    pDialog=ProgressDialog.show(NetActivity.this,“正在获取详细信息…”,“请稍候…”,true);
    }
    @凌驾
    受保护的字符串doInBackground(字符串…参数){
    //TODO自动生成的方法存根
    网址;
    试一试{
    url=新url();
    RssFeed饲料;
    试一试{
    feed=RssReader.read(url);
    ArrayList rssItems=feed.getRssItems();
    返回rssItems;
    }
    }捕获(SAXE异常){
    //TODO自动生成的捕捉块
    e、 printStackTrace();
    }捕获(IOE异常){
    //TODO自动生成的捕捉块
    e、 printStackTrace();
    }
    }捕获(格式错误){
    //TODO自动生成的捕捉块
    e、 printStackTrace();
    }
    返回null;
    }
    @凌驾
    受保护的void onPostExecute(字符串结果){
    //现在我们有了您的JSONObject,请使用它。
    if(pDialog.isShowing())
    pDialog.disclose();
    用于(RssItem RssItem:rssItems){
    //Log.i(“RSS阅读器”,rssItem.getTitle());
    rss_feed_data.setText(rssItem.getTitle());
    }
    }
    
    如果它崩溃了,你能发布你的日志吗?我已经添加了日志。我找到了这个[可能的解决方案](),但我不确定如何将其实现到我的代码中。我将发布我对它所做的操作。嘿,我不确定代码是否仅通过复制和粘贴就可以工作,但如果是这样的话,它会有很多错误。我通过eclipse建议修复了大多数错误,但其中一个错误没有推荐的解决方案可以工作。最后是rssItems,悬停在它的上方es(rssItems无法解析为变量)。我已经更新了代码。我知道它看不到上面声明的rssItems,但似乎无法解决它。@paddysal在global中使用
    ArrayList rssItems;
    。是的,我最终解决了这个问题,尽管获取数据要花很长时间。我想我需要使用一些不同的方法。已经过了3分钟,仍然很快程…我添加了logcat,它似乎在一次又一次地做一件事。@paddysal你得到结果了吗?不,它没有返回任何东西,它只是一直在抓取,logcat充满了我上面文章最后一部分的信息。我不知道如何使它工作。我已经在你的web博客上实现了你的代码,它工作正常使用androidhive中的url,但没有尝试修改它以使用我需要的数据来源的rss源url。稍后将进行尝试。
    package com.example.rssparser;
    
    import java.io.IOException;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.util.ArrayList;
    
    import nl.matshofman.saxrssreader.RssFeed;
    import nl.matshofman.saxrssreader.RssItem;
    import nl.matshofman.saxrssreader.RssReader;
    
    import org.xml.sax.SAXException;
    
    import android.app.Activity;
    import android.app.ProgressDialog;
    import android.os.AsyncTask;
    import android.os.Build;
    import android.os.Bundle;
    import android.widget.TextView;
    //import android.util.Log;
    
    public class MainActivity extends Activity {
    TextView rss_feed_data;
    String ur = "http://wwwnc.cdc.gov/travel/rss/notices.xml";
    ProgressDialog pDialog;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    rss_feed_data = (TextView) findViewById(R.id.rss_feed_data);
    
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
         new XmlParsing(ur).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, new String[]{null});
    else
         new XmlParsing(ur).execute(new String[]{null});
    
    }
    
    public class XmlParsing extends AsyncTask<String, String, ArrayList<RssItem>> {
    
        // variables passed in:
        String urls;
        //  constructor
        public XmlParsing(String urls) {
            this.urls = urls;
        }
    
        @Override
        protected void onPreExecute() {
            pDialog = ProgressDialog.show(MainActivity.this, "Fetching Details..", "Please wait...", true);
        }
    
    
        @Override
        protected ArrayList<RssItem> doInBackground(String... params) {
            // TODO Auto-generated method stub
    
    
            URL url;
            try {
                url = new URL(urls);
                RssFeed feed;
                try {
                    feed = RssReader.read(url);
                    ArrayList<RssItem> rssItems = feed.getRssItems();
                    return rssItems;
                    } catch (SAXException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace(); }
                } catch (MalformedURLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
    
                return null;
        }
    
        protected void onPostExecute(String result, ArrayList<RssItem> rssItems) {
            // Now we have your JSONObject, play around with it.
            if (pDialog.isShowing())
                pDialog.dismiss();
    
            for(RssItem rssItem : rssItems) {
                    //Log.i("RSS Reader", rssItem.getTitle());
    
                    rss_feed_data.setText(rssItem.getTitle());
            }
    
        }
    }
    }
    
    11-20 05:36:50.439: I/SurfaceTextureClient(17281): [STC::queueBuffer] this:0x516a20a8, api:1, last queue time elapsed :9510 ms
    11-20 05:36:50.441: I/SurfaceTextureClient(17281): [0x516a20a8] frames:66, duration:10.505000, fps:6.282219
    11-20 05:36:50.473: I/SurfaceTextureClient(17281): [STC::queueBuffer] this:0x51655180, api:1, last queue time elapsed :131816 ms
    11-20 05:36:50.494: I/SurfaceTextureClient(17281): [0x51655180] frames:1, duration:131.815994, fps:0.007586
    11-20 05:36:51.426: I/SurfaceTextureClient(17281): [0x516a20a8] frames:45, duration:1.016000, fps:44.289616
    11-20 05:36:52.437: I/SurfaceTextureClient(17281): [0x516a20a8] frames:66, duration:1.010000, fps:65.308807
    11-20 05:36:53.449: I/SurfaceTextureClient(17281): [0x516a20a8] frames:66, duration:1.012000, fps:65.186592
    11-20 05:36:54.462: I/SurfaceTextureClient(17281): [0x516a20a8] frames:66, duration:1.012000, fps:65.197708
    11-20 05:36:55.474: I/SurfaceTextureClient(17281): [0x516a20a8] frames:66, duration:1.012000, fps:65.203377
    11-20 05:36:56.486: I/SurfaceTextureClient(17281): [0x516a20a8] frames:66, duration:1.012000, fps:65.198250
    11-20 05:36:57.498: I/SurfaceTextureClient(17281): [0x516a20a8] frames:66, duration:1.012000, fps:65.211411
    11-20 05:36:58.509: I/SurfaceTextureClient(17281): [0x516a20a8] frames:66, duration:1.010000, fps:65.283676
    11-20 05:36:59.520: I/SurfaceTextureClient(17281): [0x516a20a8] frames:66,  duration:1.010000, fps:65.318069
    11-20 05:37:00.530: I/SurfaceTextureClient(17281): [0x516a20a8] frames:66, duration:1.010000, fps:65.322647
    11-20 05:37:01.542: I/SurfaceTextureClient(17281): [0x516a20a8] frames:66, duration:1.011000, fps:65.240547
    11-20 05:37:02.556: I/SurfaceTextureClient(17281): [0x516a20a8] frames:66, duration:1.011000, fps:65.244469
    11-20 05:37:03.565: I/SurfaceTextureClient(17281): [0x516a20a8] frames:66, duration:1.011000, fps:65.245308
    11-20 05:37:04.577: I/SurfaceTextureClient(17281): [0x516a20a8] frames:66, duration:1.011000, fps:65.252708
    11-20 05:37:05.588: I/SurfaceTextureClient(17281): [0x516a20a8] frames:66, duration:1.011000, fps:65.248543
    11-20 05:37:06.600: I/SurfaceTextureClient(17281): [0x516a20a8] frames:66, duration:1.011000, fps:65.246178
    11-20 05:37:07.611: I/SurfaceTextureClient(17281): [0x516a20a8] frames:66, duration:1.011000, fps:65.253662
    11-20 05:37:08.622: I/SurfaceTextureClient(17281): [0x516a20a8] frames:66, duration:1.011000, fps:65.253265
    11-20 05:37:09.634: I/SurfaceTextureClient(17281): [0x516a20a8] frames:66, duration:1.011000, fps:65.248100
    11-20 05:37:10.646: I/SurfaceTextureClient(17281): [0x516a20a8] frames:66, duration:1.011000, fps:65.222153
    11-20 05:37:11.656: I/SurfaceTextureClient(17281): [0x516a20a8] frames:66, duration:1.010000, fps:65.313301
    11-20 05:37:12.667: I/SurfaceTextureClient(17281): [0x516a20a8] frames:66, duration:1.010000, fps:65.318176
    11-20 05:37:13.678: I/SurfaceTextureClient(17281): [0x516a20a8] frames:66, duration:1.011000, fps:65.267540
    11-20 05:37:14.689: I/SurfaceTextureClient(17281): [0x516a20a8] frames:66, duration:1.011000, fps:65.262505
    11-20 05:37:15.701: I/SurfaceTextureClient(17281): [0x516a20a8] frames:66, duration:1.011000, fps:65.258896
    11-20 05:37:16.712: I/SurfaceTextureClient(17281): [0x516a20a8] frames:66, duration:1.011000, fps:65.275986
    11-20 05:37:17.723: I/SurfaceTextureClient(17281): [0x516a20a8] frames:66, duration:1.011000, fps:65.265404
    11-20 05:37:18.734: I/SurfaceTextureClient(17281): [0x516a20a8] frames:66, duration:1.011000, fps:65.277664
    11-20 05:37:19.745: I/SurfaceTextureClient(17281): [0x516a20a8] frames:66, duration:1.011000, fps:65.250298
    
    public class MainActivity extends Activity {
    TextView rss_feed_data;
    String ur = "http://wwwnc.cdc.gov/travel/rss/notices.xml";
    ProgressDialog pDialog;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        rss_feed_data = (TextView) findViewById(R.id.rss_feed_data);
    
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
             new XmlParsing(ur).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, new String[]{null});
        else
             new XmlParsing(ur).execute(new String[]{null});
    
    }
    
    public class XmlParsing extends AsyncTask<String, String, ArrayList<RssItem>> {
    
            // variables passed in:
            String urls;
            //  constructor
            public XmlParsing(String urls) {
                this.urls = urls;
            }
    
            @Override
            protected void onPreExecute() {
                pDialog = ProgressDialog.show(NetActivity.this, "Fetching Details..", "Please wait...", true);
            }
    
    
            @Override
            protected String doInBackground(String... params) {
                // TODO Auto-generated method stub
    
    
                URL url;
            try {
                url = new URL();
    
                RssFeed feed;
                try {
                    feed = RssReader.read(url);
                    ArrayList<RssItem> rssItems = feed.getRssItems();
                    return rssItems;
                    }
                } catch (SAXException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
    
    
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
                return null;
            }
    
            @Override
            protected void onPostExecute(String result) {
                // Now we have your JSONObject, play around with it.
                if (pDialog.isShowing())
                    pDialog.dismiss();
    
                for(RssItem rssItem : rssItems) {
                        //Log.i("RSS Reader", rssItem.getTitle());
    
                        rss_feed_data.setText(rssItem.getTitle());
            }
    
        }