osc的android端有一个使用序列化缓存的问题

发布于 2021-11-26 09:35:47 字数 5313 浏览 782 评论 3

最近想学习一下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;       
	}
}



其中,List<Tweet> tweetList 除了显示初始化了一个ArrayList(),其他地方就没用到。

缓存是把整个TweetList序列化到sd卡上,但是这个tweetList不是size 时钟为0吗?从网上加载数据后又没有改变他的值,连set方法连没有提供,这是怎么做到的?


如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

如日中天 2021-11-29 17:29:33

多谢。tweetlist.getTweetlist().add(tweet); 一开始这句话没看到。。

顾挽 2021-11-29 17:29:20

这里只是一个javabean,整个动弹列表的缓存逻辑是,在列表显示的时候首先去读本地数据,如果没有或过期则请求网络,然后网络请求成功以后开始解析请求到的数据,也就是调用你贴出来的parse()方法,得到解析以后的数据。再通过object输出流写入到文件中缓存起来。下次进入,使用object流读取文件内容就直接读到上次解析完成的list对象。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文