文档库 最新最全的文档下载
当前位置:文档库 › 移动开发技术实验报告

移动开发技术实验报告

移动开发技术实验报告
移动开发技术实验报告

移动开发技术

--------实验报告

学院:信息学部

专业:软件工程

班级:软工二班学号:

学生姓名:

指导教

师:

项目名称:闹钟提醒备忘录

2019年12 月30 日

目录

第一部分:APP简介 ....................... 错误!未定义书签。

(1)需求分析........................ 错误!未定义书签。

(2)系统目标........................ 错误!未定义书签。

(3)开发及运行环境.................. 错误!未定义书签。第二部分:开发技术....................... 错误!未定义书签。

(1)SharedPrefenrences技术.......... 错误!未定义书签。

(2)数据库........................... 错误!未定义书签。

(3)CRUD操作........................ 错误!未定义书签。

(4)时钟提醒......................... 错误!未定义书签。第三部分:功能介绍....................... 错误!未定义书签。

(1)登录模块......................... 错误!未定义书签。

(2)注册模块......................... 错误!未定义书签。

(3)主界面模块....................... 错误!未定义书签。

(4)新建备忘录模块................... 错误!未定义书签。

(5)删除备忘录模块................... 错误!未定义书签。第四部分:遇到的问题和解决办法........... 错误!未定义书签。

(1)无法刷新UI ...................... 错误!未定义书签。

(1)无法使用某些API ................. 错误!未定义书签。第五部分:总结........................... 错误!未定义书签。

第一部分:APP简介

(1)需求分析

随着时代的发展,我们每天需要处理的事务也呈现了爆炸式的增长。记住亲朋好友的生日并及时送上生日的祝福;记住上司布置的任务;记住几天后的出行车票时间等,这些纷繁的信息记忆是不是正在让您深陷其中目前,手机上已经有了备忘录功能和闹钟功能,但二者之间并没有实现消息的互通(苹果手机用户可以设置事件的闹钟提醒,但是安卓用户却还没有使用这样的功能)。用户在备忘录中记录下需要设置时间提醒事件后,还需要再打开闹钟app,并设置闹钟提醒,这在无形中增加了用户的负担,并且产生了糟糕的用户体验。

现在,这些都不再是问题,在本次的课程设计中,使用我的软件,用户可以十分方便的新建备忘录,根据标题查找备忘录事件,删除已过期的备忘录并可以随意修改备忘录内容。除此之外,用户还可以为每条事件添加重要程度,并在主界面按重要程度展示所有的已建备忘录列表本软件致力于帮助用户时刻记录下生活中的重要信息并在设置的时间给用户发送提醒,让您不缺席生活中的重要时刻。

(2)系统目标

1,友好的操作界面和良好的人机互动。

2,软件的登录界面保证了信息的保密性。

3,随时对重要信息的记录并设置到时间提醒。

4,备忘录内容的修改,删除和查询。

5,也可将其用作记录本使用,代替原有的单一备忘录app。

6,系统可靠运行,安全有效。

(3)开发及运行环境

(1)开发工具:Android Studio

(2)系统环境:Windows 10家庭中文版

(3)开发语言:Java,xml

第二部分:开发技术

(1)SharedPrefenrences技术

在用户第一次进入软件时,可以注册个人账号,包括账号和密码;密码须二次输入同样的字符,否则无法注册成功;账号和密码使用SharedPrefenrence技术保存。保存用户的账号密码,属于用户的偏好参数,若使用数据库来存储这些数据,未免有些大材小用,此时SharedPreferences技术就派上用场。SharedPreferences使用键-值的形式来存储数据。在我们的实例中,账号为键,密码为值,具有唯一匹配性,我们只需要调用SharedPreferences的getXxx(name), 就可以根据键获得对应的值。使用起来很方便!

登录界面源码:

package class LoginActivity extends AppCompatActivity {

private TextView tv_main_title;oString().trim();

userName=().toString().trim();

psw=().toString().trim();

how();

return;

}else if(psw)){

, "请输入密码", .show();

return;

how();

how();

return;

}else{

, "此用户名不存在", .show();

}

}

});

}

/**

*从SharedPreferences中根据用户名读取密码

*/

private String readPsw(String userName){

etString("***");

String userName=("userName");

if(!(userName)){

how();

return;

}else if(psw)){

, "请输入密码", .show();

return;

}else if(pswAgain)){

, "请再次输入密码", .show();

return;

}else if(!(pswAgain)){

, "输入两次的密码不一样", .show();

return;

/**

*从SharedPreferences中读取输入的用户名,判断SharedPreferences中是否有此用户名

*/

}else if(isExistUserName(userName)){

, "此账户名已经存在", .show();

return;

}else{

, "注册成功", .show();

oString().trim();

psw=().toString().trim();

pswAgain=().toString().trim();

}

/**

* 从SharedPreferences中读取输入的用户名,判断SharedPreferences 中是否有此用户名

*/

private boolean isExistUserName(String userName){

boolean has_userName=false;

ppend(",");

}

() - 1).append(")");

return , ());

}

(4)时钟提醒

在退出软件后,为了让我们的提醒服务在后台保活,编写ClockService类在后台运行。

代码如下:

public class ClockService extends Service {

private static final String TAG = "ClockService";

public static final String EXTRA_EVENT_ID = "";

public static final String EXTRA_EVENT_REMIND_TIME = "";

public static final String EXTRA_EVENT = "";

private EventDao mEventDao = ();

public ClockService() {

(TAG, "ClockService: Constructor");

}

@Override

public IBinder onBind(Intent intent) {

throw new UnsupportedOperationException("Not yet implemented");

}

@Override

public int onStartCommand(Intent intent, int flags, int startId) {

(TAG, "onStartCommand: onStartCommand");

();

postToClockActivity(getApplicationContext(), intent);

return (intent, flags, startId);

}

private void postToClockActivity(Context context, Intent intent) {

Intent i = new Intent();

(context, ;

(EXTRA_EVENT_ID, (EXTRA_EVENT_ID, -1));

Event event = (EXTRA_EVENT_ID, -1));

if (event == null) {

return;

}

(EXTRA_EVENT_REMIND_TIME, (EXTRA_EVENT_REMIND_TIME));

(EXTRA_EVENT, event);

;

(i);

}

第三部分:功能介绍

(1)登录模块

为了保证用户的信息安全,在登录界面实现使用账号,密码的登录功能。存储技术使用了SharedPreference键值对实现持久性存储。在登录界面将输入的账号与密码与已注册的账号密码进行比对。若账号为空,则提示“请输入用户名”;若密码为空,则提示“请输入密码”;若账号与密码不匹配,则提示“请输入密码”;若账号密码完全匹配,则提示“登录成功”,并跳转到主界面。

(2)注册模块

用户第一次进入软件,可在登录界面选择“立即注册”,进入注册界面,输入自定义用户名,密码并再次输入密码,确保输入无误,点击注册按钮完成注册;若二次输入密码不一致,则提示“两次输入密码不一致”,并可以再次输入;注册成功自动跳转到登录界面。

(3)主界面模块

用户登录成功,,进入主界面,可以查看所有已建立的备忘录,并选择操作,包括新建备忘录;浏览所有已建立备忘录;查询指定备忘录;修改备忘录内容;批量删除备忘录等。

(4)新建备忘录模块

在主界面选择控件加号,进入新建备忘录界面。可选择以下内容输入:为该备忘录建立标题,并选择提醒时间,选择该备忘录是否是重要事件,最后在备注中输入事件的详细信息,点击确定,提示备忘录成功建立,并可在主界面查看。

(5)删除备忘录模块

在主界面点击垃圾桶按钮,进入删除备忘录功能,选择零个或多个备忘录,再次点击“删除”,提示删除成功。

第四部分:遇到的问题和解决办法

(1)无法刷新UI

问题:在测试过程中发现,当删除某备忘录时,MainActivity的RecyclerView不能及时刷新,后面经过仔细排查发现,Android不允许在子线程中对UI进行刷新,对UI的刷新只能在主线程中实现。

解决办法:Android提供了一套异步消息处理机制,完美的解决了在子线程中进行UI操作的问题。首先在主线程中创建一个Handler对象,并重写他的handlerMessage()方法。然后当我们的子线程需要进行UI操作时,就创建一个Message对象,并通过Handler把这条消息发出去,之后这条消息会被添加到MessageQueue中等待被处理,而Looper一直尝试在MessageQueue中取出消息,最后回到Handler的handlerMessage()中。这样,就可以安心的进行UI 刷新了。

(1)无法使用某些API

问题:某些功能的实现方法可以在网上搜索到,但实际使用时却无法使用。

解决办法:问题主要时Android的高版本移除了一些API,导致使用时报错,后面通过查询发现,Android在移除API的同时会发布替换的API,所以问题也完美解决。

在测试过程中也遇到了各种各样的报错,大多经过百度搜索解决方案都可以解决,此处便不再一一赘述!

第五部分:总结

通过本次的课程设计,我获益颇多,从之前从未接触过安卓开发到现在可以简单的开发一个安卓小程序,实现简单的增、删、改、查功能。备忘录是一个相对较简单的app,上手难度不高,但我觉得在我的本次实验中还是有一些可圈可点之处。首先是功能上,备忘录和闹钟的搭配使用,抛开了传统备忘录只能单一记录事件的功能,做到了在记录事件的同时还可以为事件设置闹钟;在设计上,软件大的登录注册模块使用了持久化技术,具体使用了SharedPreference键值对存储用户的账号和密码,并创新性的使用键来存储账号,值存储密码,具体做法是使用用户输入的账户名作为键值来取出对应存储的值,并将取出的值与用户输入的密码比对,如果相同,则判断登录成功,跳转到主界面;否则提醒用户账号或密码出错。

对软件的未来展望,在设计时疏忽了将用户的id加入我的备忘录数据库存储,这导致了所有用户共享自己的备忘录,即不同用户登录不同账号,看到的依然是相同的备忘录列表。具体解决方案应是在新建备忘录时将用户登录使用的账号作为主键和备忘录一并存储到数据库。其次在主界面刷新备忘录列表时进行判断,将用户账号作为判断条件,只有存储了该用户账号的备忘录内容才被从数据库取出;闹钟的提示声音目前还只是Android Studio内置的,后面应该可以丰富,比如播放歌曲或自定义声音。

通过这门课程以及实验,使我对安卓开发有了初步的理解和认识,在以后的学习过程中,我还会再对安卓开发进行深入的了解,使自己不断提升。

相关文档