新浪微博安卓客户端课程设计报告

合集下载

新浪微博Android开发V

新浪微博Android开发V
• 完成窗体刷新
IWeiboActivity
MainService
完成程序调度
接收UI层数据(任务),完成业务逻辑,返回信息,更 新UI
在后台运行(继承自Service类) 线程(实现Runnable接口)
不断侦听UI传过来任务消息
MainService启动
UI发出任务 newTask(Task t)
refresh()回调刷新Login UI,登录成功or失败
登录成功进入Main窗体
MainService处理登录任务
run方法,侦听任务 doTask(t) 处理任务
Message mess = handler.obtainMessage(); mess.what = task.getTaskId(); swtich(task.getTaskId()){.....}//根据不同的任务,调用微博接
实训项目
新浪微博 Android开发
新浪微博功能
新浪微博功能
分层实现
UI层
微博中的各个窗体
logic层
程序的核心控制调度模块,获取UI传递的数据、要 执行的任务,调用微博接口,获得网络数据,返回 消息,刷新(切换)UI
微博接口层(新浪API已封装) 网络访问层(新浪API已封装)
View view = LayoutInflater.from(conts).inflate( yout.list_moreitems, null);
TextView tv =(TextView)view.findViewById(R.id.textView); tv.setText("刷新");
• 可切换的5个Activity • 所在Activity高亮显示

新浪微博安卓客户端课程设计报告

新浪微博安卓客户端课程设计报告

移动互联网开发课程设计报告学生:谌敦斌学号:031241318 专业:数字媒体技术班级:0312413 设计题目:安卓新浪微博客户端设计学年学期:2014 年秋季学期指导教师:华目录(示例)一、设计题目 (1)二、设计目的 (1)三、设计原理及方案 (1)1使用的软件工具和环境 (1)2需求分析与概要设计 (1)3数据库设计(若有) (1)4详细设计和关键问题 (1)四、实现效果 (1)五、设计体会 (1)参考文献 (3)一、设计题目简易新浪微博客户端系统二、设计目的通过设计开发新浪微博客户端综合训练安卓系统开发能力,进一步提升对安卓程序开发及运行的理解和认识,学会团队协作,开发出界面与功能都有特色的安卓应用软件。

掌握并熟悉OAuth认证协议的工作原理,学会通过http的get或者post 方式传参数获取相应的服务器应答信息,能够利用新浪微博官方提供的一系列接口完成简易微博客户端的开发。

三、设计原理及方案1使用的软件工具和环境Eclipse jdk7.0 Android SDK以及新浪官方提供的WeiboSDK、WeiboSDKDemo和相应API2需求分析与概要设计众所周知,官方新浪微博客户端的功能非常完善,我们这次课程设计主要是模仿官版的微博。

具体的功能需求如下:1.我们的安卓客户端是在线运行的,也就是必须在有网络连接的情况下才能工作,如果没有联网将提醒用户打开网络连接。

2.为了安全起见,安卓客户端不建议直接使用用户名和密码进行登录,而是通过比较流行的OAuth认证授权后才能登录使用,所以授权功能是必须的。

并且在测试阶段,授权的用户必须经过开发者将其微博昵称添加到测试信息才能正常登录。

3.对于第一次授权成功的用户,我们需要把它的部分身份信息例如ID 、昵称、头像url 和token 验证等保存到数据库,方便下一次直接登录。

因此要设计一个简易的数据库功能。

4.对于已经授权的用户,如果第二次登录,就不需要授权,而是直接进入登陆界面。

新浪微博客户端的设计与实现

新浪微博客户端的设计与实现

新浪微博客户端的设计与实现沈阳航空航天大学2014年6月摘要作为市场占有率第一的新浪微博客户端拥有着广泛的需求。

目前一些新浪微博客户端相对比较完善,功能也比较齐全,但基于市场利益考虑,有着不同程度涉及广告的行为,而且界面设计的相对传统,引起很多用户不满。

因此,本课题就致力于开发出一款基于Android平台的满足用户使用需求的新浪微博客户端。

为了实现新浪微博客户端,需要申请开发者账号,并且下载新浪微博Android SDK。

新浪微博Android SDK为第三方微博应用提供了微博API调用服务,使第三方微博客户端无需了解复杂的验证和API调用过程,就可以实现分享文字或者多媒体信息到新浪微博。

本文阐述了新浪微博客户端的各种相关知识,同时将设计过程中所用到的主要方法及控件进行了详细说明。

本应用实现了发表微博、评论微博、转发微博、我的资料、我的关注、我的粉丝、收藏评论等功能,具有较强的实用性;将服务接入微博平台,有助于推广产品,增加应用的流量、拓展新用户,甚至获得收益。

关键词:Android平台;新浪微博Android SDK;微博API调用服务Sina Micro blogging Client Design and ImplementationAbstractAs the market share of the first Sina micro blogging client has a wide range of needs. At present, some Sina micro blogging client base is relatively sound, function relatively complete, but based on market interest, with varying degrees of behavior involved in advertising, and the interface is relatively conventional design, attracted a lot of user dissatisfaction. Thus, the subject is committed to develop a platform based on Android to meet user needs Sina micro blogging client.To achieve Sina micro blogging client, application developers need to account, and download Weibo Android SDK. Sina Weibo Android SDKthird-party applications to provide API calls micro blogging service, enabling third-party Twitter clients do not need to understand the complex process of verification and API calls, you can achieve shared text or multimedia message to Sina micro blogging.This paper describes a variety of related knowledge Sina micro blogging client, while the major methods and controls used in the design process is described in detail. This application implements published micro blogging comment micro blogging, micro blogging forwarded my information, my attention, my fans, collectors comments and other features, has a strong practicality. The micro blogging service accessplatform, helps to promote their products, increase traffic applications, develop new users, and even gain.Keywords: Android; Sina Weibo Android SDK; Micro blogging API services calls;目录1 绪论 11.1 课题背景 11.2 微博发展简介 11.3 Android简介 31.4 OAuth2.0概述 41.5 开发平台介绍 41.6 开发工具eclipse简介 41.7 开发语言和开发环境 51.8 课题目标、内容、意义 51.9 论文结构 52 系统分析 72.1 可行性分析 72.1.1 市场的可行性 72.1.2 经济的可行性 72.1.3 技术的可行性 72.1.4 运行的可行性 72.2 需求分析 82.2.1 对功能的规定 82.2.2 对性能的规定 102.2.3 对可维护性的规定 10 2.2.4 对个性的规定 102.3 系统规划概述 103 系统设计 123.1 系统总体框架 123.2 功能模块设计 134 详细设计与编码 144.1 授权功能模块 144.1.1 应用启动与授权 14 4.2 微博首页模块 154.3 用户信息模块 184.4 发送微博模块 184.4.1 基本功能 184.4.2 文本输入 194.4.3 选择图片上传 194.5 微博详情模块 204.5.1 评论微博 204.5.2 转发微博 214.6 微博评论模块 214.7 更多设置模块 225 系统测试 235.1 测试目标 235.2 测试流程和结果 235.2.1 授权登录 235.2.2 微博首页、个人信息等显示 24 5.2.3 微博详情页面显示 255.2.4 发送微博 255.2.5 更多设置 265.3 系统评价 27参考文献 28致谢 29绪论课题背景一个新的时代的诞生意味着新的理念的产生,而新的理念催生出新的潮流,新的潮流又会给现有的社会带来变革,创新是社会发展的强大动力,能为IT业带来新的活力。

基于Android系统的新浪微博客户端的设计与实现

基于Android系统的新浪微博客户端的设计与实现

基于Android系统的新浪微博客户端的设计与实现作者:王明超来源:《电脑知识与技术》2012年第33期摘要:该系统基于Android移动开发平台,使用Java语言开发,使系统具有良好的平台移植性和可扩展性。

新浪微博Android SDK为第三方微博应用提供了文档易用的微博API调用服务,使第三方微博客户端无需了解复杂的验证和API调用过程,就可以实现分享文字或者多媒体信息到新浪微博。

本系统包括四个模块:应用程序登录模块,主界面显示模块,微博浏览模块,用户模块。

在登录模块,用户可以使用授权配置和用户注册并且登录系统。

关键词:新浪微博开放平台;授权配置;微博API调用服务中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2012)33-7933-03每一个时代都会催生新的理念,每一个理念又会引领新的潮流,每一个潮流又注定会冲破原有的桎梏,创新是时代的特征,更是IT业的标志。

摩尔定律的持续实现使整个IT业的发展和更新令人手忙脚乱,而作为终端设备中数量级最大的手机,近年更是近乎脱胎换骨,在颠覆传统手机概念的同时,不断挖掘着自身的市场价值,也成为众多厂商利益角逐的角斗场[1]。

IOS在乔布斯的精心策划下一路高歌猛进,Android则凭着开源的方式开山劈路,Symbian和Black berry的旧有模式被不断蚕食,Windows Phone则在滞后的泥潭中继续挣扎。

手机终端多样化应用的不断出现,使其在近乎实现PC端功能的同时,也影响着PC的发展。

互联网领域,以Facebook为代表的SNS的突起更是激起新一轮的网络风波,而在国内,冲破众堵的新浪在其准确的定位和成功的推广策略下推出的新浪微博更是占据了先导地位,并逐渐进入大众生活,成为许多人的生活必需品。

近年来,新浪微博的邀请重点由明星、名人转向媒体工作者甚至政府工作者,为时事的发布和民政工作提供了更为多样、便捷的方式[2]。

于是,新浪微博手机客户端便应运而生,而作为市场占有率第一的Android平台下的新浪微博客户端更是拥有广泛的需求。

新浪微博for Android界面技术方案设计

新浪微博for Android界面技术方案设计

新浪微博Android界面技术方案设计新浪微博Android界面设计方案,需要进行以下的分析和总结。

1、明确建立网站的目标和用户需求;2、确定总体设计方案主题;3、功能、框架确定及可用性分析(需要与软件开发人员共同探讨)4、原型设计,即初步板式确定及色彩使用分析;5、界面设计,即在相关软件上实现界面;6、修改并交予重构。

一、产品定位与市场分析阶段1、目的:了解新浪微博移动客户端(基于Android系统)针对的市场、客户群体、运行方式、盈利方式等,以确定相应的产品开发方向。

2、产品定位:新浪微博是一款为大众提供娱乐休闲生活服务的信息分享和交流平台。

娱乐——涵盖最全面的娱乐明星与资讯;生活——反映网民现实生活的点点滴滴;快乐——分享发现人们身边的趣闻轶事3、市场分析:截至2010年10月底,新浪微博用户数已达5000万,目前是中国用户数最多的微博产品,公众名人用户众多是新浪微博的一大特色,目前基本已经覆盖大部分知名文体明星、企业高管、媒体人士。

根据2010年官方公布数据显示,新浪微博每天发博数超过2500万条,其中有38%来自于移动终端。

每天发布微博数量超过两千五百万条,微博总数累计超过20亿条。

是目前国内最有影响力、最受瞩目的微博运营商。

移动客户端发展前景巨大移动客户端的优点在于其实时性,实地性,故可以将新浪微博移动客户端定位为新闻发布平台,信息交互平台,娱乐休闲平台,生活展示平台,快乐分析平台。

故在设计界面时,Android是目前主流的智能手机操作系统,那么智能手机在各个方面的应用当然也要体现出其系统优势出来,即给用户更好的交互体验及功能享受。

界面的展现会主要以微博为主,实现查看、发表、评论、分享等功能,结合Android良好的触控体验,二、用户需求分析1、目的:收集相关资料分析目标用户的使用特征、情感、习惯、心理、需求等,提出用户研究报告和可用性设计建议。

这部分工作有团队配合完成。

时间与项目需求允许的情况下,更可以制定实景用户分析。

新浪微博系统设计与开发名师教案与资料

新浪微博系统设计与开发名师教案与资料

目录第一章系统概述 (1)1.1 实训开发的背景、内容以及目的 (1)1.1.1 实训开发背景 (1)1.1.2 实训开发内容 (1)1.1.3 实训开发目的 (1)1.2 项目开发环境 (2)1.3 软件开发工具的介绍 (2)1.3.1 MY ECLIPSE (2)1.3.2 HTML (3)1.3.3 MY SQL (3)第二章需求分析 (4)2.1 系统分析的任务与步骤 (4)2.1.2 系统分析的任务 (4)2.1.2 系统分析的步骤 (4)2.2 微博网站功能分析 (4)2.3 功能需求分析 (5)2.3.1 基本功能要求 (5)2.3.2 用户分析 (5)2.3.3 系统用例图 (6)2.3.4 系统的数据流图 (8)第三章总体设计 (10)3.1 功能模块图 (10)3.1.1 系统总体功能图 (10)3.1.2 系统功能模块描述 (11)3.2 数据库设计 (12)3.2.1 概念结构设计 (12)3.2.2 物理结构设计 (13)第四章详细设计 (17)4.1 系统流程图 (17)4.1.1 前台管理流程图 (17)4.1.2 后台管理流程图 (18)4.1.3 登录模块 (18)4.1.4 系统管理模块 (19)第五章系统实现 (21)5.1 用户模块 (21)5.1.1 用户模块功能实现描述 (21)5.1.2 用户功能实现界面 (21)5.2 管理员模块 (23)5.2.1管理员模块实现描述 (23)5.2.2管理员功能实现界面 (23)5.3 遇到的问题和解决 (25)第六章系统测试 (26)6.1 测试目的 (26)6.2 测试方法 (26)6.3 测试要点 (26)6.3.1 功能测试 (26)6.3.2 安全性测试 (27)6.3.3 测试项目 (27)6.4 测试用例 (27)6.5 测试总结 (28)第七章总结 (29)参考文献 (30)附录程序代码 (31)第一章系统概述1.1实训开发的背景、内容以及目的1.1.1实训开发背景微博即微博客(microblog)的简称,由博客(blog)发展而来,最早也是目前最大的微博是美国的Twitter,中国最早开始微博业务的是门户网站新浪网。

安卓开发课程设计报告

安卓开发课程设计报告

安卓开发课程设计报告一、课程目标知识目标:1. 学生理解安卓应用开发的基本概念和原理,掌握安卓开发环境搭建方法。

2. 学生掌握安卓应用的基本组件,如Activity、Service、BroadcastReceiver 等,并了解其生命周期。

3. 学生学会使用安卓布局和控件,能够设计美观、易用的用户界面。

4. 学生掌握安卓事件处理机制,能够实现应用内的交互功能。

5. 学生了解安卓存储和数据持久化的方法,能够实现数据的保存和读取。

技能目标:1. 学生能够独立搭建安卓开发环境,并熟练使用相关工具进行开发。

2. 学生具备编写、调试和优化安卓应用的能力,能够解决实际开发过程中遇到的问题。

3. 学生能够运用所学知识,设计并实现具有实际意义的小型安卓应用。

4. 学生学会查阅安卓开发相关资料,具备自我学习和持续提升的能力。

情感态度价值观目标:1. 学生培养对计算机科学的兴趣,激发创新意识和探索精神。

2. 学生养成合作学习和解决问题的习惯,提高团队协作能力。

3. 学生认识到编程对于培养逻辑思维和抽象思维能力的重要性,增强自信心。

4. 学生了解安卓应用在实际生活中的应用,认识到科技对生活的改变,培养社会责任感。

本课程旨在通过安卓开发教学,使学生在掌握基本知识、技能的基础上,培养实际开发能力,激发创新意识,提高团队协作能力,为未来进一步学习计算机科学和从事相关领域工作打下坚实基础。

二、教学内容1. 安卓开发基础- 环境搭建:讲解并实践安装Java开发工具、Android Studio和模拟器。

- 应用结构:介绍Android应用的基本目录结构,理解AndroidManifest.xml 文件的作用。

2. 安卓应用组件- Activity:学习Activity的生命周期,掌握状态保存和恢复。

- Service:了解Service的基本用法,实现后台服务。

- BroadcastReceiver:学习广播接收者的使用,实现应用间的消息传递。

android微博课程设计

android微博课程设计

android微博课程设计一、课程目标知识目标:1. 理解Android平台微博应用的基本功能与界面设计原理;2. 掌握微博应用中数据传递、处理和展示的技术要点;3. 学习运用Android开发工具进行微博应用的基本功能开发。

技能目标:1. 能够运用所学知识独立设计并实现微博应用的界面布局;2. 能够编写代码实现微博应用的登录、发微博、查看微博等功能;3. 能够对微博应用进行调试和优化,解决常见问题。

情感态度价值观目标:1. 培养学生对移动应用开发的兴趣,激发创新意识和探索精神;2. 培养学生团队协作意识,学会与他人共同解决问题;3. 引导学生关注网络社交现象,培养积极健康的网络素养。

课程性质:本课程为实践性较强的课程,以项目为导向,结合课本知识,使学生能够掌握Android平台微博应用的开发技能。

学生特点:学生具备一定的编程基础,对Android开发有一定了解,对微博应用有较高的兴趣。

教学要求:教师需采用案例教学、任务驱动等方法,引导学生主动探索,注重实践操作,提高学生的动手能力。

同时,关注学生的个体差异,给予个性化指导,确保课程目标的实现。

在教学过程中,将目标分解为具体的学习成果,便于后续教学设计和评估。

二、教学内容1. 微博应用概述:介绍微博应用的基本功能、界面设计及用户交互方式,关联课本第一章内容,帮助学生建立整体认识。

- 界面设计原理与布局:分析微博应用界面布局,学习Android常用布局方法,如LinearLayout、RelativeLayout等,结合课本第二章内容。

- 用户登录功能实现:讲解微博应用登录功能的技术要点,学习使用SharedPreferences、Intent等,关联课本第三章内容。

2. 微博功能实现:- 发送微博:学习使用EditText、Button等控件,结合课本第四章内容,实现发送微博功能。

- 查看微博:学习使用ListView、BaseAdapter等,展示微博列表,关联课本第五章内容。

基于Android系统的新浪微博客户端的设计与实现

基于Android系统的新浪微博客户端的设计与实现

独创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。

除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。

对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。

本人完全意识到本声明的法律后果由本人承担。

论文题目:作者签名:日期:年月日论文版权使用授权书本人完全了解吉首大学有关保留、使用学位论文的规定,即:学校有权保留送交论文的复印件和磁盘,允许论文被查阅和借阅,可以采用影印、缩印或扫描等复制手段保存、汇编学位论文。

同意吉首大学可以用不同方式在不同媒体上发表、传播学位论文的全部或部分内容。

(保密的学位论文在解密后应遵守此协议)论文题目:学生签名:日期:年月日导师签名:日期:年月日基于Android系统的新浪微博客户端的设计与实现摘要本系统基于Android移动开发平台,使用Java语言开发,使系统具有良好的平台移植性和可扩展性。

新浪微博Android SDK为第三方微博应用提供了文档易用的微博API调用服务,使第三方微博客户端无需了解复杂的验证和API调用过程,就可以实现分享文字或者多媒体信息到新浪微博。

本系统包括四个模块:应用程序登录模块,主界面显示模块,微博浏览模块,用户模块。

在登录模块,用户可以使用授权配置和用户注册并且登录系统。

主界面显示模块中,用户可以发表新的微博和通过昵称搜索好友。

微博浏览模块,进入浏览微博的详细页面,用户可以评论微博和转发微博。

用户模块,可查看该用户的详细信息包括该用户的关注列表,话题列表,粉丝列表,和该用户所发表过的全部微博。

关键词:新浪微博开放平台;授权配置;微博API调用服务.Sina Micro-Blog Client Design and Implementation Based onAndroid SystemAbstractThis system based on Android mobile development platform, use Java language development and the system which has a good platform portability and expansibility. The Sina micro-blog Android SDK third-party micro-blog application provides document easy to use micro-blog API call service, so that the third-party micro-blog client without understanding the complex validation and API calls procedure, may realize to share text or multimedia message to Sina micro-blog.This system includes four modules: application login module, the interface display module, the blog browsing module, the user module. In login module, the user can use authorized configuration and user registered and logged in system. In interface display module, users can post new micro blog and through the nickname to search good friends. In blog browsing module, users can comment on the blog and forwarding the blog into the detailed page. In user module, can view the detailed information including the users' attention list, topics list, fan list, and all the blogs he has posted .Keywords:Sina Micro-Blog Open Platform; Authorized Configuration; Micro-Blog API Calls Service.目录第一章绪论 (1)1.1课题背景 (1)1.2微博简介 (1)1.3 Android简介 (2)1.4研究目标 (2)1.5研究内容、意义 (3)第二章系统分析 (4)2.1系统可行性分析 (4)2.2系统需求分析 (4)2.3系统规划概述 (5)2.4基于Android新浪微博客户端的建设原则 (6)2.5系统开发环境及相关技术 (6)第三章系统概要设计 (7)3.1系统设计目标 (7)3.2系统模块设计 (7)3.2.1系统功能模块划分 (7)3.2.2系统总体结构设计 (7)3.2.3系统模块用例图分析 (9)第四章数据库设计与实现 (18)4.1数据库概念结构设计 (18)4.1.1实体图 (18)4.1.2系统实体联系 (20)4.2系统数据库物理建模 (20)第五章系统详细功能实现 (23)5.1登录模块实现 (23)5.1.1用户授权配置模块 (23)5.1.2用户登录模块 (24)5.2主界面显示模块实现 (25)5.2.1显示最新微博列表 (25)5.2.3发表微博功能 (27)5.3微博信息浏览模块实现 (27)5.4获取用户信息模块实现 (29)5.4.1查看关注功能 (30)5.4.2查看用户所有微博信息功能 (30)第六章系统的测试与维护 (32)6.1单元测试 (32)6.2集成测试 (33)总结 (34)参考文献 (36)致谢 (37)第一章绪论1.1课题背景每一个时代都会催生新的理念,每一个理念又会引领新的潮流,每一个潮流又注定会冲破原有的桎梏,创新是时代的特征,更是IT业的标志。

sina微博实训文档

sina微博实训文档

JavaEE课程设计报告书班级:软件092学号:200900834229姓名:李星运目录1.概述........................................................................................................ - 1 -2.名词解释 ................................................................................................. - 1 -2.1.OAuth:......................................................................................... - 1 -2.2.OAuth认证参数:........................................................................... - 1 -3.功能概述 ................................................................................................. - 2 -3.1.微博的认证和登录........................................................................... - 2 -3.2.微博的查看和刷新........................................................................... - 3 -3.3.发送微博信息 ................................................................................. - 5 -4.设计目的 ............................................................................................... - 11 -5.总体设计:............................................................................................ - 11 -6.详细设计:............................................................................................ - 12 -6.1.OAuth认证................................................................................... - 12 -6.2.获取RequestToken和AccessToken ................................................ - 15 -6.3.查看微博...................................................................................... - 16 -6.4.解析Json格式数据 ....................................................................... - 18 -6.5.发送微博...................................................................................... - 22 -6.6.转发和评论微博 ............................................................................ - 25 -7.结束语................................................................................................... - 27 -1.概述微博作为最新互联网社交网络的代表之一,在随着移动客户端的兴起已成为一种生活,快捷及时的交流和共享方式打破了原来的社交模式。

《手把手教你用Android开发新浪微博客户端》-------水的右边(安卓巴士整理)

《手把手教你用Android开发新浪微博客户端》-------水的右边(安卓巴士整理)

来自 安卓巴士 士(www.ap )整 整理总结 本文档来
第二 二、andro oid 开发我 我的新浪微 微博客户端 端‐载入页 页面 UI 篇(1.1)
本篇说 说说关于 OAuth 授权认证的事情, 新浪 浪开放 api 都必 必须在这个基 基础上才能调 调用, 所以 以有必要专门 门来讲讲, 前面 面的文章中已 已经提到过关 关于新浪微博 博提供了 OAu uth 和 Base OAuth O 两种 种认证方式,并且本项目采用 OAuth 认证方式,至于为什么采 采用这个 OA Auth 认证而不 不采 用 Base B OAuth 认证原因很简 认 简单,自从 Tw witter 只支持 持 OAuth 认证 证方式以来,各大应用都 都纷纷 转向 向 OAuth 认证 证方式,而新 新浪微博的开 开放平台也将在近日停止 Base OAuth 的认证方式。 。 OAuth 的基本概念,OAUTH 协议为用户资源 协 源的授权提供 供了一个安全 全的、开放而 而又 简易 易的标准。与 与以往的授权 权方式不同之处是 OAUTH 的授权不会 会使第三方触 触及到用户的帐号 信息 息(如用户名 名与密码) ,即 即第三方无需 需使用用户的 的用户名与密 密码就可以申请获得该用户资 源的 的授权,因此 此 OAUTH 是安 安全的。同样 样新浪微博提 提供 OAuth 认证也是为了 认 了保证用户账号和 密码 码的安全,在 在这里通过 OAuth 建立普 普通新浪微博用户、客户端 端程序(我们 们正在开发的 的这 个 android 客户端 端程序) 、新 新浪微博三者 者之间的相互信任关系,让 让客户端程序 序(我们正在 在开 的这个 androi id 客户端程序 序)不需要知 知道用户的账 账号和密码也 也能浏览、发 发布微博,这 这样有 发的 效的 的保护了用户 户账号的安全 全性不需要把账号密码透露 露给客户端程 程序又达到了 了通过客户端 端程 序写 写微博看微博 博目的。这个 个是 OAuth 的作用。 的

手机微博项目设计

手机微博项目设计

项目设计报告题目:安卓手机微博目录1 概述 (3)1.1 目的 (3)1.2 背景 (3)1.3 范围 (4)1.4 术语定义 (4)1.5 参考资料 (5)1.6 任务概述 (5)1.6.1 目标 (6)1.6.2 用户的特点 (6)1.6.3 假定和约束 (7)1.7 运行环境 (7)1.7.1 软件环境 (7)1.7.2 硬件环境 (8)1.7.3 接口 (9)1.7.4 控制 (9)1.8 需求规定 (9)1.8.1 对功能的规定 (9)2 手机微博业务分析 (3)2.1 手机微博业务功能概述 (22)2.1.1 手机微博业务功能概述 (23)2.1.2 用户注册......................... 错误!未定义书签。

2.1.3 用户登录 (28)2.1.4 用户管理 (28)2.1.5 相册管理......................... 错误!未定义书签。

2.1.6 好友管理 (28)2.1.7 日志管理 (28)2.1.8 最近访客......................... 错误!未定义书签。

2.1.9 用例分析 (28)3 数据库设计 (22)3.1 系统物理结构设计 (22)3.2 表设计 (23)3.2.1 TableName(表名的解释) ............ 错误!未定义书签。

3.3 表之间的关联设计 (28)3.4 存储过程设计 (28)总结1概述1.1目的在微博的制作过程中为了满足客户的需求,为了向客户展示微博要做哪些功能,以及微薄的界面,人员分工和一些资金的使用等等特写此文档。

1.2背景当今社会是个高科技、高效率、高度竞争的社会。

随着物质水平的逐步提高,我们的的精神生活也开始趋向丰富多彩。

随着3G手机推入市场,一种新的网络应用形式————“微博”也应运而生。

“微博”以其便捷性,背对脸式的交互方式以及原创性得到了广大网民的宠爱,成为了网络时代新的代名词。

本科毕业设计---新浪微博android客户端的实现

本科毕业设计---新浪微博android客户端的实现

编号:〔 〕字 号本科生毕业设计〔论文〕题目:姓名: 学号: 班级:二〇一二年六月微博客户端的设计开发计08-3班中国矿业大学本科生毕业设计姓名:学号:学院:计算机科学与技术专业:计算机科学与技术设计题目:微博客户端的设计开发专题:指导教师:徐慧职称:讲师2021 年6月徐州中国矿业大学毕业设计任务书学院计算机科学与技术专业年级计08级学生姓名任务下达日期:2021年1月10日毕业设计日期:2021 年1月4日至2021年6月10日毕业设计题目:微博客户端的设计开发毕业设计专题题目:毕业设计主要内容和要求:毕业设计的软件内容及要求:1.用户界面美观实用,便于各功能页面导航。

2.系统各功能模块要明确划分。

论文的内容及要求:1.论文对系统设计的思想进行详细描述,介绍整个软件开发过程。

2.进行系统需求分析,概要设计,详细设计,性能测试。

3.说明开发过程中遇到的问题极其解决方法。

4.最后写出软件开发的体会及收获。

5.严格按照软件工程要求的格式编写文档。

院长签字:指导教师签字:指导教师评语〔①根底理论及根本技能的掌握;②独立解决实际问题的能力;③研究内容的理论依据和技术方法;④取得的主要成果及创新点;⑤工作态度及工作量;⑥总体评价及建议成绩;⑦存在问题;⑧是否同意辩论等〕:成绩:指导教师签字:年月日指导教师评语〔①根底理论及根本技能的掌握;②独立解决实际问题的能力;③研究内容的理论依据和技术方法;④取得的主要成果及创新点;⑤工作态度及工作量;⑥总体评价及建议成绩;⑦存在问题;⑧是否同意辩论等〕:成绩:指导教师签字:年月日中国矿业大学毕业设计辩论及综合成绩摘要微博即MicroBlog,网上昵称围脖,是一种非正式的迷你型博客,是一个基于用户关系的信息分享、传播及获取平台。

用户可以通过WEB、WAP以及各种客户端组件个人社区,以140字左右的文字更新信息,并实现即时分享。

它是一种互动及传播性极快的工具,传播速度甚至比媒体还快。

交互设计实习报告

交互设计实习报告

交互设计实习报告第一篇:交互设计实习报告实习报告:一、实习说明(1)实习时间:2010年10月20日至2011年1月5日(2)实习内容:关于手机微波客户端的交互分析(3)实习性质:毕业实习二、实习内容介绍微博,即微博客(MicroBlog)的简称,是一个基于用户关系的信息分享、传播以及获取平台,用户可以通过WEB、WAP以及各种客户端组件个人社区,以140字左右的文字更新信息,并实现即时分享。

最早也是最著名的微博是美国的twitter,根据相关公开数据,截至2010年1月份,该产品在全球已经拥有7500万注册用户。

2009年8月份中国最大的门户网站新浪网推出“新浪微博”内测版,成为门户网站中第一家提供微博服务的网站,微博正式进入中文上网主流人群视野。

在微博是一种互动及传播性极快的工具,传播速度甚至比媒体还要快。

微博所谓“微型博客(micro-bloging)”是一种非正式的迷你型博客,它是最近新兴起的一个web2.0表现,是一种可以即时发布消息的类似博客的系统。

它最大的特点就是集成化和开放化,你可以通过你的手机、IM软件(gtalk、MSN、QQ、skype)和外部API接口等途径向你的微博客发布消息。

微博客的另一个特点还在于这个“微”字,一般发布的消息只能是只言片语,像Twitter这样的微博客平台,每次只能发送140个字符。

相对于强调版面布置的博客来说,微博的内容组成只是由简单的只言片语组成,从这个角度来说,对用户的技术要求门槛很低,而且在语言的编排组织上,没有博客那么高,只需要反映自己的心情,不需要长篇大论,更新起来也方便,和博客比起来,字数也有所限制;微博开通的多种API使得大量的用户可以通过手机、网络等方式来即时更新自己的个人信息。

言两语,现场记录,发发感慨,晒晒心情,Twitter网站打通了移动通信网与互联网的界限。

相比传统博客中的长篇大论,微博的字数限制恰恰使用户更易于成为一个多产的博客发布者,著名流量统计网站ALEXA的数据显示,Twitter日均访问量已近2000万人次,在美国、英国、加拿大等地的网站排名中均列前15位。

微博系统概要设计

微博系统概要设计

查询留言
用户输入要查询用户的用户 编码,如果管理员没有输入 任何字符就点击了查询或者 数据库中没有与之相匹配的 结果则显示相应的提示信息, 数据库中如果有与管理员输 入的用户编码相对应的用户 信息,则显示这条用户信息。
结构
此系统的主要模块有六个, 分别是:登录模块我的微 博模块、个人中心模块、 最新动态模块、留言板模 块和帮助中心模块。在我 的微博模块中有查看我的 微博和查看我的好友功能, 还有更多设置功能;在个 人中心模块中具体分为完 善资料功能和对密码的操 作;在最新动态模块中可 以发表微博和查看历史微 博内容;在留言板模块中 可以发表留言和查看历史 留言信息等;而帮助模块 中主要是对一些常见问题 进行解答。
个人中心模块功能分析
在个人中心模块中可以对关注、收藏、好友进行管理,还可以完 善用户的基本信息和密码修改等操作
最新动态模块
用户可以在最新动态模块查看好友机关注的人发表 的最新的微博
留言板模块功能分析
用户可以在留言板模块中发表留言信息,还可以查看历史留言信息并对 其进行操作
帮助中心模块功能分析
注册
首先用户会进入到登录页面, 但是没有账号所以可以点击注 册按钮,此时浏览器会跳转到 注册页面,用户可以填写自己 的信息,后台会从页面获取到 用户所填写的信息进行验证是 否合法,如果不正确就需要用 户重新填写不合法的信息,如 果正确就可以注册,注册成功 就会显示成功信息,注册失败 也会提示相应的错误信息。
基本设计概念和处理流程
登陆
微博系统的登录功能的设计采用用户 的编号和密码及验证码三条信息对用户的 合法性进行验证,要登录的用户需输入编 号密码和验证码,单击“登录”按钮进行 登录,如果验证码正确,这时后台会从登 录页面中读取到用户填写的编号和密码与 数据库中的数据进行比较,只有用户编号 存在并且对应的密码正确才会登录成功跳 转到主页面,否则则会显示相应的错误信 息如“用户不存在”或“密码错误”等。

课程设计报告andriod

课程设计报告andriod

课程设计报告andriod一、教学目标本课程旨在让学生掌握Android应用开发的基本知识和技能,包括Android平台架构、Activity生命周期、Intent、布局文件、控件使用、事件处理等。

通过本课程的学习,学生能够独立开发简单的Android应用,培养他们对移动应用开发的兴趣和创新能力。

具体来说,知识目标包括:1.理解Android平台的基本架构和组件。

2.掌握Activity的生命周期和启动方式。

3.熟悉Intent的使用,了解不同类型的Intent。

4.了解Android的布局文件和控件属性。

5.掌握事件处理的基本方法。

技能目标包括:1.能够使用Android Studio创建和管理Android项目。

2.能够编写简单的Activity代码,实现用户界面与逻辑处理。

3.能够使用Intent在不同Activity之间传递数据。

4.能够使用基本的布局文件和控件开发用户界面。

5.能够处理用户触摸、点击等事件。

情感态度价值观目标包括:1.培养学生对移动应用开发的兴趣,激发创新精神。

2.培养学生团队合作意识,提高沟通与协作能力。

3.培养学生良好的编程习惯,提高代码质量。

二、教学内容本课程的教学内容主要包括以下几个部分:1.Android平台架构:介绍Android系统的基本架构,包括操作系统、应用框架、运行时和硬件抽象层。

2.Activity生命周期:讲解Activity的创建、运行、暂停、停止和恢复等状态,以及如何管理Activity栈。

3.Intent:介绍Intent的概念和使用方法,包括显式Intent和隐式Intent,以及如何使用Intent进行页面跳转和数据传递。

4.布局文件和控件使用:讲解Android的布局文件结构,介绍常用的控件及其属性,如何编写自定义控件。

5.事件处理:讲解用户触摸、点击等事件的处理方法,包括监听器和事件过滤器。

三、教学方法本课程采用讲授法、案例分析法和实验法相结合的教学方法。

Android课程设计报告模板

Android课程设计报告模板

移动互联网开发课程设计报告学生姓名:万思学号:k081241139 专业:计算机科学与技术班级:k0312415 设计题目:口袋微博学年学期:2014 年秋季学期指导教师:张华目录(示例)一、设计题目 (1)二、设计目的 (1)三、设计原理及方案 (1)1使用的软件工具和环境 (1)2需求分析与概要设计 (1)3数据库设计(若有) (2)4详细设计和关键问题 (3)四、实现效果 (8)五、设计体会 (69)参考文献 (71)一、设计题目Android社交分享平台——口袋微博设计目的二、设计原理及方案首先要实现以下这些功能:Android端登录和注册模块的实现Android端个人中心模块的实现Android端快速发布模块的实现Android端查看联系人模块的实现Android端管理日志模块的实现Android端管理相册模块的实现1使用的软件工具和环境1)PC计算机2)JDK安装包3)Eclipse安装包4)Android SDK安装包5)ADT插件2需求分析与概要设计(详细描述系统的功能需求)Android端登录和注册模块的实现Android端个人中心模块的实现Android端快速发布模块的实现Android端查看联系人模块的实现Android端管理日志模块的实现Android端管理相册模块的实现(详细描述系统结构;例如总体架构设计、流程图、用例图等,并分别描述)说明:这里的用例图和类图的对应关系可以在下面的E-R图上找到,这里我就略了一下。

Android端总体架Web端的原理示意图数据库设计(若有的必须给出,没有的给出其他重要设计过程)(给出ER关系图及数据库表)用powerdesigner设计对应关系,并生成表,E-R图3详细设计和关键问题(分功能模块描述设计细节,例如详细功能图、类图和关键流程图等。

遇到的关键Android 问题是如何解决的)相册列表:功能图查看修改权限二、快速发布:三、实现效果(包括系统描述和程序运行界面的截图)1.口袋微博用户登录界面2.口袋微博个人中心——快速发布功能界面3.口袋微博个人中心——我的好友功能界面4.口袋微博个人中心——最近访客功能界面5.口袋微博个人中心——日志列表功能界面6.口袋微博个人中心——相册列表功能界面7.口袋微博——搜索好友界面以下是部分重要代码由于代码太多无法容纳(1)LoginActivity.java登录界面package wyf.wpf;import static wyf.wpf.ConstantUtil.SERVER_ADDRESS; import static wyf.wpf.ConstantUtil.SERVER_PORT; import android.app.Activity;import android.app.ProgressDialog;import android.content.Intent;import android.content.SharedPreferences;import android.os.Bundle;import android.os.Looper;import android.view.View;import android.widget.Button;import android.widget.CheckBox;import android.widget.EditText;import android.widget.ImageButton;import android.widget.Toast;public class LoginActivity extends Activity {MyConnector mc = null;ProgressDialog pd;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.login);checkIfRemember();Button btnLogin = (Button)findViewById(R.id.btnLogin);btnLogin.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {pd = ProgressDialog.show(LoginActivity.this, "请稍候", "正在连接服务器...", true, true);login();}});Button btnReg = (Button)findViewById(R.id.btnReg);btnReg.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(LoginActivity.this, wyf.wpf.RegActivity.class);startActivity(intent);finish();}});ImageButton ibExit = (ImageButton)findViewById(R.id.ibExit);ibExit.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {android.os.Process.killProcess(android.os.Process.myPid()); //结束进程,退出程序}});}//方法:连接服务器进行登录public void login(){new Thread(){public void run(){Looper.prepare();try{if(mc == null){mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);}EditText etUid = (EditText)findViewById(R.id.etUid); //获得帐号EditTextEditText etPwd = (EditText)findViewById(R.id.etPwd); //获得密码EditTextString uid = etUid.getEditableText().toString().trim(); //获得输入的帐号String pwd = etPwd.getEditableText().toString().trim(); //获得输入的密码if(uid.equals("") || pwd.equals("")){ //判断输入是否为空Toast.makeText(LoginActivity.this, "请输入帐号或密码!", Toast.LENGTH_SHORT).show();//输出提示消息return;}String msg = "<#LOGIN#>"+uid+"|"+pwd; //组织要返回的字符串mc.dout.writeUTF(msg); //发出消息String receivedMsg = mc.din.readUTF(); //读取服务器发来的消息pd.dismiss();if(receivedMsg.startsWith("<#LOGIN_SUCCESS#>")){ //收到的消息为登录成功消息receivedMsg = receivedMsg.substring(17);String [] sa = receivedMsg.split("\\|");CheckBox cb = (CheckBox)findViewById(R.id.cbRemember); //获得CheckBox 对象if(cb.isChecked()){rememberMe(uid,pwd);}//转到功能面板Intent intent = new Intent(LoginActivity.this,FunctionTabActivity.class);intent.putExtra("uno", sa[0]);startActivity(intent); //启动功能Activityfinish();}else if(msg.startsWith("<#LOGIN_FAIL#>")){ //收到的消息为登录失败Toast.makeText(LoginActivity.this, msg.substring(14), Toast.LENGTH_LONG).show();Looper.loop();Looper.myLooper().quit();}}catch(Exception e){e.printStackTrace();}}}.start();}//方法:将用户的id和密码存入Preferencespublic void rememberMe(String uid,String pwd){SharedPreferences sp = getPreferences(MODE_PRIV ATE); //获得PreferencesSharedPreferences.Editor editor = sp.edit(); //获得Editoreditor.putString("uid", uid); //将用户名存入Preferenceseditor.putString("pwd", pwd); //将密码存入Preferencesmit();}//方法:从Preferences中读取用户名和密码public void checkIfRemember(){SharedPreferences sp = getPreferences(MODE_PRIVA TE); //获得PreferencesString uid = sp.getString("uid", null);String pwd = sp.getString("pwd", null);if(uid != null && pwd!= null){EditText etUid = (EditText)findViewById(R.id.etUid);EditText etPwd = (EditText)findViewById(R.id.etPwd);CheckBox cbRemember = (CheckBox)findViewById(R.id.cbRemember);etUid.setText(uid);etPwd.setText(pwd);cbRemember.setChecked(true);}}@Overrideprotected void onDestroy() {if(mc != null){mc.sayBye();}super.onDestroy();}}(2)DirayActivity.javapackage wyf.wpf;import static wyf.wpf.ConstantUtil.SERVER_ADDRESS; import static wyf.wpf.ConstantUtil.SERVER_PORT;import java.util.ArrayList;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.Gravity;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.BaseAdapter;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.TextView;import android.widget.AdapterView.OnItemClickListener;public class DiaryActivity extends Activity{ArrayList<String []> diaryList = new ArrayList<String []>();MyConnector mc = null;String uno = null;String visitor = null;BaseAdapter ba = new BaseAdapter() {@Overridepublic View getView(int position, View convertView, ViewGroup parent) {LinearLayout ll = new LinearLayout(DiaryActivity.this);TextView tvTitle = new TextView(DiaryActivity.this);ll.setOrientation(LinearLayout.VERTICAL);tvTitle.setTextAppearance(DiaryActivity.this, R.style.title);tvTitle.setGravity(Gravity.LEFT); //设置TextView的对齐方式tvTitle.setText(diaryList.get(position)[1]);TextView tvContent = new TextView(DiaryActivity.this);tvContent.setTextAppearance(DiaryActivity.this, R.style.content); //设置字体大小tvContent.setGravity(Gravity.LEFT); //设置TextView的对齐方式tvContent.setText(diaryList.get(position)[2]); //设置显示的内容ll.addView(tvTitle);ll.addView(tvContent);return ll;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic Object getItem(int arg0) {return null;}@Overridepublic int getCount() {return diaryList.size();}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Intent intent = getIntent();uno = intent.getStringExtra("uno"); //获得主人IDvisitor = intent.getStringExtra("visitor"); //获得访客IDgetDiaryList();setContentView(yout.diary);ListView lvDiary = (ListView)findViewById(R.id.lvDiary); //获得ListView对象lvDiary.setAdapter(ba);lvDiary.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View v, int position,long id) {Intent intent = new Intent(DiaryActivity.this,CommentActivity.class);intent.putExtra("rid", diaryList.get(position)[0]);intent.putExtra("uno", uno);intent.putExtra("visitor", visitor);startActivity(intent);}});}//方法:获取日志列表public void getDiaryList(){new Thread(){public void run(){try{mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);mc.dout.writeUTF("<#GET_DIARY#>"+uno+"|"+"1");int size = mc.din.readInt(); //读取日志的长度for(int i=0;i<size;i++){ //循环接受日志信息String diaryInfo = mc.din.readUTF(); //读取日志信息String [] sa = diaryInfo.split("\\|");diaryList.add(sa); //将日志信息添加到列表中}}catch(Exception e){e.printStackTrace();}}}.start();}@Overrideprotected void onDestroy() {if(mc != null){mc.sayBye();mc = null;}super.onDestroy();}}(3)口袋微博_____个人中心PublishActivity.javapackage wyf.wpf;import static wyf.wpf.ConstantUtil.*;import android.app.Activity;import android.app.AlertDialog;import android.app.ProgressDialog;import android.content.DialogInterface;import android.content.Intent;import android.os.Bundle;import android.os.Looper;import android.view.Gravity;import youtInflater;import android.view.View;import android.view.ViewGroup;import youtParams;import android.widget.AdapterView;import android.widget.BaseAdapter;import android.widget.EditText;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;import android.widget.AdapterView.OnItemClickListener;public class PublishActivity extends Activity{String [] items = { //存放ListView中的选项内容"更新心情","发布日志","拍照上传"};int [] imgIds = {R.drawable.p_status,R.drawable.p_diary,R.drawable.p_shoot};String uno = null; //存放MyConnector mc = null; //MyConnector对象引用ProgressDialog pd = null; //ProgressDialog对象引用View dialog_view = null; //心情BaseAdapter ba = new BaseAdapter() {@Overridepublic View getView(int position, View convertView, ViewGroup parent) {LinearLayout ll = new LinearLayout(PublishActivity.this);ll.setOrientation(LinearLayout.HORIZONTAL);ll.setGravity(Gravity.CENTER);ImageView iv = new ImageView(PublishActivity.this); //创建ImageView对象iv.setAdjustViewBounds(true);iv.setImageResource(imgIds[position]); //设置ImageView的ll.addView(iv); //将ImageView添加到线性布局中TextView tv = new TextView(PublishActivity.this);tv.setPadding(10, 0, 0, 0);tv.setLayoutParams(new youtParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));tv.setTextAppearance(PublishActivity.this, R.style.title);tv.setText(items[position]); //设置TextView显示的内容ll.addView(tv);return ll;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic Object getItem(int position) {return null;}@Overridepublic int getCount() {return items.length;}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Intent intent = getIntent(); //获得启动该Activity的Intentuno = intent.getStringExtra("uno");setContentView(yout.publish); //设置当前屏幕ListView lvPublish = (ListView)findViewById(R.id.lvPublish); //获得ListView对象引用lvPublish.setAdapter(ba);lvPublish.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View v, int position,long id) {switch(position){ //判断点击的是哪一个选项case 0: //更新心情LayoutInflater li = LayoutInflater.from(PublishActivity.this);dialog_view = li.inflate(yout.publish_status, null);new AlertDialog.Builder(PublishActivity.this).setTitle("更新心情").setIcon(R.drawable.p_status).setView(dialog_view).setPositiveButton("发表",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {pd = ProgressDialog.show(PublishActivity.this, "请稍候", "正在更新心情...",true,true);updateStatus();}}).setNegativeButton("取消",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}}).show();break;case 1: //发表日志Intent intent1 = new Intent(PublishActivity.this,PublishDiaryActivity.class);//创建Intentintent1.putExtra("uno", uno); //设置Intent的Extra字段startActivity(intent1);break;case 2: //拍照上传Intent intent2 = new Intent(PublishActivity.this,ShootActivity.class);//创建Intentintent2.putExtra("uno", uno); //设置Intent的Extra字段startActivity(intent2);break;}}});}//方法:连接服务器,更新心情public void updateStatus(){new Thread(){public void run(){Looper.prepare();EditText etStatus = (EditText)dialog_view.findViewById(R.id.etInputStatus);String status = etStatus.getEditableText().toString().trim(); //获得心情内容if(status.equals("")){ //如果输入的心情为空pd.dismiss();Toast.makeText(PublishActivity.this, "请输入更新的心情", Toast.LENGTH_LONG).show();//输出提示Looper.loop();return;}String message = "<#NEW_STA TUS#>"+status+"|"+uno;if(mc == null){mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);}try{mc.dout.writeUTF(message); //向服务器发送更新的心情pd = ProgressDialog.show(PublishActivity.this, "正在连接网络", "请稍候",true);String reply = mc.din.readUTF(); //从服务器返回的回复pd.dismiss();if(reply.equals("<#STA TUS_SUCCESS#>")){ //心情更新成功Toast.makeText(PublishActivity.this, "心情更新成功!", Toast.LENGTH_LONG).show();Looper.loop();}else { //心情更新失败Toast.makeText(PublishActivity.this, "心情更新失败!", Toast.LENGTH_LONG).show();Looper.loop();}}catch(Exception e){e.printStackTrace();}Looper.myLooper().quit();}}.start();}@Overrideprotected void onDestroy() {if(mc != null){mc.sayBye();}super.onDestroy();}}(4)注册处理____RegActivity.javapackage wyf.wpf;import static wyf.wpf.ConstantUtil.SERVER_ADDRESS;import static wyf.wpf.ConstantUtil.SERVER_PORT;import android.app.Activity;import android.app.ProgressDialog;import android.content.Intent;import android.os.Bundle;import android.os.Handler;import android.os.Looper;import android.os.Message;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.LinearLayout;import android.widget.Toast;public class RegActivity extends Activity{MyConnector mc = null; //声明MyConnector对象String uno = ""; //记录用户的IDProgressDialog pd= null; //声明进度对话框Handler myHandler = new Handler(){@Overridepublic void handleMessage(Message msg) {switch(msg.what){case 0:View linearLayout = (LinearLayout)findViewById(R.id.regResult); //获得线性布局linearLayout.setVisibility(View.VISIBLE); //设置可见性EditText etUno = (EditText)findViewById(R.id.etUno);etUno.setText(uno);break;}super.handleMessage(msg);}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.reg); //设置当前屏幕Button btnReg = (Button)findViewById(R.id.btnReg); //获得注册Button按钮对象btnReg.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {pd = ProgressDialog.show(RegActivity.this, "请稍候...", "正在连接服务器...", false);register();}});Button btnBack = (Button)findViewById(R.id.btnBack); //获得返回按钮对象btnBack.setOnClickListener(new View.OnClickListener() { //为返回按钮添加监听器@Overridepublic void onClick(View v) {Intent intent = new Intent(RegActivity.this,LoginActivity.class); //创建Intent对象startActivity(intent); //启动Activityfinish();}});Button btnEnter = (Button)findViewById(R.id.btnEnter); //获得进入功能面板按钮对象btnEnter.setOnClickListener(new View.OnClickListener() { //为进入功能面板的按钮添加监听器@Overridepublic void onClick(View v) {Intent intent = new Intent(RegActivity.this,FunctionTabActivity.class); //创建Intentintent.putExtra("uno", uno); //设置Extra字段startActivity(intent); //启动FunctionTabfinish(); //关闭该Activity}});}//方法:连接服务器,进行注册public void register(){new Thread(){public void run(){Looper.prepare();//获得用户输入的数据并进行验证EditText etName = (EditText)findViewById(R.id.etName); //获得昵称EditText对象EditText etPwd1 = (EditText)findViewById(R.id.etPwd1); //获得密码EditText对象EditText etPwd2 = (EditText)findViewById(R.id.etPwd2); //获得确认密码EditText 对象EditText etEmail = (EditText)findViewById(R.id.etEmail); //获得邮箱EditText对象EditText etStatus = (EditText)findViewById(R.id.etStatus); //获得心情EditText对象String name = etName.getEditableText().toString().trim(); //获得昵称String pwd1 = etPwd1.getEditableText().toString().trim(); //获得密码String pwd2 = etPwd2.getEditableText().toString().trim(); //获得确认密码String email = etEmail.getEditableText().toString().trim(); //获得邮箱String status = etStatus.getEditableText().toString().trim(); //获得状态if(name.equals("") || pwd1.equals("") || pwd2.equals("") || email.equals("") || status.equals("")){ Toast.makeText(RegActivity.this, "请将注册信息填写完整", Toast.LENGTH_LONG).show();return;}if(!pwd1.equals(pwd2)){ //判断两次输入的密码是否一致Toast.makeText(RegActivity.this, "两次输入的密码不一致!", Toast.LENGTH_LONG).show();return;}try{mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);String regInfo = "<#REGISTER#>"+name+"|"+pwd1+"|"+email+"|"+status;mc.dout.writeUTF(regInfo);String result = mc.din.readUTF();pd.dismiss();if(result.startsWith("<#REG_SUCCESS#>")){ //返回信息为注册成功result= result.substring(15); //去掉信息头uno = result; //记录用户的IDmyHandler.sendEmptyMessage(0); //发出Handler消息Toast.makeText(RegActivity.this, "注册成功!", Toast.LENGTH_LONG).show();}else{ //注册失败Toast.makeText(RegActivity.this, "注册失败!请重试!", Toast.LENGTH_LONG).show();}}catch(Exception e){e.printStackTrace();}}}.start();}@Overrideprotected void onDestroy() {if(mc != null){mc.sayBye();}super.onDestroy();}}(5)AlbumActivity.javapackage wyf.wpf;import static wyf.wpf.ConstantUtil.IMAGESWITCHER_HEIGHT;import static wyf.wpf.ConstantUtil.PHOTO_HEIGHT;import static wyf.wpf.ConstantUtil.PHOTO_WIDTH;import static wyf.wpf.ConstantUtil.SERVER_ADDRESS;import static wyf.wpf.ConstantUtil.SERVER_PORT;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Color;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.Drawable;import android.opengl.Visibility;import android.os.Bundle;import android.os.Handler;import android.os.Looper;import android.os.Message;import android.view.View;import android.view.ViewGroup;import android.view.animation.AnimationUtils;import android.widget.AdapterView;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.Gallery;import android.widget.ImageSwitcher;import android.widget.ImageView;import android.widget.Spinner;import android.widget.TextView;import android.widget.Toast;import android.widget.ViewSwitcher;import android.widget.AdapterView.OnItemClickListener;import android.widget.AdapterView.OnItemSelectedListener;public class AlbumActivity extends Activity implements ViewSwitcher.ViewFactory{ List<String []> photoInfoList = new ArrayList<String []>();Bitmap [] photoList; //存放图片的数组Gallery gl = null; //Gallery对象的引用ImageSwitcher is = null; //ImageSwitcher对象的引用Spinner sp = null; //Spinner对象的引用MyConnector mc = null; //MyConnector对象的引用String xid = ""; //存放相册的IDString uno = ""; //存放用户IDString visitor = ""; //存放访问者的IDString pid = ""; //存放当前显示的照片IDint from = -1; //启动该Activity的来源,0为MyAlbumListActivity,1为AlbumListActivityList<String []> albumInfoList = new ArrayList<String []>(); //存放相册信息,id和相册名称//Spinner的AdapterBaseAdapter baSpinner = new BaseAdapter() {@Overridepublic View getView(int position, View convertView, ViewGroup parent) {TextView tv = new TextView(AlbumActivity.this);tv.setTextSize(18.5f);tv.setTextColor(Color.DKGRAY);String [] sa = albumInfoList.get(position);tv.setText(sa[1]);return tv;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic Object getItem(int position) {return null;}@Overridepublic int getCount() {return albumInfoList.size();}};//Gallery的AdapterBaseAdapter baGallery= new BaseAdapter() {@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ImageView iv = new ImageView(AlbumActivity.this);iv.setAdjustViewBounds(true);iv.setLayoutParams(new youtParams(PHOTO_WIDTH, PHOTO_HEIGHT));iv.setMaxHeight(PHOTO_HEIGHT); //设置ImageView显示的高度iv.setMaxWidth(PHOTO_WIDTH); //设置ImageView显示的宽度iv.setImageBitmap(photoList[position]); //设置ImageView显示的内容return iv;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic Object getItem(int position) {return null;}@Overridepublic int getCount() {if(photoList != null){return photoList.length;}else{return 0;}}};//点下Gallery中的图片后触发的事件监听器OnItemClickListener myListener = new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View v, int position,long id) {if(is != null){ //如果ImageSwitcher不为空Drawable d = new BitmapDrawable(photoList[position]);is.setImageDrawable(d);}}};Handler myHandler = new Handler(){@Overridepublic void handleMessage(Message msg) {switch(msg.what){case 0:gl.setAdapter(baGallery);is.setImageDrawable(new BitmapDrawable(photoList[0]));break;}super.handleMessage(msg);}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.album); //设置当前屏幕Intent intent = getIntent(); //获取启动该Activity的Intentuno = intent.getStringExtra("uno"); //获得Extra字段的unovisitor = intent.getStringExtra("visitor");from = intent.getIntExtra("from", -1); //获得Extra字段的fromint position = intent.getIntExtra("position", 0); //获得被选中的相册String [] albumInfoArray = intent.getStringArrayExtra("albumlist"); //获得相册信息数组xid = intent.getStringExtra("xid"); //获得被选中的相册编号albumInfoList = new ArrayList<String []>();for(String s:albumInfoArray){ //遍历信息数组String [] sa = s.split("\\|");albumInfoList.add(sa); //构建相册信息列表}sp = (Spinner)findViewById(R.id.spAlbum); //获得Spinner对象sp.setAdapter(baSpinner); //设置Spinner对象的Adaptersp.setSelection(position); //选中在前一个Activity中被选中的相册sp.setOnItemSelectedListener(new OnItemSelectedListener() { //为Spinner添加监听器@Overridepublic void onItemSelected(AdapterView<?> parent, View v,int position, long id) {xid = albumInfoList.get(position)[0]; //修改存储相册ID的成员变量getPhotoList(); //获得相册中的相片列表}@Overridepublic void onNothingSelected(AdapterView<?> parent) {}});gl = (Gallery)findViewById(R.id.galleryPhoto); //获得Gallery对象gl.setOnItemClickListener(myListener); //设置Gallery的OnItemClickListener监听器is = (ImageSwitcher)findViewById(R.id.isPhoto); //获得ImageSwitcher对象is.setFactory(this); //设置ImageSwitcher的Factoryis.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in)); //设置ImageSwitcher 的In动画is.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_out));//设置ImageSwitcher 的Out动画Button btnBack = (Button)findViewById(R.id.btnAlbumBack); //获得返回按钮btnBackbtnBack.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {switch(from){ //判断启动该Activity的来源case 0: //有MyAlbumListActivity启动Intent intent1 = new Intent(AlbumActivity.this,FunctionTabActivity.class);intent1.putExtra("uno", uno);intent1.putExtra("tab", "tab5");startActivity(intent1);finish();break;case 1: //由AlbumListActivity启动Intent intent2 = new Intent(AlbumActivity.this,HomePageActivity.class);intent2.putExtra("uno", uno);intent2.putExtra("visitor", visitor);intent2.putExtra("tab", "tab2");startActivity(intent2);finish();break;}}});Button btnDeletePhoto = (Button)findViewById(R.id.btnDeletePhoto);if(visitor != null){ //不是查看自己的相册btnDeletePhoto.setVisibility(View.GONE); //如果不是自己的相册,隐藏删除按钮}btnDeletePhoto.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {new AlertDialog.Builder(AlbumActivity.this).setTitle("提示").setIcon(R.drawable.alert_icon).setMessage("确认删除该照片?").setPositiveButton("确定",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {int pos = gl.getSelectedItemPosition();pid = photoInfoList.get(pos)[0];deletePhoto();}}).setNegativeButton("取消",null).show();}});}public void getPhotoList(){new Thread(){public void run(){Looper.prepare();mc = null;mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);mc.dout.writeUTF("<#GET_ALBUM#>"+xid);int size = 0; //获得相册长度size = mc.din.readInt(); //读取相册的长度if(size == 0){Toast.makeText(AlbumActivity.this, "该相册还未上传照片", Toast.LENGTH_LONG).show();Looper.loop();return;}photoInfoList = new ArrayList<String []>(size);photoList = new Bitmap[size];for(int i=0;i<size;i++){ //循环获取图片数据String photoInfo = mc.din.readUTF(); //读取相片信息String [] sa = photoInfo.split("\\|"); //切割字符串photoInfoList.add(sa); //将相片信息添加到列表中int photoLength = mc.din.readInt(); //读取相片长度byte [] buf = new byte[photoLength]; //创建相应长度的数组mc.din.read(buf); //读入图片数据photoList[i] = BitmapFactory.decodeByteArray(buf, 0, photoLength); //创建Bitmap }myHandler.sendEmptyMessage(0);}catch(Exception e){e.printStackTrace();}}}.start();}//方法:删除指定照片public void deletePhoto(){new Thread(){public void run(){Looper.prepare();if(mc ==null){mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);}String msg = "<#DELETE_PHOTO#>"+pid;mc.dout.writeUTF(msg);String reply = mc.din.readUTF();if(reply.equals("<#DELETE_PHOTO_SUCCESS#>")){Toast.makeText(AlbumActivity.this, "照片删除成功!", Toast.LENGTH_LONG).show();}else {Toast.makeText(AlbumActivity.this, "删除失败,请重试!", Toast.LENGTH_LONG).show();}getPhotoList();Looper.loop();}catch(Exception e){e.printStackTrace();}}}.start();}@Overridepublic View makeView() {ImageView iv = new ImageView(this);iv.setScaleType(ImageView.ScaleType.CENTER_INSIDE);iv.setLayoutParams(newyoutParams(IMAGESWITCHER_HEIGHT,IMAGESWITCHER_HEIGHT));return iv;}@Overrideprotected void onDestroy() {if(mc != null){mc.sayBye();。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

移动互联网开发
课程设计报告
学生姓名:谌敦斌学号: 031241318 专业:数字媒体技术班级: 0312413 设计题目:安卓新浪微博客户端设计
学年学期: 2014 年秋季学期
指导教师:张华
目录(示例)
一、设计题目 (1)
二、设计目的 (1)
三、设计原理及方案 (1)
1使用的软件工具和环境 (1)
2需求分析与概要设计 (1)
3数据库设计(若有) (1)
4详细设计和关键问题 (1)
四、实现效果 (1)
五、设计体会 (1)
参考文献 (3)
一、设计题目
简易新浪微博客户端系统
二、设计目的
通过设计开发新浪微博客户端综合训练安卓系统开发能力,进一步提升对安卓程序开发及运行的理解和认识,学会团队协作,开发出界面与功能都有特色的安卓应用软件。

掌握并熟悉OAuth认证协议的工作原理,学会通过http的get或者post方式传参数猎取相应的服务器应答信息,能够利用新浪微博官方提供的一系列接口完成简易微博客户端的开发。

三、设计原理及方案
1使用的软件工具和环境
Eclipse jdk7.0 Android SDK以及新浪官方提供的WeiboSDK、WeiboSDKDemo和相应API
2需求分析与概要设计
众所周知,官方新浪微博客户端的功能特不完善,我们这次课程设计要紧是模仿官版的微博。

具体的功能需求如下:
1.我们的安卓客户端是在线运行的,也确实是必须在有网络连接的情况下才能工作,假如没有联网将提醒用户打开网络连接。

2.为了安全起见,安卓客户端不建议直接使用用户名和密码进行登录,而是通过比较流行的OAuth认证授权后才能登录使用,因此授权功能是必须的。

同时在测试时期,授权的用户必须通过开发者将其微博昵称添加到测试信息才能正常登录。

3.关于第一次授权成功的用户,我们需要把它的部分身份信息例如ID、昵称、头像url和token验证等保存到数据库,方便下一次直接登录。

因此要设计一个简易的数据库功能。

4.关于差不多授权的用户,假如第二次登录,就不需要授权,而是直接进入登陆界面。

因此还需要一个微博一键登录功能。

5.登陆的用户能猎取到新浪微博首页的信息、用户资料、好友资料,能够发表微博、转发微博、点赞微博、评论微博、收藏微博,猎取关注信息,粉丝信息,查看自己发的微博等等。

6.同样为了安全起见,还需一个注销登录功能。

一旦用户点击注销之后,下一次登录必须先通过授权才能正常登录。

系统的总体架构设计如图1所示
图1 系统总体架构设计
如图1所示,我们的微博客户端首先进入loading界面,在加载中首先推断网络是否连接,假如网络是可用的,将进入下一步,否则将提醒用户打开网络连接。

网络连接成功后系统还将推断用户是否差不多授权,假如差不多授权则能够直接通过登录进入主界面。

否则将进入授权页面,进入授权页面的用户需要输入新浪微博用户名和密码同时同意授权后方能进入主页面。

进入主页面后用户能够查看当前用户及其所关注用户的最新微博,能够转发、评论和点赞。

在“消息”页面,用户能够查看@用户的微博、评论和赞等,还能够发送私信。

在“更多”页面,用户能够发送微博,包括纯文字微博,带图片的微博、拍照微博等,还能够点评和签到。

在“发觉”页面,用户能够搜索热门微博和找人等等。

在“我”页面,用户能够查看自己的身份信息,以及自己发的
微博、用户的关注和粉丝等等。

3数据库设计
在此次微博客户端开发过程中,我们用到了一点点数据库,确实是将授权成功后的用户部分身份信息保存到数据库,方便用户下次一键登录而不用授权。

由于只用到了一个用户信息表,它的ER图如图2所示
图2数据库ER图对应的数据表userinfomation如表1:
表1用户信息表结构
4在详细设计和关键问题
详细设计:
1.用户登录和授权模块
功能描述:关于第一次使用该应用的用户,在程序启动之后进入配置页面,输入用户名和密码进行授权认证。

关于用户在自己的手机上使用过或者差不多通过了授权认证则能够不用输入用户名和密码就能够选择用户进行登录。

参与者:未通过授权认证或者未登录。

前置条件:未通过授权认证或者未登录的用户。

后置条件:通过授权配置或者直接登录系
用户登录和授权模块流程图如图3所示:
图3 用户登录和授权流程图
2.系统首页信息显示模块
功能描述:显示被用户添加关注的好友的最新微博信息。

参与者:合法登录用户。

前置条件:已登录用户。

后置条件:在首页显示所有被用户添加关注的最新微博信息列表。

该模块用例如下图4所示:
系统首页显示模块流程图如图5所示:
4.
能。

前置条件:已登录用户。

后置条件:搜索成功返回结果。

搜索功能流程图如下图6所示:。

相关文档
最新文档