资源描述
编号:( )字 号
本科生毕业设计(论文)
微博客户端的设计开发
计班
题目:
姓名: 学号:
班级:
二〇一二年六月
中 国 矿 业 大 学
本科生毕业设计
姓 名: 学 号:
学 院: 计算机科学与技术
专 业: 计算机科学与技术
设计题目: 微博客户端的设计开发
专 题:
指导教师: 徐慧 职 称: 讲师
年 月 徐州
中国矿业大学毕业设计任务书
学院计算机科学与技术 专业年级 计级 学生姓名
任务下达日期:年月日
毕业设计日期: 年月日至年月日
毕业设计题目:微博客户端的设计开发
毕业设计专题题目:
毕业设计主要内容和要求:
毕业设计的软件内容及要求:
. 用户界面美观实用,便于各功能页面导航。
. 系统各功能模块要明确划分。
论文的内容及要求:
. 论文对系统设计的思想进行详细描述,介绍整个软件开发过程。
. 进行系统需求分析,概要设计,详细设计,性能测试。
. 说明开发过程中遇到的问题极其解决方法。
. 最后写出软件开发的体会及收获。
. 严格按照软件工程要求的格式编写文档。
院长签字: 指导教师签字:
中国矿业大学毕业设计指导教师评阅书
指导教师评语(①基础理论及基本技能的掌握;②独立解决实际问题的能力;③研究内容的理论依据和技术方法;④取得的主要成果及创新点;⑤工作态度及工作量;⑥总体评价及建议成绩;⑦存在问题;⑧是否同意答辩等):
成 绩: 指导教师签字:
年 月 日中国矿业大学毕业设计评阅教师评阅书
指导教师评语(①基础理论及基本技能的掌握;②独立解决实际问题的能力;③研究内容的理论依据和技术方法;④取得的主要成果及创新点;⑤工作态度及工作量;⑥总体评价及建议成绩;⑦存在问题;⑧是否同意答辩等):
成 绩: 指导教师签字:
年 月 日
中国矿业大学毕业设计答辩及综合成绩
答 辩 情 况
提 出 问 题
回 答 问 题
正 确
基本
正确
有一般性错误
有原则性错误
没有
回答
答辩委员会评语及建议成绩:
答辩委员会主任签字:
年 月 日
学院领导小组综合评定成绩
学院领导小组负责人:
年 月 日
摘 要
微博即,网上昵称围脖,是一种非正式的迷你型博客,是一个基于用户关系的信息分享、传播及获取平台。用户可以通过、以及各种客户端组件个人社区,以字左右的文字更新信息,并实现即时分享。它是一种互动及传播性极快的工具,传播速度甚至比媒体还快。
本文阐述了新浪微博客户端的各种相关知识,尤其对客户端作了详细的介绍,同时将设计过程中所用到的主要方法及控件进行了详细说明。此次毕业设计以操作系统作为开发平台,作为开发环境,参照新浪提供的,进行微博客户端软件的设计与实现。本软件实现了微博首页获取数据、我的资料、好友资料、我的关注、我的粉丝、收藏微博、评论微博、转发微博、发表微博等功能,具备了一般微博所具有的功能,具有较强的实用性。
关键词:平台;微博; 认证协议
, . , , . , .
, . , . . , , , , , , . .
: ;
目 录
绪论
开发背景及意义
开发背景
意义
开发工具及运行环境
开发工具
运行环境
项目所用技术介绍
简介
系统架构
系统组件
系统分析
功能需求
系统用例图
系统设计
程序总体架构
模块功能设计
详细设计与编码
授权模块
相关的三个
相关的参数定义
认证授权流程
微博首页模块
发布微博模块
基本功能
选择图片上传
好友、添加热点话题和表情
系统测试
授权模块测试用例
发表微博测试用例
浏览微博测试用例
系统评价
总结
参考文献
翻译部分
英文原文
中文译文
致 谢
绪论
开发背景及意义
开发背景
年月,博客技术先驱创始人埃文·威廉姆斯( )创建的新兴公司推出了微博服务。在最初阶段,这项服务只是用于向好友的手机发送文本信息。英文原意为小鸟的叽叽喳喳声,用户能用如发手机短信的数百种工具更新信息。的出现把世人的眼光引入了微博的小小世界里。是一个社交网络及微博客服务。现在,用户可以经由、即时通信、电邮、网站或客户端软件(如)输入最多字的文字更新,被网页流量统计评定为最受欢迎的个网络应用之一。
在年月,国际间计算总共有个类似的网站。然而,最值得注意的仍是,它于年在得克萨斯州奥斯汀举办的南非西南会议赢得了博客类的网站奖。的主要竞争对手是和。后来微博客的新服务特色持续诞生,例如有时间轴可以观看整合了视讯和照片的分享,、整合了微薄客加上档案分享和事件邀请。
在国外的“大红大紫”,令国内有些人终于坐不住了。年从校内网起家的王兴,在年把企业卖给千橡互动后,于第二年建立了饭否网。同样擅长技术活的也瞄准了这个行业,很快清新、简约的随心微博也开始正式上线。而腾讯作为一个拥有亿用户的企业,看着用户对随时随地发布自己状态的强烈需求后,也忍不住尝试了一把,年月日腾讯滔滔上线。
但事实证明,建立的“微型王国”不是在短时间内掘出黄金的浅矿,国内的微博目在当时尚处于慢热的状态。据悉,随心微博、饭否网等目前仅拥有几十万用户,每月处理几千万条信息。国内微博不约而同地将现在的目光放在了产品调整以及服务完善上,在尚无法吸引到风险投资的眼光之前,他们最需要做的可能是如何靠自己的能力继续活下去。
从年中国第一家带有微博色彩的饭否网开张,到年,微博这个全新的名词,以摧枯拉朽的姿态扫荡世界,打败奥巴马、甲流等等名词,成为全世界最流行的词汇。 伴随而来的,是一场微博世界人气的争夺战,大批量的名人被各大网站招揽,各路名人也以微博为平台,在网络世界里聚集人气,同样,新的传播工具也造就了无数的草根英雄,从默默无闻到新的话语传播者,往往只在一夜之间、寥寥数语。
年月中旬开始,国内大批老牌微博产品(饭否、腾讯滔滔等)停止运营,一些新产品开始进入人们的视野,像月份开放的大围脖,月份开放的,月份开放的贫嘴,月份开放的新浪微博。其中在年月日孙楠大连演唱会上的亮相, 是国内第一次将微博引入大型演艺活动,与当年的发展颇有几分神似。
年国内微博迎来了春天,微博像雨后春笋般崛起。四大门户网站均开设微博。根据相关公开数据,截至年月份,微博类产品在全球已经拥有万注册用户。
中国互联网络信息中心()发布的《第次中国互联网络发展状况统计报告》报告显示,年上半年,中国微博用户从万增至亿,增长约倍。该《报告》指出,中国互联网的普及率增至,较年增加。
年上半年,我国微博用户数量从万增至亿,半年增幅高达。微博在网民中的普及率从增至。从年底至今,手机微博在网民中的使用率比例从上升到。
至今,新浪微博用户数超过亿,得益于抢占了先机,而且在整体的战略执行上也比较彻底到位,所以获得了现在的地位。仅仅三年时间,新浪微博就为新浪生下了一个价值几十亿美金的‘金蛋’。
开放()是( ,软件即服务)模式下常见的一种应用,网站的服务商将自己的网站服务封装成一系列( ,应用编程接口)开放出去,供第三方开发者使用,这种行为就叫做开放网站的,所开放的就被称作(开放)。
网站提供开放平台的后,可以吸引一些第三方的开发人员在该平台上开发商业应用,平台提供商可以获得更多的流量与市场份额,第三方开发者不需要庞大的硬件与技术投资就可以轻松快捷的创业,从而达到双赢的目的,开放是大平台发展、共享的途径,让开发者开发一个有价值应用,付出的成本更少,成功的机会更多。今天,作为互联网在线服务的发展基础,已经成为越来越多互联网企业发展服务的必然选择。
的典型成功范例是 和, 有这样的大公司支持,成功当然并不奇怪,但是的成功就很能说明问题。事实上,如果仅仅是一个网页形式的微博客的话,就可以轻松的将其打败,根本不可能取得今天的成就。
的活力就在于开放,的成功和开放密不可分。的开放可以激发个人创作的积极性,引来了大量的第三方应用,这些第三方应用同时又扩大了原有的功能,让更好用,从而极大丰富了平台自身的功用和乐趣,现在,超过一半的流量都是来自第三方。
随着的发布数量不断增加,运营过程中也开始暴露出一些问题。的巨大的访问量引起了种种性能问题,使得的稳定性大为降低,为了支持大量的外部,宕机频繁,这估计是几乎所有用户都遇到过的现象。但即使如此,也没有放弃对的支持。因为开放是历史的潮流,是必然的趋势,顺之者昌,逆之者亡,之所以击败众多各式各样的微博客网站,开放功不可没。
国内的主流微博服务也纷纷开放了,供广大第三方开发者接入微博提供了途径。本论文就是利用新浪微博的开放来完成的。
意义
微博,有点像聊天室或者说是像茶楼酒肆。是沟通人与人之间思想,交流知识,讨论问题和交换观点的网络交际平台。在这个平台上首先是虚拟的人(性别,年龄,职业,喜好,职务...等?)共同谈论你所感兴趣的任何话题,通过你们之间交流争辩让你对它有更进一步的了解和认知。
微博的传播速度更快,关注的人更多,时效性更强。微博上有许多信息是在传统媒体上看不到的,而公众对公共话题天生有一种关注心态,在微博上企业和客户之间不再是单纯的买卖关系,微博用好了,就能够在企业用户中培养出超越买卖的情感关系,在市场竞争中游刃有余。
传统的企业口碑营销,偏重在认识的人之间的口碑,但现在,越来越多的年轻人相信网络社群上不认识的“亲朋好友”的评价。因此,赢得网友的口碑,对企业而言,几乎跟花钱做广告一样重要。微博客的出现丰富了企业网络营销的手段,帮助企业“赢得”陌生人的口碑。
新浪微博主要用户群体集中在影视明星、企业高管、经济学者、传媒专家、营销策划人、评论员、主持人(主播)、创业者、网络红人,这些人基本上代表着颠覆与变革、创新与时尚。
微博客作为一个新的交流互动平台,正在受到越来越多人的青睐。相比博客而言,微博客使用更加简单,用户所付出的单位成本、精力投入都更少,写作门槛更低,用户扩展更为迅速,为可能实现的媒体信息传播积累了庞大的通讯员队伍。同时,整合各类工具尤其是手机短信的优势,微博客具备了实时传播的特性,在面对突发新闻事件时,微博客的报道速度往往能领先于传统媒体。
随着微博的“客”流量不但呈爆炸式增长,而且其影响力也与日俱增。微博客迅速成为中国企业及时传播信息,增加用户与企业粘性的营销利器。众多中小企业纷纷设立官方微博客,安排专人在新浪微博客开博,与粉丝紧密互动,积极推广企业品牌。微博预示着个体的力量不再孱弱,它在影响和改变这个世界上正发挥越来越大的作用。
企业微博的最大价值在于构建与用户沟通的渠道和平台,高效传达及展现企业产品与服务,实现企业品牌的快速传播。越来越多的传统企业成功借助微博宣传企业品牌与企业文化,通过建立口碑来获得长期利益。
开发工具及运行环境
开发工具
1. 操作系统: ,
2. 开发工具: ,:
3. 插件: ()
4. 开发语言:
运行环境
1. 手机型号:摩托罗拉
2. 操作系统: ( )
3. 硬件参数:
a) :德州仪器 ,
b) :
c) 屏幕:寸,×像素
项目所用技术介绍
简介
是一种以为基础的开放源代码操作系统,主要使用于便携设备。目前尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。操作系统最初由 开发,最初主要支持手机。年由收购注资,并组建开放手机联盟开发改良,逐渐扩展到平板电脑及其他领域上。的主要竞争对手是苹果公司的以及的 。年第一季度,在全球的市场份额首次超过塞班系统,跃居全球第一。 年月数据,占据全球智能手机操作系统市场的份额,中国市场占有率为。
系统架构
的系统架构和其它操作系统一样,采用了分层的架构。分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和核心层。
是以为核心的手机操作平台,作为一款开放式的操作系统,随着的快速发展,如今已允许开发者使用多种编程语言来开发应用程序,而不再是以前只能使用开发应用程序的单一局面,因而受到众多开发者的欢迎,成为真正意义上的开放式操作系统。
在中,开发者可以使用作为编程语言来开发应用程序,也可以通过使用作为编程语言来开发应用程序,也可使用来使用其他各种脚本语言进行编程(如:、、、等等),还有其他诸如:( )、( )等一些著名编程框架也开始支持编程,甚至通过,开发者还可以使用作为编程语言来开发应用程序。另外,谷歌还在年特别发布了针对初学者的 语言,该语言类似语言。而在网页编程语言方面,,,,、、、、等等都已经支持开发。
而在系统底层方面,使用作为开发语言。
系统组件
开发四大组件分别是:活动(): 用于表现功能。服务(): 后台运行服务,不提供界面呈现。广播接收器():用于接收广播。内容提供商( ): 支持在多个应用中存储和读取数据,相当于数据库。
中, 是所有程序的根本,所有程序的流程都运行在 之中,可以算是开发者遇到的最频繁,也是 当中最基本的模块之一。在的程序当中, 一般代表手机屏幕的一屏。如果把手机比作一个浏览器,那么就相当于一个网页。在 当中可以添加一些、 等控件。可以看到 概念和网页的概念相当类似。
一般一个 应用是由多个 组成的。这多个 之间可以进行相互跳转,例如,按下一个 按钮后,可能会跳转到其他的。和网页跳转稍微有些不一样的是, 之间的跳转有可能返回值,例如,从 跳转到 ,那么当 运行结束的时候,有可能会给 一个返回值。这样做在很多时候是相当方便的。
当打开一个新的屏幕时,之前一个屏幕会被置为暂停状态,并且压入历史堆栈中。用户可以通过回退操作返回到以前打开过的屏幕。我们可以选择性的移除一些没有必要保留的屏幕,应为会把每个应用的开始到当前的每个屏幕保存在堆栈中。
是 系统中的一种组件,它跟 的级别差不多,但是他不能自己运行,只能后台运行,并且可以和其他组件进行交互。 是没有界面的长生命周期的代码。 是一种程序,它可以运行很长时间,但是它却没有用户界面。这么说有点枯燥,来看个例子。打开一个音乐播放器的程序,这个时候若想上网了,那么,我们打开 浏览器,这个时候虽然我们已经进入了浏览器这个程序,但是,歌曲播放并没有停止,而是在后台继续一首接着一首的播放。其实这个播放就是由播放音乐的进行控制。当然这个播放音乐的也可以停止,例如,当播放列表里边的歌曲都结束,或者用户按下了停止音乐播放的快捷键等。 可以在和多场合的应用中使用,比如播放多媒体的时候用户启动了其他这个时候程序要在后台继续播放,比如检测 卡上文件的变化,再或者在后台记录你地理信息位置的改变等等,总之服务嘛,总是藏在后头的。
在 中, 是一种广泛运用的在应用程序之间传输信息的机制。而 是对发送出来的进行过滤接受并响应的一类组件。可以使用 来让应用对一个外部的事件做出响应。这是非常有意思的,例如,当电话呼入这个外部事件到来的时候,可以利用 进行处理。例如,当下载一个程序成功完成的时候,仍然可以利用 进行处理。不能生成,也就是说对于用户来说不是透明的,用户是看不到的。通过 来通知用户这些事情发生了。 既可以在 中注册,也可以在运行时的代码中使用()进行注册。只要是注册了,当事件来临的时候,即使程序没有启动,系统也在需要的时候启动程序。各种应用还可以通过使用 () 将它们自己的 广播给其他应用程序。
注册有两种方式:
()在进行注册。这种方法有一个特点即使你的应用程序已经关闭了,但这个依然会接受广播出来的对象,也就是说无论你这个应用程序时开还是关都属于活动状态都可以接受到广播的事件;
()在代码中注册广播。第一种俗称静态注册,第二种俗称动态注册,这两种注册的区别:
动态注册较静态注册灵活。实验证明:当静态注册一个时,不论应用程序是启动与否。都可以接受对应的广播。
动态注册的时候,如果不执行();方法取消注册,跟静态是一样的。但是如果执行该方法,当执行过以后,就不能接受广播了。
是提供的第三方应用数据的访问方案。
在中,对数据的保护是很严密的,除了放在卡中的数据,一个应用所持有的数据库、文件、等等内容,都是不允许其他直接访问的。当然不会真的把每个应用都做成一座
孤岛,它为所有应用都准备了一扇窗,这就是 。应用想对外提供的数据,可以通过派生类, 封装成一枚 ,每个 都用一个作为独立的标识,形如:。所有东西看着像的样子,但实际上,它比 更为灵活。和类似,也可以有两种类型,一种是带的,另一种是列表的,但实现者不需要按照这个模式来做,给你的你也可以返回列表类型的数据,只要调用者明白,就无妨,不用苛求所谓的。
另外, 不和一样只有可用,还可以接受,,等参数,这样,就可以像数据库那样进行投影,选择和排序。查询到的结果,以(参见: )的形式进行返回,调用者可以移动来访问各列的数据。
屏蔽了内部数据的存储细节,向外提供了上述统一的接口模型,这样的抽象层次,大大简化了上层应用的书写,也对数据的整合提供了更方便的途径。 内部,常用数据库来实现,提供了强大的支持,但很多时候,你也可以封装文件或其他混合的数据。
在各大组件中,和 都是那种需要持续访问的。如果是一个耗时的场景,往往会提供异步访问的接口,而 不论效率如何,都提供的是约定的同步访问接口。
系统分析
功能需求
此次程序设计任务是平台下的新浪微博客户端设计,程序将在真实手机运行调试。
此次程序设计用户界面要求较为友好,由于针对的用户为智能手机用户,因此程序的操作全部可以通过触控完成操作。本新浪微博客户端要求设计合理.在设计完成后,要求程序能够实现新浪微博的登录功能。同时,程序还必须能够实现对对新浪微博的首页信息获取,用户资料,好友资料,发表微博,用户的关注,用户的粉丝,转发微博,评论微博,收藏微博,我发表的微博等。最后,新浪微博获取信息要具有较高的执行效率。此次程序设计的操作系统要求为 或 。此次程序设计需要在环境下开发。
本客户端的数据都是通过网络来自于新浪的服务器,产生的数据也是上传到新浪的服务器,在客户端存储的只有产生的一些省份识别信息,所以本客户端无需使用数据库。
基于系统需求分析,该系统需要实现以下功能:
()用户登录授权:当用户第一次使用该软件时,会打开新浪微博的授权页面,如果是老用户,则授权登录,若是新用户,则注册新浪微博,然后跳转到微博首页。
()发布微博:发布微博是微博的基本功能,用户将自己想要向外界传达的信息进行发布,这是用户向外传播信息的最主要的途径与方法。
()修改用户个人信息:用户可以根据个人需要修改自己的信息,包括用户名、、心情、以及上传头像或者更改为其他头像。
()查看微博更新:在微博的首页要显示用户关注的博友的最近微博更新,并能够查看微博的评论,以及查看博友的主页。
系统用例图
图 系统用例图
系统设计
程序总体架构
在三层结构中(图),解决了客户机服务器模式面临的许多问题。通过划分客户与服务器之间的功能,分布式计算提供了一种把应用中的用户界面从企业逻辑中分离出来的自然方法。在分布式环境下,企业逻辑提供了一种把应用中的用户界面从企业逻辑中分离出来的自然方法。在分布式环境下,企业逻辑集中地安装在应用服务器上,这样就降低了客户端的负载,同时对敏感信息的访问也可以得到很好的控制。
采用分布式计算有着多方面的技术优势,包括:
)封装性
)性能
)全性管理
在分布式计算模式中,由于所有的商业逻辑都驻留在服务器端,信息管理部就可以十分方便地监控服务器的运行情况,很容易地控制访问服务器以及与服务器应用打交道人员的数量。这可以大大简化管理员对系统的管理,减轻系统维护的工作量,并确保系统的可靠运行。
图三层客户服务器模型
软件设计时,考虑到整个系统的延续性和可扩充性,我们将系统应用体系分为三部
分:用户表现层、数据访问层、商业逻辑层。
()用户表现层:处理用户界面的功能;
()数据访问层:在通常情况下指数据库;
()商业逻辑层:指在程序中做出职能决策的那一部分功能。
微博客户端的结构图如下所示:
图 微博客户端结构图
模块功能设计
本新浪微博客户端大致分为首页、微博详情、用户信息、发布微博、查看评论等模块,分别负责不同的功能:
1. 授权模块:访问用户的信息与数据需要经过用户的授权,所以必须有用户授权的模块本软件才能正常使用。
2. 首页:是用户浏览微博的界面,会将用户所关注的人的微博按照时间先后顺序排列,其中会显示微博的作者、发布时间、内容、转发评论数量、发布方式等。首页是用户使用最多的界面,也是软件初次打开的默认界面。
3. 微博详情:当用户在首页浏览微博的时候,点击某一条微博就会进入到微博详情的界面,这个界面会更详细的展示用户所点击的那条微博,并且提供转发和评论的功能按钮。
4. 用户信息:用户信息是展示用户的界面,何以展示用户本身的信息并修改,也可以查看任何用户感兴趣的用户。
5. 发布微博:用来发布新微博的界面,转发和评论的时候也会用到这个模块。
6. 查看评论:用来浏览某一条微博的评论。
详细设计与编码
下面就对每个模块的设计与开发进行详细叙述:
授权模块
新浪微博采用授权方式来使第三方应用访问用户的数据,这样的话第三方应用就可以在不知道用户帐号和密码的情况下获取用户数据。
协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此是安全的。
协议为用户资源的授权提供了一个安全的、开放而又简易的标准。同时,任何第三方都可以使用认证服务,任何服务提供商都可以实现自身的认证服务,因而是开放的。业界提供了的多种实现如、,,等各种语言开发包,大大节约了程序员的时间,因而是简易的。目前互联网很多服务如 ,很多大公司如,,等都提供了认证服务,这些都足以说明标准逐渐成为开放资源授权的标准。
相关的三个
: 获取未授权的 服务地址;
: 获取用户授权的 服务地址;
: 用授权的 换取 的服务地址。
相关的参数定义
: 使用者的,服务的直接使用者是开发者开发出来的应用。所以该参数值的获取一般是要去服务提供商处注册一个应用,再获取该应用的。
:对应的密钥。
进行到最后一步得到的一个“令牌”,通过此“令牌”请求资源的网站就可以去拥有资源的网站抓取任意有权限可以被抓取的资源。
对应的私钥
: 请求串的签名方法,应用每次向三个服务地址发送请求时,必须对请求进行签名。签名的方法有:、与等三种。
: 用上面的签名方法对请求的签名。
: 发起请求的时间戳,其值是距 的秒数,必须是大于的整数。本次请求的时间戳必须大于或者等于上次的时间戳。
: 随机生成的字符串,用于防止请求的重放,防止外界的非法攻击。
: 的版本号。
认证授权流程
认证授权就三个步骤,三句话可以概括:
. 获取未授权的
. 获取用户授权的
. 用授权的 换取
当应用拿到 后,就可以有权访问用户授权的资源了。上面的三个步骤中,每个步骤分别请求一个,并且收到相关信息,并且拿到上步的相关信息去请求接下来的直到拿到 。
具体每步执行信息如下:
. 使用者(第三方应用)向服务提供商请求未授权的 。向 发起请求,请求需要带上参数。
. 服务提供商同意使用者的请求,并向其颁发未经用户授权的与对应的,并返回给使用者。
. 使用者向服务提供商请求用户授权的 。向 发起请求,请求带上上步拿到的未授权的与其密钥。
. 服务提供商将引导用户授权。该过程可能会提示用户,你想将哪些受保护的资源授权给该应用。此步可能会返回授权的 也可能不返回。如 就不会返回任何信息给使用者。
. 授权后,使用者将向 发起请求,将上步授权的 换取成 。
. 服务提供商同意使用者的请求,并向其颁发 与对应的密钥,并返回给使用者。
. 使用者以后就可以使用上步返回的 访问用户授权的资源。
从上面的步骤可以看出,用户始终没有将其用户名与密码等信息提供给使用者(第三方软件),从而更安全。用实现背景一节中的典型案例:当服务(打印服务)要访问用户的服务(图片服务)时,通过机制,服务向服务请求未经用户授权的 后,服务将引导用户在服务的网站上登录,并询问用户是否将图片服务授权给服务。用户同意后,服务就可以访问用户在服务上的图片服务。整个过程服务没有触及到用户在服务的帐号信息。
本软件使用新浪微博的 来辅助开发,这里面已经集成了一个开源的 认证包:: 。
第三方应用首先必须在新浪微博的开发者平台上注册成为开发者并且获得相应的 和 才可以引导用户注册。
新浪微博的开放平台网址:。
("");
()();
();
();
("", );
();
首先设置,””是一个系统定义的,类似于,一个协议后跟着一个路径,当授权成功后就打开注册这个的页面。
获取授权页面的后,通过一个传到一个新的。
在这个中,放置一个:
();
这样来打开授权页面,效果如图所示:
图 授权页面截图
授权成功后就会打开注册""这个的。
微博首页模块
首先在文件中为首页的下面这行代码:
<>
< "" >
< "" >
< "" >
< "" "" >
<>
这样,当用户授权成功后就会打开这个.
在这个中,主要是一个,在中的每一个条目中展示每一条微博。
首先将获得的和 存储到中,这样的话用户只需在初次使用时需要授权,以后就可以直接获取数据了:
();
()();
(("")) ();
(""()); (""());
();
这样就存储量用户的认证数据。
接下来我们获得用户关注的用户的微博,只需下面这两行代码:
()();
( (, ));
由于获取网络数据所消耗的时间较长,且手机的网络信号不稳定因素更多,所以我们将它放在独立的线程中来完成。当然可以用的线程来实现,但是为我们提供了更加简单和方便的方法,继承这个类并实现其中的方法,把你希望在独立线程中执行的代码放在这个方法中,然后在主线程中执行该类对象的方法就可以了。这里选择这中方法而不应自身提供的线程机制还有一个原因,就是系统规定,只能在主线程中执行对控件的操作,在其它线程中不行。但是在提供的这个类允许在其它线程中对控件进行操作。
在这个类中还有一个方法叫的方法,它是一个回调函数,会在执行完之后自动执行,但是是在主线程中执行,我们可以在这个方法中放置我们希望的语句。在这里我们会把获得的数据传给一个我们自己设置的。
在中,用列表控件来显示一组数据,比如显示存储在数组中的很多人名,再比如显示从数据库查询出来的结果列表。将显示和数据分开来处理,在这二者中起到桥梁作用的就是,示意图如下:
图 列表控件、、数据间的关系图
图的左边的是一个列表控件,他只是一个空间的集合,内部含有以下子控件,真正的内容是显示在这些子控件中的,其实列表控件的就是一个空间的集合。图的右边是数据的集合,可以是数组,数据库,或者是任何组织方式的数据。图的中间就是,它是列表控件和数据间的桥梁,其中他指向的那个就是将要放置在列表控件中的子控件,所以说,是决定了列表控件中显示的子控件的内容。
本身提供了一些基本的,继承结构如下:
图 系统内置继承层次图
其中的是一个抽象类,继承它需要实现较多的方法,所以也就具有较高的灵活性,我们的就是继承的这个类。
我们的需要把获得的数据作为构造函数的参数传入,然后来将其放入到相应的微博控件中。
在系统中,控件可以用代码来构造,也可以用文件来描述。后者就像是和,只能描绘静态的外观,事件监听等动态事件还是需要用代码来完成的。后者将逻辑与展示分开,加快了开发效率,所以我们这次开发采用的是用文件来描述。
我们先来定义子控件的样式,最终效果是这样的:
图 子控件效果图
这就是我们在主页模块中的每一个微博的样式,最外面它是一个水平方向的,右边又是一个数值方向的的,然后依次是用户姓名,微博发布的时间,微博内容,微博发布方式,转发和评论数量。
下面我们来详细描述一下我们自己定义的。
自己的继承自,需要实现其中四个方法:
1. ();
返回数据的大小,这里我们返回从新浪微博一次取回的数据大小,所以我们返回();
2. ( );
从数据集合中返回参数指定的数据,我们这里返回第个微博,所以我们的代码是这样的: ();
3. ( );
返回指定位置的数据的,我们这里返回的是新浪提供的微博,代码如下:
()();
4. ( , , );
这个方法很重要,它的功能是将相应的数据放到一个子控件中,然后返回子控件,供父控件(列表控件)使用。第一个参数指定出数据的位置,第二个参数是要传给父控件的子控件,第三个参数是父控件。因为在我们这个程序中这个是专门为某一个列表控件实例化的,所以这最后一个参数对我们没有作用。
首先,获得子控件:
();
(, );
然后找到需要展示的数据:
();
下一步是将数据放到相应的控件中,我们这里以微博正文为例,其他控件的展示和这个大致相同:
()();
((()));
像这样的,把所有数据都放入到相应的控件中后,我们就可以返回这个待演示的子控件了:
;
程序默认是在一个线程中执行,但是可以在需要的时候开辟新的线程。系统本身为线程间通信提供了这样一个非常好用的工具。
从新浪微博返回的微博数据中,所有的图片信息都是一个,所以我们需要自己根据从网络上下载,这又是一个耗时操作,所以这里我们用新线程来执行这个操作,获取图片后通过传回到主线程,在主线程中完成对的操作。
每一条微博最多会有两张图片,其中的用户头像一定会有,另外一个是微博配图,这个不一定都有,需要自行判断。如果某一条微博是转发微博,那么这个微博配图是出现在他转发的那条微博中的。
在某一条微博中,需要换一种颜色显示人名和话题。新浪微博规定:符号后面跟着的是某一个用户的名称,用一个空格或者是“:”来结束;用两个“”来确定一个话题。
微博中会有一些表情,由“[”和“]”括起来的,在现实时需要将其转化为相应的图片,比如[呵呵]这些代表表情的文本。
在文本中找到某些文本,我们自然而然地想到了正则表达式这个强大的文本处理工具,我们这个程序就用正则表达式来处理这个高亮显示和表情准换问题。
("\\[\\:]\\$\\");
();
第一行我们生成了一个模式,他有三个规则:第一个“\\[\\:]”匹配“”和“:”之间或“”和空格之间的用户名,第二个“\\$”匹配位于字符串最后的用户名,最后一个规则“\\”匹配两个“”号之间的话题名称。
();
构建一个, 这个就是我们要修饰的字符串,用原始的数据将其初始化。
然后依次便利源字符串的每一个匹配规则,都将匹配的子字符串的颜色改为蓝色:
(())
{
();
();
();
();
}
下面完成表情的替换。
首先我们从网上下载新浪的表情包,将其放在资源文件夹中,这样的话系统就会为每个表情图片生成一个资源,我们就可以在程序中引用了。然后,制作一个容器,键是一个字符串,是表情的名称,比如“[呵呵]”,值是一个整形变量,就是这个表情图片的。
然后我们用正则表达式匹配每一个表情,然后在这个中找到相应的表情图片,然后替换,代码如下:
("\\[\\\\]");
();
();
(())
{
();
();
()(());
( )
{ ()();
((), ());
(, );
();
}
}
在新浪微博返回的微博来源中,来源的形式是一个的产链接标签,<>来源<>,这里还是用正则表达式将其汉字内容提取出来,具体代码和前面使用正则表达式类似。
最后首页的效果图如图所示:
图 首页模块截图
我们传给的微博数量只有条,当用户浏览到最后一条时,我们希望可以获得更多的数据,我们这里用的来实现。
首先用文件来定义一个,他的内容是两个控件,一个是按钮,一个是,这两个控件不回同时出现,默认显示按钮,当用户点击时就加载新的数据,同时这个按钮隐藏,出现;当加载完成后,隐藏,按钮出现。
在文件中,通过这个属性:"" 来隐藏控件。
()(, );
获取在文件里定义的空间
() ();
() ();
() ();
找到相应的控件
();
给列表控件添加
( () {
( ) {
();
();
();
}
})给该控件添加事件监听器
在这个按钮中调用了的()方
展开阅读全文