【问题标题】:Using stringbuilder and bufferedreader to read more than one link使用 stringbuilder 和 bufferedreader 读取多个链接
【发布时间】:2013-11-29 08:14:23
【问题描述】:

我正在尝试从下面代码中的 xml 源 txt 文件中读取多个 rss 链接。我使用; 作为分隔符。从调试来看,它似乎将所有链接都发送到RSS_LINK,这显然是行不通的。

StringBuilder rsslink = new StringBuilder();
InputStream is = getResources().openRawResource(R.raw.xmlsource);
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line = null;

try {
    while ((line = br.readLine()) != null) 
    {
       rsslink.append(line) ;
    }
    String [] arr = rsslink.toString().split(";"); 
    for (int i = 0; i < arr.length; i++)
        {
        }
} 
catch (IOException e) 
{
    e.printStackTrace();
}
String RSS_LINK = rsslink.toString();

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);
}

新代码

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

    try {
        while ((line = br.readLine()) != null) 
        {
           rsslink.append(line) ;
        }
        String [] arr = rsslink.toString().split(";"); 
        for (int i = 0; i < arr.length; i++)
        {
            String RssLink = arr[i];

            Log.d(Constants.TAG, "Service started");
            List<RssItem> rssItems = null;
            try 
            {
                XMLRssParser parser = new XMLRssParser();
                rssItems = parser.parse(getInputStream(RssLink));
            } 
            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);
        }
    } 
    catch (IOException e) 
    {
        e.printStackTrace();
    }

【问题讨论】:

    标签: java android bufferedreader stringbuilder delimiter


    【解决方案1】:

    您拆分了rsslink,但不是使用生成的arr,而是继续使用rsslink,它仍然包含所有链接和;

    您需要将所有 rss 处理(解析等)放入循环中:

    String [] arr = rsslink.toString().split(";"); 
    for (int i = 0; i < arr.length; i++)
        {
            // HERE IS THE PLACE TO HANDLE a single RSS Link. arr contains the single link
        }
    

    【讨论】:

    • 谢谢,我通过将处理部分移动到 for 循环然后发送 RSS_LINK = arr[i] 来让它有点工作我现在面临的问题是它正在循环通过链接并摆脱以前的回到循环顶部时的链接,所以它只显示循环内链接的内容。
    • 感谢您提供新代码。看起来像这一行:ResultReceiver receiver = intent.getParcelableExtra(RECEIVER); 总是指代接收者的同一个实例,并且对send(0, bundle) 的调用因此有点取消或覆盖之前循环中的发送。但是在这里,我的知识走到了尽头。您可以尝试一下以确保始终获得接收器的新实例 - 或者 - 您尝试在发送下一个请求之前等待结果 - 或者 - 您在 stackoverflow.com 中再次询问此特定问题。希望它至少对这一点有所帮助:-)
    • 谢谢你的帮助..无论如何我都会选择这个作为答案
    猜你喜欢
    • 2014-06-06
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 2014-05-21
    • 1970-01-01
    • 2018-08-04
    相关资源
    最近更新 更多