osc的android端有一个使用序列化缓存的问题
最近想学习一下osc是如何处理缓存的,就拿动弹列表的缓存为例。下面是TweetList代码
public class TweetList extends Entity{ public final static int CATALOG_LASTEST = 0; public final static int CATALOG_HOT = -1; private int pageSize; private int tweetCount; private List<Tweet> tweetlist = new ArrayList<Tweet>(); public int getPageSize() { return pageSize; } public int getTweetCount() { return tweetCount; } public List<Tweet> getTweetlist() { return tweetlist; } public static TweetList parse(InputStream inputStream) throws IOException, AppException { TweetList tweetlist = new TweetList(); Tweet tweet = null; //获得XmlPullParser解析器 XmlPullParser xmlParser = Xml.newPullParser(); try { xmlParser.setInput(inputStream, UTF8); //获得解析到的事件类别,这里有开始文档,结束文档,开始标签,结束标签,文本等等事件。 int evtType=xmlParser.getEventType(); //一直循环,直到文档结束 while(evtType!=XmlPullParser.END_DOCUMENT){ String tag = xmlParser.getName(); switch(evtType){ case XmlPullParser.START_TAG: if(tag.equalsIgnoreCase("tweetCount")) { tweetlist.tweetCount = StringUtils.toInt(xmlParser.nextText(),0); } else if(tag.equalsIgnoreCase("pageSize")) { tweetlist.pageSize = StringUtils.toInt(xmlParser.nextText(),0); } else if (tag.equalsIgnoreCase(Tweet.NODE_START)) { tweet = new Tweet(); } else if(tweet != null) { if(tag.equalsIgnoreCase(Tweet.NODE_ID)) { tweet.id = StringUtils.toInt(xmlParser.nextText(),0); } else if(tag.equalsIgnoreCase(Tweet.NODE_FACE)) { tweet.setFace(xmlParser.nextText()); } else if(tag.equalsIgnoreCase(Tweet.NODE_BODY)) { tweet.setBody(xmlParser.nextText()); } else if(tag.equalsIgnoreCase(Tweet.NODE_AUTHOR)) { tweet.setAuthor(xmlParser.nextText()); } else if(tag.equalsIgnoreCase(Tweet.NODE_AUTHORID)) { tweet.setAuthorId(StringUtils.toInt(xmlParser.nextText(),0)); } else if(tag.equalsIgnoreCase(Tweet.NODE_COMMENTCOUNT)) { tweet.setCommentCount(StringUtils.toInt(xmlParser.nextText(),0)); } else if(tag.equalsIgnoreCase(Tweet.NODE_PUBDATE)) { tweet.setPubDate(xmlParser.nextText()); } else if(tag.equalsIgnoreCase(Tweet.NODE_IMGSMALL)) { tweet.setImgSmall(xmlParser.nextText()); } else if(tag.equalsIgnoreCase(Tweet.NODE_IMGBIG)) { tweet.setImgBig(xmlParser.nextText()); } else if(tag.equalsIgnoreCase(Tweet.NODE_APPCLIENT)) { tweet.setAppClient(StringUtils.toInt(xmlParser.nextText(),0)); } } //通知信息 else if(tag.equalsIgnoreCase("notice")) { tweetlist.setNotice(new Notice()); } else if(tweetlist.getNotice() != null) { if(tag.equalsIgnoreCase("atmeCount")) { tweetlist.getNotice().setAtmeCount(StringUtils.toInt(xmlParser.nextText(),0)); } else if(tag.equalsIgnoreCase("msgCount")) { tweetlist.getNotice().setMsgCount(StringUtils.toInt(xmlParser.nextText(),0)); } else if(tag.equalsIgnoreCase("reviewCount")) { tweetlist.getNotice().setReviewCount(StringUtils.toInt(xmlParser.nextText(),0)); } else if(tag.equalsIgnoreCase("newFansCount")) { tweetlist.getNotice().setNewFansCount(StringUtils.toInt(xmlParser.nextText(),0)); } } break; case XmlPullParser.END_TAG: //如果遇到标签结束,则把对象添加进集合中 if (tag.equalsIgnoreCase("tweet") && tweet != null) { tweetlist.getTweetlist().add(tweet); tweet = null; } break; } //如果xml没有结束,则导航到下一个节点 evtType=xmlParser.next(); } } catch (XmlPullParserException e) { throw AppException.xml(e); } finally { inputStream.close(); } return tweetlist; } }
缓存是把整个TweetList序列化到sd卡上,但是这个tweetList不是size 时钟为0吗?从网上加载数据后又没有改变他的值,连set方法连没有提供,这是怎么做到的?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
多谢。tweetlist.getTweetlist().add(tweet); 一开始这句话没看到。。
这里只是一个javabean,整个动弹列表的缓存逻辑是,在列表显示的时候首先去读本地数据,如果没有或过期则请求网络,然后网络请求成功以后开始解析请求到的数据,也就是调用你贴出来的parse()方法,得到解析以后的数据。再通过object输出流写入到文件中缓存起来。下次进入,使用object流读取文件内容就直接读到上次解析完成的list对象。
@火蚁
@张涛osc