Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.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
Java 从my MainActivity访问时,服务中的静态ArrayList为空_Java_Android - Fatal编程技术网

Java 从my MainActivity访问时,服务中的静态ArrayList为空

Java 从my MainActivity访问时,服务中的静态ArrayList为空,java,android,Java,Android,我正在制作一个基本的应用程序,它只从谷歌读取RSS文件,并在列表视图中显示标题。我遇到的问题是,当我在启动intent服务后访问intent服务时,我在IntentService中使用的静态ArrayList是空的。这里可能缺少一些非常基本的东西,但在我向服务添加更多RSS链接之前,tit一直在工作。我试着对它们进行注释,看看是否有某种过载,但没有任何改变,我想这意味着我在没有意识到或记住的情况下改变了其他东西 这是我的相关代码,我试图访问的ArrayList是RSSsearcher中的news

我正在制作一个基本的应用程序,它只从谷歌读取RSS文件,并在列表视图中显示标题。我遇到的问题是,当我在启动intent服务后访问intent服务时,我在IntentService中使用的静态ArrayList是空的。这里可能缺少一些非常基本的东西,但在我向服务添加更多RSS链接之前,tit一直在工作。我试着对它们进行注释,看看是否有某种过载,但没有任何改变,我想这意味着我在没有意识到或记住的情况下改变了其他东西

这是我的相关代码,我试图访问的ArrayList是RSSsearcher中的newsList变量。在过去,我记录了arraylist的字符串值,并确认它是在RSSsearcher类中填充的,但在MainActivity类中为空

相关代码:

RSSsearcher:

public class RSSsearcher extends IntentService {
    public static ArrayList<NewsCard> newsList = new ArrayList<>();
    private static String TAG = "RSS";

    public RSSsearcher() {
        super("RSSsearcher");
    }

    @Override
    protected void onHandleIntent(@Nullable Intent intent) {
        parseNewsLists();
        Log.i(TAG,"newsList in onHandleIntent" + newsList);
    }

    public static ArrayList<NewsCard> getNewsCards() {
        return newsList;
    }

    //helper method to create all the RSSfeed objects
    private void parseNewsLists() {
        Log.i(TAG, "the service has been started");
        //Creating the RSS feed objects
        RSSfeed topStories = new RSSfeed("https://news.google.com/news?cf=all&hl=en&pz=1&ned=us&output=rss");
        RSSfeed worldNews = new RSSfeed("https://news.google.com/news/rss/headlines/section/topic/WORLD?ned=us&hl=en");
        RSSfeed usNews = new RSSfeed("https://news.google.com/news/rss/headlines/section/topic/NATION?ned=us&hl=en");
        RSSfeed buisnessNews = new RSSfeed("https://news.google.com/news/rss/headlines/section/topic/BUSINESS?ned=us&hl=en");
        RSSfeed technologyNews = new RSSfeed("https://news.google.com/news/rss/headlines/section/topic/TECHNOLOGY?ned=us&hl=en");
        RSSfeed entertainmentNews = new RSSfeed("https://news.google.com/news/rss/headlines/section/topic/ENTERTAINMENT?ned=us&hl=en");
        RSSfeed sportsNews = new RSSfeed("https://news.google.com/news/rss/headlines/section/topic/SPORTS?ned=us&hl=en");
        RSSfeed scienceNews = new RSSfeed("https://news.google.com/news/rss/headlines/section/topic/SCIENCE?ned=us&hl=en");
        RSSfeed healthNews = new RSSfeed("https://news.google.com/news/rss/headlines/section/topic/HEALTH?ned=us&hl=en");

        try {
            //getting RSS feeds
            topStories.FileReader();
            worldNews.FileReader();
            usNews.FileReader();
            buisnessNews.FileReader();
            technologyNews.FileReader();
            entertainmentNews.FileReader();
            sportsNews.FileReader();
            scienceNews.FileReader();
            healthNews.FileReader();
        } catch (Exception e) {
            Log.i(TAG, Log.getStackTraceString(e));
        }
        //adding stories to main
        newsList.addAll(topStories.getNews());
        newsList.addAll(worldNews.getNews());
        newsList.addAll(usNews.getNews());
        newsList.addAll(buisnessNews.getNews());
        newsList.addAll(technologyNews.getNews());
        newsList.addAll(entertainmentNews.getNews());
        newsList.addAll(sportsNews.getNews());
        newsList.addAll(scienceNews.getNews());
        newsList.addAll(healthNews.getNews());
    }

}

提前谢谢你

我想当你打电话的时候

newsList.addAll(RSSsearcher.getNewsCards());

intent仍在执行中

仅仅因为您启动了intent服务,并不意味着在您执行此操作时,它已经拥有了一切
newsList.addAll(RSSsearcher.getNewsCards())。在was中访问数据并不是一个好主意。
buisnessNews
拼写错误。Tyczj,我之所以希望它与服务一起使用,是因为我希望应用程序在后台每隔一个小时左右都能不断获取RSS提要,但我还没有添加该部分。有更好的方法吗?卢·布洛赫,的确如此。编辑我没有完成键入。我是否可以等待意图完成执行或在其他任务中执行?如果我在AsyncTask中完成了它,那么我仍然会有相同的问题,因为它在一个单独的线程中,对吗?
newsList.addAll(RSSsearcher.getNewsCards());