如何在RSS android应用程序中查看来自多个源的提要

时间:2013-10-23 04:43:49

标签: java android rss

在Android开发方面,我有点像菜鸟,所以非常感谢所有的帮助。

我正在尝试在我正在开发的rss应用程序中查看来自多个源的提要。目前我只有一个单独的“feed”硬编码到源代码中。

我想我可以通过在资源文件夹中的文本文件中存储我想要的所有源列表并让应用程序使用该列表来获取源来实现它。我基本上遇到了如何实现编码的问题,因为我对android编码不是很好。主要原因是因为现在我需要成为一个证明应用程序可以与源通信以获取和检索数据的原因,并且因为未来的发展将要求用户能够手动添加源,所以我认为他们可以写来自文本文件

并从中检索

如果这是一个更容易或更直接的方式,我欢迎任何建议。

由于

编辑对我的代码进行了一些更改,仍然没有运行但是使用调试器我可以告诉它实际上是在读取文件,问题似乎是在String[] RssLinksArray = readLine.split("[\\;]+");代码终止了,我不能为我的生活找出原因。我也附加了logcat。

非常感谢任何帮助。

package com.simplerssreader;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Serializable;
import java.net.URL;
import java.util.List;
import java.util.Scanner;

import org.xmlpull.v1.XmlPullParserException;

import android.app.IntentService;
import android.content.Intent;
import android.os.Bundle;
import android.os.ResultReceiver;
import android.util.Log;

public class RssService extends IntentService 
{
public static final String ITEMS = "items";
public static final String RECEIVER = "receiver";

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

@Override
protected void onHandleIntent(Intent intent) 
{   
            String rsslink = "";
    InputStream is = getResources().openRawResource(R.raw.xmlsource);
    BufferedReader br = new BufferedReader(new InputStreamReader(is));
    String line = null;

    try {
        while ((line = br.readLine()) != null) 
        {
           rsslink +=line ;
        }
    } 
    catch (IOException e) 
    {
        e.printStackTrace();
    }
    String RSS_LINK = rsslink;

    Log.d(Constants.TAG, "Service started");
    List<RssItem> rssItems = null;
    try 
    {
        XMLRssParser parser = new XMLRssParser();
        rssItems = parser.parse(getInputStream(RSS_LINK));
    } 
    catch (XmlPullParserException e) 
    {
        Log.w(e.getMessage(), e);
    } 
    catch (IOException e) 
    {
        Log.w(e.getMessage(), e);
    }
    Bundle bundle = new Bundle();
    bundle.putSerializable(ITEMS, (Serializable) rssItems);
    ResultReceiver receiver = intent.getParcelableExtra(RECEIVER);
    receiver.send(0, bundle);
}

public InputStream getInputStream(String link) 
{
    try 
    {
        URL url = new URL(link);
        return url.openConnection().getInputStream();
    } catch (IOException e) 
    {
        Log.w(Constants.TAG, "Exception while retrieving the input stream", e);
        return null;
    }
}
}

logcat的

10-24 23:07:49.908: D/dalvikvm(1189): GC_FOR_ALLOC freed 101K, 9% free 2778K/3040K, paused 68ms, total 72ms
10-24 23:07:49.938: I/dalvikvm-heap(1189): Grow heap (frag case) to 3.939MB for 1127536-byte allocation
10-24 23:07:50.089: D/dalvikvm(1189): GC_FOR_ALLOC freed 2K, 7% free 3877K/4144K, paused 149ms, total 149ms
10-24 23:07:50.461: W/dalvikvm(1189): threadid=11: thread exiting with uncaught exception (group=0x41465700)
10-24 23:07:50.504: E/AndroidRuntime(1189): FATAL EXCEPTION: IntentService[RssService]
10-24 23:07:50.504: E/AndroidRuntime(1189): java.lang.NullPointerException
10-24 23:07:50.504: E/AndroidRuntime(1189):     at com.simplerssreader.RssService.onHandleIntent(RssService.java:48)
10-24 23:07:50.504: E/AndroidRuntime(1189):     at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
10-24 23:07:50.504: E/AndroidRuntime(1189):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-24 23:07:50.504: E/AndroidRuntime(1189):     at android.os.Looper.loop(Looper.java:137)
10-24 23:07:50.504: E/AndroidRuntime(1189):     at android.os.HandlerThread.run(HandlerThread.java:61)
10-24 23:07:50.899: D/libEGL(1189): loaded /system/lib/egl/libEGL_emulation.so
10-24 23:07:50.940: D/(1189): HostConnection::get() New Host Connection established 0x2a1db628, tid 1189
10-24 23:07:51.078: D/libEGL(1189): loaded /system/lib/egl/libGLESv1_CM_emulation.so
10-24 23:07:51.279: D/libEGL(1189): loaded /system/lib/egl/libGLESv2_emulation.so
10-24 23:07:51.699: W/EGL_emulation(1189): eglSurfaceAttrib not implemented
10-24 23:07:51.729: D/OpenGLRenderer(1189): Enabling debug mode 0
10-24 23:07:51.769: I/Choreographer(1189): Skipped 85 frames!  The application may be doing too much work on its main thread.
10-24 23:07:56.358: I/Choreographer(1189): Skipped 265 frames!  The application may be doing too much work on its main thread.

2 个答案:

答案 0 :(得分:2)

如果您在Android中寻找XML parser,那么您可以在博客上查看我的以下帖子。它使用sdcard中的XML源代码。您可以简单地将源设置为基于Web的RSS。 http://xelsoft.wordpress.com/2013/05/31/xml-parsing-android-java/

你想要的是将RSS来源放在一个文本文件中,所以你需要在android中查看阅读文本文件。

修改

从原始文件夹中的res文件夹中读取文本文件

InputStream stream = getResources().openRawResource(R.raw.textfile);
BufferedReader br = new BufferedReader(new InputStreamReader(stream));
        String readLine = null;

        try {
            while ((readLine = br.readLine()) != null) {


            }
        } catch (IOException e) {
            e.printStackTrace();
        }

文本文件中的RSS links示例文本

http://yourlink/rss1.xml;http://yourlink/rss2.xml;http://yourlink/rss3.xml

现在读完文件后,上面的文字在readLine字符串变量中。现在在readLine变量上应用String类的split函数。

String[] RssLinksArray = readLine.split(';');

指向数组中的链接

RSS-Link = RssLinksArray[0];

答案 1 :(得分:0)

试试这个..

以下是来自url的rss feed的以下教程..

http://iamvijayakumar.blogspot.in/2012/06/android-rss-feed-reader-example.html

您还可以看到获取Feed的异步任务以及带图片的自定义列表视图。