安卓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()方法没有调用等错误更是令人后悔。因此编程时应当注意认真二字。这次项目也让我认识了自己的不足之处,有想法却没有去实现,一方面是掌握的知识的问题,更多的是自己没有充分利用时间去研究、去调试。今后也将激励自己更主动的去学习。
成绩: 指导教师(签名): 年 月 日

附件:界面展示

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
安卓android课程设计分析报告 湘潭大学课程设计报告 课程名称______手机安卓开发_______ 课题名称______天气预报APP_______指导老师______周唯____ _______ 姓名____黄柳________ 学 班级____12计2班________ 小组______棒棒糖_______ 时间____2015年1月26日_____ 1. 需求分析 1) 引言 1. 编写目的 1. 为用户提供一个显示天气预报的软件,可以根据百度地图显示用户需求的城市位置 ,以及用图标表示各城市对应的气象信息,可以简洁的表示出"晴、雨、雪"和" 气温"气象信息。 2. 项目风险 1. (项目风险识别是指找出影响项目目标顺利实现的主要风险因素,并识别出这些风 险究竟有哪些基本特征、可能会影响到项目的那些方面。) 1. 联网收费视用户电话运营商的收费标准决定 2 手机或者无线信号不好时,可能无法连接或更新天气情况 3. 预期读者和阅读建议 1. 预期读者:会使用已经安装安卓系统的手机或者平板电脑及其他移动设备的用户 3 阅读建议:读者应通过该文档可以了解相关项目的需求分析、使用注意事项以及可 能存在的风险 4. 产品范围 1. 手机,平板电脑,MP4,导航仪,上网本,电纸书等使用安卓系统的数码领域 2) 综合描述 1. 产品的状况 1 Android是一种以Linux为基础的开放源代码操作系统,主要使用于便携设备。目前 未有统一中文名称,中国大陆地区较多人使用"安卓"或"安致"。Android操作系 统最初由AndyRubin开发,最初主要支持手机。2005年由Google收购注资,并组 建开放手机联盟开发改良,逐渐扩展到平板电脑及其他数码领域上。我们开发的 相关项目正是一个在安卓平台上开发的软件,可以用这个软件来实现用户在一些 简单的手持设备如手机或者平板电脑等上面及时的了解到用户所在城市的天气预 报。 2. 产品的功能 2 天气信息获取 2 天气信息显示 3. 系统配置功能 1. 用户类和特性 安卓平台用户:安卓新用户可以使用软件来了解用户所在城市的天气预报。熟悉安卓平 台用户还可以选择对相关软件的系统按自己的喜好进行配置并保留自己的个性化系统配 置。 安卓软件开发者:安卓软件开发者(喜好者)可以通过相关的开源代码来了解软件运行 的原理。 2. 运行环境 软件需要在支持安卓系统的可移动设备中正确安装才能正常运行。安卓版本需在2.2及以 上,同时建议用户如果是在手机移动设备使用的话,需确保手机支持联网服务。 3. 设计和实现上的限制 Eclipse是开发相关应用软件的首选集成开发环境,安卓开发环境首先需要安装支持jav a应用软件运行的java开发软件包(即JDK),然后安装集成开发环境Eclipse,最后安装 AndroidSDK的Eclipse的ADT插件。 AndroidSDK和Eclipse的ADT插件是必须使用的。 软件支持高效、快速的数据存储方式,包括快速数据存储方式SharedPreferences、文件 存储和轻量级关系数据块SQLite,可软件可以使用适合的方法对数据进行进程保存和访 问。 4. 假设和约束(依赖) 软件必须在安卓系统下才可以正常运行,若需要获取天气更新或者是短信服务,需确保 用户的数码设备支持联网及短信服务。 3) 外部接口需求 1. 用户的手机设备可以支持联网。 2. 用户界面 3. 软件接口 软件提供轻量级的进程间通信机制Intent,实现跨进程组件通信。 4. 访问硬件的API库函数通讯接口 4 HTTP协议:有多种接口可以调用你可以用Java类库封装的HttpConnection或者用A pach的开源项目的HttpGet或者HttpPost,服务器端需要编写Serlvet来响应客户 端的请求。 4 Sokcet:就是服务器端不断监听双方约定好的端口号,客户端通过服务器IP去请求 连接,连接成功后,得到Socket的输入输出流,直接操作即可。 4) 系统功能需求 天气信息显示和获取 功能描述:需有一个显示天气情况的用户界面,要求百度地图显示各城市位置(如:北 京、长沙、广州等3- 5个城市),以及用图标表示各城市对应的气象信息,表示出"晴、雨、雪"和"气温"简洁 气象信息。 输入输出信息: 输入:当触摸某一城市对应的气象图标时,显示该城市当天的温度、湿度、风向和雨雪 详细天气信息,并预报该城市后面几天的气象信息。 输出:气象信息的获取,从百度上获取天气预报信息,这些天气数据是通过后台服务获 取的,这个后台服务可以按照一定时间间隔,并将各城市的天气信息保存到SQLite数据 库中。 2. 概要设计 3. Ui界面 我们的ui界面秉承着清新的风格开发出来的。 整个软件界面使用一个

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值