【问题标题】:How to view feeds from multiple sources in RSS android application如何在 RSS android 应用程序中查看来自多个来源的提要
【发布时间】:2013-10-23 04:43:48
【问题描述】:

在 android 开发方面我有点菜鸟,因此我们将不胜感激所有帮助。

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

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

如果有更简单或直接的方法来解决这个问题,我会欢迎任何建议。

谢谢

EDIT 对下面的代码进行了一些更改,但仍然无法运行,但使用调试器我可以看出它实际上读取了文件,问题似乎出在 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.

【问题讨论】:

    标签: java android rss


    【解决方案1】:

    如果您在 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];
    

    【讨论】:

    • 是的,我想要做的是将源代码放在一个文本文件中,并让它从那里读取它们,就好像它正在读取硬编码的源代码一样。我在搜索文件读取时发现了这个stackoverflow.com/questions/3707256/read-text-file-as-resource,不确定它是否有用,希望你能给我一些指示
    • 看我的编辑,你应该根据你的要求尝试上面的。
    • 好吧,如果您不介意,再问一个问题。即使我将代码行添加到 RssService 类,我如何让 RSS-LINK 指向文件的内容
    • 您需要做的是,将 url 放在文本文件中,添加一个标识符,如“;”每个链接之间的分号,然后拆分您在 readline 中阅读的文本。这将为您提供一个 url 数组,您可以根据需要指向 RSS-LINK。
    • 尝试了您的建议参见上面的编辑,但它甚至无法运行,它试图启动并且应用程序强制关闭
    【解决方案2】:

    试试这个..

    这是来自 url 的 rss 提要的以下教程..

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

    您还可以看到获取提要的异步任务以及带有图像的自定义列表视图。

    【讨论】:

    • 这个人所拥有的有点类似于我已经拥有的。他将提要的 URL 硬编码到源代码中。我试图通过使用上述方法来避免这样做
    猜你喜欢
    • 1970-01-01
    • 2023-03-18
    • 2011-01-26
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    相关资源
    最近更新 更多