1

当谈到 android 开发时,我有点菜鸟,所以所有的帮助都将不胜感激。

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

我想我可以通过将我想要的所有来源的列表存储在资产文件夹中的文本文件中并让应用程序使用该列表来获取提要来接近它。我基本上在弄清楚如何实现编码方面遇到了问题,因为我对 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.
4

2 回答 2

2

如果您正在寻找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

现在,在您阅读文件后,上面的文本位于readLineString 变量中。现在将 String 类的 split 函数应用于readLine变量。

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

像这样指向数组中的链接

RSS-Link = RssLinksArray[0];
于 2013-10-23T04:56:12.123 回答
0

尝试这个 ..

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

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

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

于 2013-10-23T05:13:52.033 回答