首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阅读RSS源,数据结束前阅读器结束

阅读RSS源,数据结束前阅读器结束
EN

Stack Overflow用户
提问于 2010-10-21 09:25:01
回答 2查看 838关注 0票数 0

我正在用Java为Android设备编写代码。我只想读取RSS提要中的所有数据,然后我就有了一个解析器来处理这些数据。我遇到的问题是,我的代码只读取了一小部分数据。然后,它会说已经到达了读取器的末端,并继续将部分数据返回给解析器。

我的代码是这样的:

代码语言:javascript
复制
try
{
    URL contentUrl = new URL(url); 
    URLConnection conn = contentUrl.openConnection();

    HttpURLConnection httpConn = (HttpURLConnection) conn;
    httpConn.setAllowUserInteraction(false);
    httpConn.setInstanceFollowRedirects(true);
    httpConn.setRequestMethod("GET");

    httpConn.connect();

    if(httpConn.getResponseCode() == HttpURLConnection.HTTP_OK)
    {
        InputStreamReader inStr = new InputStreamReader(httpConn.getInputStream());                                 

        int charsRead;
        char[] buff = new char[BUFFER_SIZE];
        String data = "";
        while((charsRead = inStr.read(buff,0,BUFFER_SIZE))!= -1)
        {
            data += String.copyValueOf(buff, 0, charsRead);
            buff = new char[BUFFER_SIZE];
        }
        Log.d("Http","Data: "+data.);
        return data;
    }
    else
    {
        return null;
    }
}
catch(IOException e)
{
    return null;
}

调试日志输出如下所示:

代码语言:javascript
复制
> D/dalvikvm(19134): GC_FOR_MALLOC freed 24 objects / 757272 bytes in 27ms
D/dalvikvm(19134): GC_FOR_MALLOC freed 2 objects / 48 bytes in 26ms
D/dalvikvm(19134): GC_FOR_MALLOC freed 3 objects / 301112 bytes in 29ms
I/dalvikvm-heap(19134): Grow heap (frag case) to 3.677MB for 305028-byte allocation
D/dalvikvm(19134): GC_FOR_MALLOC freed 0 objects / 0 bytes in 37ms
D/dalvikvm(19134): GC_FOR_MALLOC freed 10 objects / 760856 bytes in 27ms
D/dalvikvm(19134): GC_FOR_MALLOC freed 3 objects / 305112 bytes in 26ms
D/dalvikvm(19134): GC_FOR_MALLOC freed 10 objects / 770856 bytes in 26ms
D/dalvikvm(19134): GC_FOR_MALLOC freed 2 objects / 48 bytes in 26ms
D/dalvikvm(19134): GC_FOR_MALLOC freed 3 objects / 309112 bytes in 27ms
D/dalvikvm(19134): GC_FOR_MALLOC freed 22 objects / 777648 bytes in 27ms
D/dalvikvm(19134): GC_FOR_MALLOC freed 2 objects / 48 bytes in 30ms
D/dalvikvm(19134): GC_FOR_MALLOC freed 3 objects / 309288 bytes in 26ms
D/dalvikvm(19134): GC_FOR_MALLOC freed 27 objects / 778696 bytes in 27ms
D/Http    (19134): Data: <?xml version="1.0" encoding="UTF-8"?>
D/Http    (19134): <?xml-stylesheet type="text/xsl" media="screen" href="/~d/sty
les/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http:
//feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.or
g/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:geors
s="http://www.georss.org/georss" xmlns:thr="http://purl.org/syndication/thread/1
.0" xmlns:gd="http://schemas.google.com/g/2005" xmlns:feedburner="http://rssname
space.org/feedburner/ext/1.0" gd:etag="W/&quot;CUcFSHc7fip7ImA9Wx5UFk8.&quot;"><
id>tag:blogger.com,1999:blog-11300808</id><updated>2010-10-20T18:03:39.906-07:00
</updated><title type="text">Google Code Blog</title><subtitle type="html">Updat
es from Google's open source projects.</subtitle><link rel="http://schemas.googl
e.com/g/2005#feed" type="application/atom+xml" href="http://googlecode.blogspot.
com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://g
ooglecode.blogspot.com/" /><link rel="next" type="application/atom+xml" href="ht
tp://www.blogger.com/feeds/11300808/posts/default?start-index=26&amp;max-results
=25&amp;redirect=false&amp;v=2" /><author><name>Chris DiBona</name><email>norepl
y@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.
com">Blogger</generator><openSearch:totalResults>753</openSearch:totalResults><o
penSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openS
earch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="
self" type="application/atom+xml" href="http://feeds.feedburner.com/blogspot/Dcn
i" /><feedburner:info uri="blogspot/dcni" /><atom10:link xmlns:atom10="http://ww
w.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry g
d:etag="W/&quot;CUcFSHc6fCp7ImA9Wx5UFk8.&quot;"><id>tag:blogger.com,1999:blog-11
300808.post-3825033765857847156</id><published>2010-10-20T18:03:00.000-07:00</pu
blished><updated>2010-10-20T18:03:39.914-07:00</updated><app:edited xmlns:app="h
ttp://www.w3.org/2007/app">2010-10-20T18:03:39.914-07:00</app:edited><category s
cheme="http://www.blogger.com/atom/ns#" term="speed tracer" /><category scheme="
http://www.blogger.com/atom/ns#" term="gwt" /><category scheme="http://www.blogg
er.com/atom/ns#" term="eclipse" /><category scheme="http://www.blogger.com/atom/
ns#" term="cloud portability" /><title>Advancing cloud computing with integrated
 developer tools by Google and VMware</title><content type="html">&lt;p&gt;&lt;i
&gt;Cross-posted from the &lt;a href="http://googlewebtoolkit.blogspot.com/"&gt;
Google Web Toolkit Blog&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;
D/Http    (19134):
D/Http    (19134): &lt;p&gt;
D/Http    (19134): Earlier this year at Google I/O, we &lt;a href="http://google
code.blogspot.com/2010/05/enabling-cloud-portability-with-google.html"&gt;announ
ced&lt;/a&gt; a collaboration between &lt;a href="http://www.google.com"&gt;Goog
le&lt;/a&gt; and &lt;a href="http://www.vmware.com"&gt;VMware&lt;/a&gt; focused
on making it easy to build business-oriented, &lt;a href="http://code.google.com
/cloudportability/"&gt;cloud portable&lt;/a&gt; web apps. We showed how business
es could use our integrated developer tools to build modern web apps that are ÔÇ
£cloud readyÔÇØ from the start, and can be deployed to any standard environment,
 including &lt;a href="http://code.google.com/appengine/"&gt;Google App Engine&l
t;/a&gt; and on &lt;a href="http://www.springsource.com/products/cloud-applicati
on-platform"&gt;VMware vFabric&lt;/a&gt; on-premise solutions. Today we are happ
y to announce that these tools will be generally available within the next few w
eeks.
D/Http    (19134): &lt;/p&gt;
D/Http    (19134):
D/Http    (19134): &lt;p&gt;
D/Http    (19134): Of course, if youÔÇÖre itching to get a head start, you can j
ump right in by downloading the release candidate version of &lt;a href="http://
www.springsource.com/landing/best-development-tool-enterprise-java"&gt;SpringSou
rce Tool Suite&lt;/a&gt;.
D/Http    (19134): &lt;/p&gt;
D/Http    (19134):
D/Http    (19134): &lt;p&gt;
D/Http    (19134): If youÔÇÖd prefer to wait for the general release, you can &l
t;a href="http://code.google.com/cloudportability/"&gt;sign up&lt;/a&gt; to be n
otified as soon as they are

如果您检查提要(http://feeds2.feedburner.com/blogspot/Dcni),那么您将看到这只是内容的一小部分。我想既然我收到堆消息,手机可能会用完堆空间,因此退出,但我发现了一个RSS TTS项目,它有自己的http代码:talkingrssreader,当我拿出他们的代码并用我的代码尝试它时,仍然有同样的问题。使用该提要尝试使用talking RSS阅读器应用程序不会出现此问题。

我现在不知所措,不知道还能尝试什么。我可以毫无问题地获取和解析较短的RSS提要,但似乎过了一段时间后,它就会拒绝收集所有数据。我在Android市场上浏览了很多RSS阅读器,没有看到任何其他人缩短了提要,所以我相信这是我的代码的问题,而不是设备内存不足的问题。以下事实进一步证明了这一点:我的代码可以轻松读取119kb的xml文件,但在只有32kb的Google RSS提要上会失败。

有人能给我一些关于这个问题的想法吗?

编辑:添加the100rabh和Isaac建议的更改后,代码现在看起来如下所示:

代码语言:javascript
复制
InputStreamReader inStr = new InputStreamReader(httpConn.getInputStream());                                 

int charsRead;
char[] buff = new char[BUFFER_SIZE];
StringBuffer data = new StringBuffer();
while((charsRead = inStr.read(buff,0,BUFFER_SIZE))!= -1)
{
    data.append(buff, 0, charsRead);
}
Log.d("Http","Data: "+data.toString());
return data.toString();

然而,问题仍然存在。它在与前面的代码完全相同的位置缩短了数据。

EN

回答 2

Stack Overflow用户

发布于 2010-10-21 14:11:16

我认为如果你避免每次都创建buff,你的问题就会出现。

CharBUFFER_SIZE=新缓冲区;

票数 1
EN

Stack Overflow用户

发布于 2010-11-19 00:23:48

好的,这是我最近发现的。Log.d不打印长消息http://code.google.com/p/android/issues/detail?id=5745&q=logcat%20long%20string&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars

所以会发生的情况是,虽然你有数据,logcat不会打印出来。您可以尝试拆分字符串,然后通过logcat打印。您的实际应用程序不会有任何问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3983619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档