安卓APP课程设计源码和报告——个人日记本开发

Android开发基础

题目: 个人日记本开发

题目

个人日记本开发???

关键技术

开发过程中使用到的技术:利用SQLite存储数据 主要体现类:DbHelper类继承自SQLiteOpenHelper类,重写其构造方法、onCreate()和onUpdate()方法;Diary类相关联数据库中的数据属性及方法,以及构造方法;DiaryDao类中写出了查询数据的一些方法,如查找,总计,更新,保存等.Android UI布局技术 主要运用控件:RadioGroup、 ListView、EditText、Button、TextView、ProgressBar、gallery、ImageButton3. 利用Application帮助实现完全退出 主要体现类:MyHelpExit继承自Application,实现创建,往列表中添加Activity以及完全退出逐个将列表中的Activity s实现finish()功能。4. Intent页面跳转技术 Intent intent = new Intent(startActivity.this, endActivity.class);利用Intent进行页面的跳转,需要传参数时则增添Bundle。5.项目闪屏效果 运用AlphaAnimation类,设置闪屏的透明图渐变程度,设定播放的时间,以及通过注册事件监听控制当动画播放完毕自动跳转到列表主界,达到闪屏效果。6.利用AlertDialog、gallery和ImageButton以画廊的形式进行心情图片选择。

设计思路

项目背景: 基于手机通讯的普及以及人们对日记的需求,利用Android设计一款简单实用的日记薄方便人们的实用。设计思路: 首先通过闪屏界面进入日记的列表界面,如果之前存在日记则以列表的显示,否则以TextView提示。利用Menu提供四个功能:写新日记、查找日记、日记总计、退出。点击相应的列表内容则进行更新,常按某项列表内容则提示删除功能。核心代码如下:1)闪屏效果的实现。在WelcomActivity.java中利用AlphaAnimation实现,设置渐变透明度、播放时间以及通过注册事件监听控制当动画播放完毕自动跳转到列表主界。 AlphaAnimation alphaAnimation = new AlphaAnimation(0.0f, 1.0f);alphaAnimation.setDuration(5000);imageView.startAnimation(alphaAnimation);alphaAnimation.setAnimationListener();

设计思路

2)以列表的形式展示日记内容。通过数据库查找日记,利用适配器对列表进行绑定,并对单击列表内容项进行监听。 当一篇日记也没有写的时候,进行提示。TextView textEmpty_show=(TextView)this.findViewById(R.id.myAndroidEmpty);listView.setEmptyView(textEmpty_show); 通过数据库查找数据,存入data中:diaryDao=new DiaryDao(this);List<Diary> diaries=diaryDao.getAllDiaries();data=new ArrayList<Map<String,Object>>();for(Diary diary:diaries){ Map<String,Object> map=new HashMap<String,Object>();map.put("title", diary.getTitle());map.put("createtime", diary.getDatetime());data.add(map);} 利用适配器对ListView进行绑定:SimpleAdapter adapter=new SimpleAdapter(this,data,R.layout.item, new String[]{"title","createtime"},new int[]{R.id.title,R.id.createtime});listView.setAdapter(adapter);对列表内容单击注册监听事件,根据列表的postiton 和data下标值相同,从而查找出相应列表项的id,并将其作为参数传递给下一个页面,以便实现更新时的原内容的显示:public void onItemClick(AdapterView<?> parent, View view, int position,long id) {对该文件解析之后,将数据封装在存储有RSSItem实体类中的List中,以供前台的调用。实体类RSSItem如下所示:public class RSSItem {private String title;private String link;private String description;private String pubDate;}前台获取数据的时候,并没有占用主UI线程,而是采用重新启动一条数据线程的方式来获取数据的。例如方法:private void requestRSSFeed()就是采用重新启动一条线程的方式获取数据,并通过自定义适配器,将数据和控件绑定的。自定义适配器,需要新建一个类,让他继承并实现BaseAdapter以及BaseAdapter的一系列方法:public int getCount()public Object getItem(int position)public long getItemId(int position)public View getView(int position, View convertView, ViewGroup parent) 前台UI设计的时候,考虑到TabHost的不灵活性,定义了一组RadioGroup来代替TabHost的TabWidget,这样可以灵活布局。在设置RadioGroup的选择监听器事件的时候,进行相应的处理,会使UI的设计更为灵活。 TabWidget需要隐藏掉,对应的一个属性: android:visibility="gone" 在为RadioGroup添加点击效果的时候,运用到了控件的移动效果,运用到了TranslateAnimation类。这样点击的时候,对有该半透明图片的控件移动,使页面达到一些比较好看的效果。自定义的移动方法: public static void moveFrontBg(View v, int startX, int toX, int startY, int toY){}

设计思路

Map<String,Object> mapOne= data.get(position); String mapTitle= (String) mapOne.get("title"); DiaryDao diaryDao=new DiaryDao(MainActivity.this); Diary diary=diaryDao.find(mapTitle, "title"); Intent intent =new Intent();intent.setClass(MainActivity.this, OnlyOneActivity.class);Bundle bundle=new Bundle();bundle.putInt("id",diary.getId());intent.putExtras(bundle);startActivity(intent);finish();}}); 3)添加上下文菜单,实现删除功能:this.registerForContextMenu(listView);//注册上下文菜单public void onCreateContextMenu(ContextMenu contextMenu,View v,ContextMenuInfo menuInfo){}//重写,创建上下文菜单public boolean onContextItemSelected(MenuItem item){}//在该方法中利用switch判断是进行的删除操作4)利用Menu菜单添加四项功能,实现写新日记,查找,总计和退出。public boolean onCreateOptionsMenu(Menu menu){}//载入菜单界面在其方法中添加相应代码(添加菜单项以及对应的图标):MenuItem menu_new = menu.add(0, menu_id_new, 0, R.string.newRJ);对该文件解析之后,将数据封装在存储有RSSItem实体类中的List中,以供前台的调用。实体类RSSItem如下所示:public class RSSItem {private String title;private String link;private String description;private String pubDate;}前台获取数据的时候,并没有占用主UI线程,而是采用重新启动一条数据线程的方式来获取数据的。例如方法:private void requestRSSFeed()就是采用重新启动一条线程的方式获取数据,并通过自定义适配器,将数据和控件绑定的。自定义适配器,需要新建一个类,让他继承并实现BaseAdapter以及BaseAdapter的一系列方法:public int getCount()public Object getItem(int position)public long getItemId(int position)public View getView(int position, View convertView, ViewGroup parent) 前台UI设计的时候,考虑到TabHost的不灵活性,定义了一组RadioGroup来代替TabHost的TabWidget,这样可以灵活布局。在设置RadioGroup的选择监听器事件的时候,进行相应的处理,会使UI的设计更为灵活。 TabWidget需要隐藏掉,对应的一个属性: android:visibility="gone" 在为RadioGroup添加点击效果的时候,运用到了控件的移动效果,运用到了TranslateAnimation类。这样点击的时候,对有该半透明图片的控件移动,使页面达到一些比较好看的效果。自定义的移动方法: public static void moveFrontBg(View v, int startX, int toX, int startY, int toY){}

设计思路

menu_new.setIcon(android.R.drawable.ic_menu_add);处理菜单事件,利用item.getItemId()进行判断,进入相应的选项进行页面跳转:public boolean onOptionsItemSelected(MenuItem item){} 5)写新的日记newRJActivity.java与更新日记OnlyOneActivity.java用到同一个activity_only_one.xml布局文件,更新文件增添了根据id查找出标题与内容并利用setText()显示。而日记统计CountRJActivity.java中利用TextView显示即可。 6)查找日记利用RadioGroup进行按标题还是时间的区分。对RadioGrou注册监听事件,从而标记是时间还是标题:radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {public void onCheckedChanged(RadioGroup group, int checkedId) {switch (checkedId) {case R.id.time: time_or_title = "createtime";break;case R.id.biaoTi: time_or_title = "title";break;}}});Button注册监听事件,在其方法中取得EditText的内容,内容为空则利用Toast提示,否则进行查找,传递EditText的内容以及title_or_time。对取得Diary进行判断如果是空,表示无,否则跳转至查找结果显示界面:buttonCha.setOnClickListener(new Button.OnClickListener() {} 该方法中的Toast提示, Toast.makeText(ChaRJActivity.this, "不存在符合要求的日记",Toast.LENGTH_SHORT).show();

设计思路

对find方法进行了该改进,传递连个参数,方便两种查找方式,diary = diaryDao.find(neiRongCha, time_or_title);7)MyhelpExit.java继承自Appliacation,帮助程序完全退出。synchronized 方法控制对类成员变量的访问,这种机制确保了同一时刻对于每一个类实例,从而有效避免了类成员变量的访问冲突:public synchronized static MyHelpExit getInstance(){ if(instance==null) instance=new MyHelpExit(); return instance;}将Activity添加到List列表中,在之后的需要添加的Activity中都会引用该方法:public void addActivity(Activity a){ mList.add(a); }该方法是实现退出的方法,将列表中存有的Activity都finish(),刚方法只在菜单退出项引用:public void exit(){try{for(Object a: mList){Activity aa=(Activity)a;if(a!=null){ aa.finish(); }}}catch(Exception e){ e.printStackTrace(); }finally{ System.exit(0); }}}

设计思路

public void onLowMemory(){super.onLowMemory();System.gc();}在newRJActivity.Java中添加该语句MyHelpExit.getInstance().addActivity(this);是将本Activity添加至列表中,方便完全退出。8)利用SQlLite存储数据。DbHelper类继承自SQLiteOpenHelper类,重写其构造方法、onCreate()和onUpdate()方法。Diary类相关联数据库中的数据属性及方法,以及构造方法DiaryDao类中写出了查询数据的一些方法,如查找,总计,更新,保存等。其中的重要语句:得到的是同一个数据库实例sqLiteDatabase = dbhelper.getWritableDatabase();利用Cursor游标来读取数据if (cursor.moveToFirst()) {int id=cursor.getInt(cursor.getColumnIndex("_id"));String title = cursor.getString(cursor.getColumnIndex("title"));String content = cursor.getString(cursor.getColumnIndex("content"));String created = cursor.getString(cursor.getColumnIndex("createtime"));diary = new Diary(title, content, created);diary.setId(id);}

设计思路

9)利用AlertDialog、gallery和ImageButton 进行心情图片的选择。ImageButton相关联的方法,在该方法中填写显示Dialog的具体实现 android:onClick="chooseTX"ChooseTX方法中的一些重要语句:在AlertDialog中设置标题以及添加gallery的layoutAlertDialog.Builder alertDialog=new AlertDialog.Builder(this);alertDialog.setTitle("请选择头像:");LayoutInflater layoutInflater=getLayoutInflater();View view1=layoutInflater.inflate(R.layout.picgallery, null);alertDialog.setView(view1);显示gallery以及注册监听事件,当点击时记录图片的号码ImageAdapter imageAdapter=new ImageAdapter(this); gallery.setAdapter(imageAdapter); gallery.setOnItemClickListener(new OnItemClickListener() {public void onItemClick(AdapterView<?> adpterView, View view, int position,long id) {num=position;}});AlertDialog的确认按钮的监听事件中:imageButton.setImageResource(ImageAdapter.images[num]);设置ImageButton的图片来源。在以上代码中用到了ImageAdapter,它继承自BaseAdapter..ImageAdapter中记录了图片id的数组以及getView()方法,设置gallery中的单个ImageView的信息。public View getView(int position, View convertView, ViewGroup parent) {ImageView imageView=new ImageView(context);imageView.setImageResource(images[position]);imageView.setBackgroundResource(mGalleryItemBackground);imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);imageView.setAdjustViewBounds(true);return imageView;}

存在的主要问题及解决办法

存在的问题以及解决方法:首先是思路的问题。要明白自己做什么,需要怎样的一个页面,实现什么功能,之后再根据功能跳转到哪个页面。这些在脑海要非常的清楚,否则只能越做越乱,无法衔接起来。命名的规范性应当日后更加注意,有时命名不够规范会引起很多不必要的麻烦,还要到原文件去查找。对于事件的处理,点击事件发生后,页面并没有跳转到相应的页面或者也没有做相对应的响应。应当根据错误提示找到可能出错的Activity,寻找错误,重点查看事件中的内容。列表内容的删除问题。根据position传值是错误的并且是从0开始,要根据positon查找到数据data中的值,从而得到id。根据id删除就不会出现错误了。在完全退出的问题上,通过网络查了很多方法。最后确定了利用Application帮助完成退出,事实上当程序启动时系统会自动创建一个Application对象用来存储一些临时信息。利用List来存储每个Activity,在想要退出时将List的每个项都finish()。在查找日记时,利用RadioGroup选择按时间还是标题查找,这样在find()方法中就应该传递两个参数。这两个参数的取值,以及如何实现find()方法都是当时所遇到的问题,需要认真的考虑。写新的日记、更新日记以及查找日记的结果显示布局文件能够引用同一个布局文件,就可专心的设计一个布局文件,也节省时间。写代码时要专心,查错时费很多的时间后发现是因为自己疏忽漏写了某些符号或Toast的show()方法没有调用。布局文件的引用应当注意,引用错误的文件无法得到想要的效果。注意在更新文件时,new Diary()中的参数应该是在button的监听事件中重新getText()得到的新数据。

小结

这次的项目让我印象最深的是自学能力,要学会运用网络资源随时对自己不懂的、有疑问的问题进行学习,试着去运用,调试。只有在这个过程中你才能学到更多。UI界面的设计也是很重要的,一个美观的界面令人更愿意去接触,今后也应当去加强这方面的学习。不管做什么事离不开认真二字。写代码时更是要专心,查错会费很多的时间,如果发现是因为自己疏忽漏写了某些符号或Toast的show()方法没有调用等错误更是令人后悔。因此编程时应当注意认真二字。这次项目也让我认识了自己的不足之处,有想法却没有去实现,一方面是掌握的知识的问题,更多的是自己没有充分利用时间去研究、去调试。今后也将激励自己更主动的去学习。

成绩: 指导教师(签名): 年 月 日

附件:界面展示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/19801.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT 启示录:知识到底是什么?

知识是人类对客观世界的认识和经验&#xff0c;人类通过语言来表示知识&#xff0c;句子是语言的基本单位&#xff0c;一句话往往包含主谓宾&#xff0c;主语和宾语可被称为实体&#xff0c;谓语表示了主语宾语间的关系。所以&#xff0c;世界在人类大脑中&#xff0c;就是无数…

艺术签名微信小程序源码支持微信流量主

介绍&#xff1a; 某交易网站上卖500元的源码&#xff0c;免费设计艺术签名&#xff0c;支持微信流量主 云盘地址&#xff1a; http://zijieyunpan.cn/GVnCixUXtMA 阅览&#xff1a;

chatgpt赋能python:Python手写签名:如何用Python实现一个自动生成个性化签名的工具

Python 手写签名&#xff1a;如何用 Python 实现一个自动生成个性化签名的工具 Python 是一门高效的编程语言&#xff0c;它拥有强大的数据处理和图像处理能力。Python 还有一个优点是它的易读性&#xff0c;这使得 Python 成为许多程序员和数据科学家的首选语言。而今天我们要…

管理系统类毕设(六)---完善后端接口以及前端接入(接入了学生的查询 新增 修改 教师,考试,成绩类似于学生)

后端接口已经完成开发 完善后端接口以及前端接入(接入了学生的查询 新增 修改 教师&#xff0c;考试&#xff0c;成绩类似于学生) 代码已更新 https://github.com/dmhsq/edusys github代码尚未完全加注释(困) 目前效果如下 完善后端&#xff0c;接入前端 后端完善新增修改和新…

毕业设计-基于微信小程序的校友社区网络管理系统

目录 前言 课题背景与简介 实现设计思路 一、平台的选择与市场现状 二、系统设计 三、设计情况 实现效果样例 更多帮助 前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个…

计算机毕设Python+Vue学院校友信息管理系统的(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

计算机毕设Python+Vue校园社团信息管理系统(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

计算机毕设Python+Vue校园社团管理系统(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

两周搞定计算机专业毕业设计,附源码+论文+答辩

毕设论文答辩通关法则&#xff0c;看这一篇&#xff0c;源码都在下面了&#xff01;写在前面&#xff0c;尽管论文方法和毕设源码都有&#xff0c;但还是要看课自己敲完完善好。做好充分准备面对答辩。 文章目录 一、毕设二、论文2.1 论文标题2.2 确定论文大纲2.3 论文内容2.3.…

毕业设计-基于微信小程序投票系统

目录 前言 课题背景与简介 实现设计思路 一、微信投票小程序需求方法分析 二、微信投票小程序功能结果实现 三、总结 实现效果样例 更多帮助 前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费…

新生报到小程序毕业设计,新生报到管理系统设计与实现,毕设作品参考

功能清单 【后台管理员功能】 广告管理&#xff1a;设置小程序首页轮播图广告和链接 留言列表&#xff1a;所有用户留言信息列表&#xff0c;支持删除 录入资讯&#xff1a;录入资讯标题、内容等信息 管理资讯&#xff1a;查看已录入资讯列表&#xff0c;支持删除和修改 学校…

如何做一个基于python校园排课选课系统毕业设计毕设作品(Django框架)

分析架构 我们开发系统&#xff0c;常规有两个架构&#xff0c;一个BS架构&#xff08;浏览器/服务器模式&#xff09;&#xff0c;一个CS&#xff08;客户端/服务器端模式&#xff09;&#xff1b;基于Python&#xff08;Django框架&#xff09;的网站开发属于B/S架构&#x…

毕业设计-基于微信小程序的实验室信息管理系统

目录 前言 课题背景与简介 实现设计思路 一、微信小程序 二、系统设计 三、系统实现 四、总结 实现效果样例 更多帮助 前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个…

大数据毕业设计可视化大屏前后端项目分享

1、前言 很久没有分享过可视化大屏的项目了&#xff0c;距离上次分享基于Echarts的数据可视化大屏系统设计分享这篇可视化系统已经过去了整整一年有余。当时分享这篇博客没想到会收获这么多的阅读量&#xff0c;并且在刚发布的时候&#xff0c;还上了CSDN的博客热搜2&#xff…

【毕业设计】大数据招聘数据分析可视化 - python

文章目录 0 前言1 数据集说明2 数据处理2.1 数据清洗2.2 数据导入 3 数据分析可视化3.1 整体情况&#xff08;招聘企业数、岗位数、招聘人数、平均工资&#xff09;3.2 企业主题3.2.1 行业情况3.2.2 公司类型3.2.3 最缺人的公司 TOP3.2.4 平均薪资最高的公司 TOP3.2.5 工作时间…

【计算机毕业设计】师生交流平台

一、系统截图&#xff08;需要演示视频可以私聊&#xff09; 目 录 摘 要 Abstract 第1章 前 言 2 1.1 研究背景 1.2 研究现状 1.3 系统开发目标 第2章 系统开发环境 2.1 java简介 2.2 Mysql数据库 2.3 B/S结构 2.4 JSP介绍 第3章 需求分析 3.1 需求…

大二毕设.1-学生信息管理系统-练手的

目录 技术选型: 功能概括: 可扩展性良好&#xff0c;添加其余操作无非是多加点信息&#xff0c;重复编码改数据罢 版本: 基本演示 功能实现讲解 登录校验 可调整每页条数的分页显示与增删查改 不会造成偷窃的部分web代码 技术选型: 前端: Vue Element UI后端: Spring…

【毕设系列】电子信息/通信仿真/图像专业课程设计/毕业设计项目汇总

Date&#xff1a;2022.4.14 文章目录 1、通信仿真2、图像处理3、图像识别4、语音处理5、视频编解码 1、通信仿真 2、图像处理 3、图像识别 4、语音处理 5、视频编解码 THE END!

【毕设选题】最新电子信息工程毕业设计项目合集 - 100例

文章目录 1前言2 如何选题2.1 嵌入式开发方向2.2 物联网方向2.3 移动通信方向2.4 人工智能方向2.5 算法研究方向2.6 移动应用开发方向2.7 网络通信方向2.8 学长作品展示 3 最后 1前言 &#x1f947; 近期不少学弟学妹询问学长关于电子信息工程专业相关的毕设选题&#xff0c;学…

【毕设选题】最新通信工程毕业设计项目合集 - 100例

文章目录 1前言2 如何选题2.1 移动通信方向2.2 嵌入式开发方向2.3 人工智能方向2.4 物联网方向2.5 算法研究方向2.6 移动应用开发方向2.7 网络通信方向2.8 学长作品展示 4 最后 1前言 &#x1f947; 近期不少学弟学妹询问学长关于通信工程相关的毕设选题&#xff0c;学长特意写…