《移动应用开发技术——Android》课程报告-个人记账系统_移动端应用开发课程设计
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
《移动应用开发技术》课程报告
《移动应用开发技术》课程报告
题 目 个人记账系统
姓 名
学 号
班 级
日 期
一、Android应用程序开发背景...................................1
1.Android开发的背景......................................1
2.应用程序的背景.........................................1
二、相关理论与方法............................................2
1.基本控件.............................................2
1TextView.......................................2
2Button.........................................2
3EditText.......................................2
2.布局控件:.............................................3
1线性布局 (LinearLayout).........................3
2排列方式(orientation)...........................3
3摆放位置(gravity/layout_gravity)................3
3.Activity.............................................3
4.SQLite...............................................3
三、Android应用程序的设计与实现................................4
3.1 设计目的.............................................4
3.2 设计要求.............................................4
1.总体设计..........................................4
2. 数据库设计........................................5
3. 界面设计..........................................6
4. 过程设计..........................................9
3.3 模块设计与关键代码...................................10
3.3.1用户登录页面activity_main.xml...............10
3.3.2用户注册页面activity_register.xml...........14
3.3.3用户个人中心页面activity_user_center.xml.....17
3.3.4用户搜索记录页面activity_search_record.xml...21
3.3.5收支管理页面activity_manage.xml.............26
四、总结....................................................30
一、Android应用程序开发背景
1.Android开发的背景
在后PC时代的今天手机成为最重要的移动终端是我们出门出行的必携物。以前或许我们的手机只能为我们提供基本通信功能而随着Android系统的诞生我们的生活迎来了一场不亚于“工业革命”带给我们的巨大变化。
基于Android系统的手机处理各类信息的能力得到了质的提升。而Android这个开源的操作系统将享受这项优质服务的权利给了所有愿意使用它的人。 Android从08年9月的1.1版到今年的11版一路走来从基本走向优化全方面地为我们提供了出色的网络、多媒体、通讯、娱乐等功能。这匹黑马从诞生伊始到去年7月的“全球市场占有率达81.9%”告诉我们它的出现是多么受人们欢迎。它备受追捧的原因不外乎它完全的对第三方软件开发商和我们这些开发者的开发。我们可以在它上面实现无限自主的“自定义”。它宛如一张白纸我们可以在上面随意画出自己想要的东西。它贵在给我们自由。
2.应用程序的背景
记账是我们中国人千百年来都流传的事情最初人们使用结绳计数的方式对经济事项进行计数记录。随着农业的发展简单的结绳计数方式已经不能满足人们的记账需求人们开始使用珠算算盘纸张来计量记录。随着计算器的出现人们开始使用计算器账本来计算与记录。到了二十一世界信息化的时代来临电脑软件的兴起使得人们开始转向强大计算功能强大分析功能的电脑软件。接下来来到近些年移动端的兴起移动设备具有电脑的强大作用而且更加容易携带与操作我相信个人记账软件在手机移动端也能发光发热。个人记账的好处有一下几方面:
1.了解个人自己或者自己家庭的收支情况。记账的作用最直接在于能够清楚的了解自己个人或者家庭每个月的收入支出的集体情况。让您对你自己个人或者家庭账单一目了然从而对自己的财产进行管理。
2.培养个人良好的消费习惯根据对账目的分析可以了解自己的消费在哪里。通过记账与分析让自己成为一个理性而又精明的消费者。
3.规划未来合理投资。如果你们对自己的账单每个月支出多少每个月收入多少都清清楚楚。做到每-次花钱都用的合理你就能做到提前规划提前预算从而规划未来合理投资。人们的消费水平提高人们开始对于自己的收支情况不能做到很好的掌握但是单纯的采用纸质记账本进行记账对于繁多的收支情况造成条目繁多而杂乱。人们对于记录自己的收支情况有着很大的需求。而专业的记账软件拥有简单而又方便的记账功能良好的归类管理能够使得用户方便的记录下自己的收支情况清晰的了解自己的收入与支出情况变化趋势。设计与实现个人记账APP个人记账APP不仅能让用户方便用户记录自己的收支情况通过报表显示清晰的了解自己财产的变化趋势总结自己的财务情况移动设备方便携带实时实地的使用个人记账APP记录自己的收支情况。
二、相关理论与方法
1.基本控件
1TextView
TextView就是文本视图只是用来显示文字的。要想在Activity中显示TextView, 需要在相应的布局文件也就是Activity对应的layout.xml文件去添加相应的控件标签。这些xml标签可以确定控件的位置大小颜色等属性。
2Button
在Android中的按钮就叫Button,还是和上面类似我们需要在Activity对应的布局文件layout.xml中添加一个Button,标签就是代表着Button。
3EditText
Activity添加一个输入框在Android中输入框的类型和标签都是EditText其功能都是接收用户输入的数据的。
2.布局控件
1线性布局(LinearLayout)
LinearLayout简单来说就是线性布局线性肯定是具有横竖两种方向的水平和垂直。
2排列方式(orientation)
排列方式有水平和垂直两种方式
3摆放位置(gravity/layout_gravity)
gravity是针对当前控件里面内容的摆放如果是容器则针对的是容器里面view的摆放如果是控件则针对的是控件里面内容的摆放。
layout_gravity是指当前控件在父控件里面的摆放位置不过需要注意的一点是父控件设置的gravity的级别要低于子控件设置的layout_gravity。
3.Activity
Activity是一个Android应用程序组件(也称为Android四大组件之一)它提供了一个屏幕用户可以通过该屏幕进行交互以执行某些操作例如拨打电话拍照发送电子邮件或查看地图。每个活动都有一个窗口用于绘制其用户界面。窗口通常填满屏幕但可能比屏幕小并漂浮在其他窗口的顶部.
4.SQLite
SQLite 是个轻量级关系型数据库类似mysql需要数据库的相关基础知识。
三、Android应用程序的设计与实现
3.1 设计目的
设计和实现一个类似个人财务管理的 Android APP 数据库采用 SQLite 也可以直接访问 Web 端 MySQL 数据库、或提供 Web 接口访问 MySQL 数据库。
1.用户注册和登录这类 APP 一般面对个人用户不需要分类别
2. 收入和支出管理单条收支记录的添加、删除和修改收入和支出每一条记录至少包括日期、类型、金额和说明。
3.收入和支出查询根据时间段、类别等进行查询
4.收入和支出统计例如某个月、某个星期或指定时间段的总收支
5. 其他要求界面设计应尽量美观可以添加一些图片或背景。
3.2 设计要求
1.总体设计
基本实现用户注册和登录这类 APP 一般面对个人用户不需要分类别收入和支出管理单条收支记录的添加、删除和修改收入和支出每一条记录至少包括日期、类型、金额和说明。收入和支出查询根据时间段、类别等进行查询收入和支出统计例如某个月、某个星期或指定时间段的总收支 其他要求界面设计应尽量美观可以添加一些图片或背景。在满足以上需求对界面进行美化。
对所要实现的功能进行了整理如下方思维导图3-2-1所示
2. 数据库设计
接下来开始设计数据库如下方思维导图3-2-2所示
因为功能较为简单所以数据库只设计了两张表。
3. 界面设计
开始完善该 APP 的界面。基于本次课题需求设计了5个界面。接下来介绍App 的具体界面设计如下设计图3-2-3所示
整理五个界面所需要的内容之后接下来我们来对它进行原型绘制如下图3-2-3a所示
4. 过程设计
最后是整体app的设计也是最关键的设计如图3-2-4所示
3.3 模块设计与关键代码
3.3.1用户登录页面activity_main.xml
界面设计
用户登录界面采用LinearLayout作为根布局控件并设置其方向为垂直布局采用TextView显示“login_logo”图片和“用户登录”字样分别利用LinearLayout水平布局采用两个ImageView分别显示用户名和密码输入前面的图片采用两个EditText分别用于用户名和密码输入设置其hint属性来提示用户输入具体内容分别利用LinearLayout垂直布局采用Button设置“登录”按钮“还没有账号现在注册”。用户登录界面显示效果如图3-3-1所示。
功能描述
用户登录模块主要实现用户登录APP功能当用户输入正确的用户名和密码时点击登录按钮当前界面会提示“登录成功”如图3-3-1(a)所示且用户进入APP的主界面当用户名输入错误时点击登录按钮当前界面会提示“登录错误密码错误或账号不存在”如图3-3-1(b)所示当用户名输入正确而密码输入错误时点击登录按钮当前界面会提示“登录错误密码错误或账号不存在”如图3-3-1©所示。用户名输入错误或密码输入错误时用户不被允许进入APP主界面。
用户登录功能主要在“登录”按钮的点击事件中实现通过findViewById()方法获取到用于输入用户名和密码的EditText对象之后利用equals()方法分别比较输入的用户名和密码与SQLite设定的用户名和密码采用Toast控件来提示登录状态的信息。
关键代码
public class MainActivity extends AppCompatActivity {
EditText edt_id,edt_pwd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edt_id = findViewById(R.id.edt_uid);
edt_pwd =findViewById(R.id.edt_upwd);
Button btn_login = findViewById(R.id.btn_login);
//登录按键
btn_login.setOnClickListener(
public void onClick(View v) {
try {
String userId=edt_id.getText().toString();
String userPwd=edt_pwd.getText().toString();
DBHelper dbuserHelper=new DBHelper(getApplicationContext());
User user = dbuserHelper.userlogin(userId,userPwd);
//登录成功跳转对应类型界面
if(user!=null) {
Toast.makeText(getApplicationContext(), user.getUserId() + "登录成功", Toast.LENGTH_SHORT).show();
Intent intent;
ArrayList<User> list = new ArrayList<>();
list.add(user);
intent = new Intent(getApplicationContext(), UserCenterActivity.class);
intent.putParcelableArrayListExtra("LoginUser", list);
startActivity(intent);
}else{
Toast.makeText(getApplicationContext(),"登录失败密码错误或账号不存在",Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(),"数据库异常",Toast.LENGTH_SHORT).show();
}
}
});
//注册按键
Button btn_register=findViewById(R.id.btn_register);
btn_register.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(getApplicationContext(),RegisterActivity.class);
startActivity(intent);
}
});
3.3.2用户注册页面activity_register.xml
界面设计
用户注册页面采用LinearLayout作为根布局控件并设置其方向为垂直布局采用TextView显示 “用户登录”字样分别利用LinearLayout水平布局采用两个TextView分别设置账号和密码采用两个EditText用于提示设置其hint属性来提示用户输入具体内容采用Button设置“注册”按钮。用户注册页面显示效果如图3-3-2所示。
图3-3-2
功能描述
用户注册模块主要实现用户注册账号功能当用户输入的用户名和密码时点击注册按钮系统会自动保存账号和密码如图3-3-2(a)所示当前界面会提示后转跳到用户登录界面如图3-3-2(b)所示且用户登录进入APP的主界面如图3-3-2©所示
用户注册功能主要在“注册”按钮的点击事件中实现通过findViewById()方法获取到用于输入用户名和密码的EditText对象之后利用getApplicationContext()方法分别比创建和保存的用户名和密码采用Toast控件来提示登录状态的信息。
关键代码
public class RegisterActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
final EditText edt_rid =findViewById(R.id.edt_rid);
final EditText edt_rpwd =findViewById(R.id.edt_rpwd);
Button btn_registerf=findViewById(R.id.btn_registeruser);
btn_registerf.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
User user = new User();
user.setUserId(edt_rid.getText().toString());
user.setUserPwd(edt_rpwd.getText().toString());
DBHelper dbUserHelper = new DBHelper(getApplicationContext());
if (dbUserHelper.registerUser(user) > 0) {
Toast.makeText(getApplicationContext(), "注册成功", Toast.LENGTH_SHORT).show();
Intent intent;
ArrayList<User> list = new ArrayList<>();
list.add(user);
intent = new Intent(getApplicationContext(), MainActivity.class);
startActivity(intent);
}else{
Toast.makeText(getApplicationContext(), "您已经注册过此账户请返回登录", Toast.LENGTH_SHORT).show();
}
}
});
3.3.3用户个人中心页面activity_user_center.xml
界面设计
在个人中心页面当中将会显示具体的用户名。同时 有四个按钮入口分别是收支管理查看收支退出登录和收支统计个人中心页面采用LinearLayout作为根布局控件并设置其方向为垂直布局分别使用LinearLayout作为“收支管理查看收支退出登录和收支统计”按钮的布局并设置其方向为水平布局内部采用ImageView 和TextView显示“按钮”图片和“用户登录”字样可以点击“收支管理查看收支退出登录和收支统计”进入不同的功能界面用户个人中心页面显示效果如图3-3-3所示。
功能描述
个人中心页面模块主要实现用户“收支管理”“查看收支”“退出登录”和“收支统计”功能的切换当点击“收支管理”按钮系统会自动转跳“收支管理”界面如图3-3-3(a)所示当点击“查看收支”按钮系统会自动转跳“查看收支”界面如图3-3-3(b)所示当点击“收支统计”按钮系统会自动转跳“收支统计”界面如图3-3-3©所示 当点击“退出登录”按钮系统会自动转跳“退出登录”界面会提示是否退出程序如图3-3-3(d)所示。
个人中心页面功能主要在“收支管理查看收支退出登录和收支统计”4个按钮的点击事件中实现通过findViewById()方法获取到需要转跳的二级页面之后利用采用Intent方法来转跳到下一二级界面。
关键代码
public class UserCenterActivity extends AppCompatActivity {
ArrayList<User> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_center);
Intent intent=getIntent();
list =intent.getParcelableArrayListExtra("LoginUser");
User user=list.get(0);
final String username=user.getUserId();
TextView tv_welcome=findViewById(R.id.tv_welcome);
tv_welcome.setText("欢迎您 ,用户"+username);
ImageView btn_recordmanage =findViewById(R.id.btn_recordmanage);
btn_recordmanage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent1=new Intent(getApplicationContext(), ManageActivity.class);
startActivity(intent1);
}
});
ImageView btn_searchrecord=findViewById(R.id.btn_searchrecord);
btn_searchrecord.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent2=new Intent(getApplicationContext(),SearchRecordActivity.class);
startActivity(intent2);
}
});
ImageView btn_calcmoney=findViewById(R.id.btn_calcmoney);
btn_calcmoney.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent3=new Intent(getApplicationContext(),SearchRecordActivity.class);
startActivity(intent3);
}
});
ImageView btn_exit=findViewById(R.id.btn_exit);
btn_exit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog dialog = new AlertDialog.Builder(UserCenterActivity.this).setTitle("退出操作")
.setMessage("确定退出不继续玩玩")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent=new Intent(getApplicationContext(), MainActivity.class);
startActivity(intent);
}
}
}
);
3.3.4用户搜索记录页面activity_search_record.xml
界面设计
用户可以通过选择年份月份和筛选类型点击搜索来查询该年该月份的各个收入和支出的详情同时在该时间点和该筛选类型下点击计算可以对总金额进行计算用户搜索记录页面采用LinearLayout作为根布局控件并设置其方向为垂直布局多次使用LinearLayout作为内部的布局并设置其方向为水平布局和垂直布局内部多次采用ImageView 、Spinner和TextView显示“按钮”图片和“用户登录”字样可以点击Butter按钮进入不同的功能计算用户搜索记录页面显示效果如图3-3-4所示。
功能描述
用户搜索记录模块主要实现用户记录的账单和查询功能当用户选择“日期”如图3-3-4(a)所示和“类型”时如图3-3-4(b)所示点击搜索按钮系统会显示用户保存的账单如图3-3-4©所示如果账单数量>=2时也可以进行“总金额”的计算如图3-3-4(d)所示
用户搜索记录页面功能主要在“日期”“类型”的复选框搜索和计算个按钮的点击事件中实现通过spinner控件实现时间和类型的选择通过findViewById()方法获取到数据库中需要账单内容用到众多SQL语句之后将所需要的数据显示到用户搜索记录界面
关键代码
public class SearchRecordActivity extends AppCompatActivity {
private String[ ] date_data= {"", "202101", "202102", "202103", "202104", "202105","202106","202107","202108","202109","202110","202111","202112"};
private String[] type_data = {"", "收入", "支出"};
Spinner spin_date, spin_type;
ListView listView;
TextView tv_show;
float sum=0;
private void selectSumMoney() {
String sql;
if (TextUtils.isEmpty(selectDate) && TextUtils.isEmpty(selectType)) {
sql = "select * from " + TABLE_NAME;
} else if (!TextUtils.isEmpty(selectDate) && TextUtils.isEmpty(selectType)) {
sql = "select * from " + TABLE_NAME + " where date='" + selectDate + "'";
} else if (TextUtils.isEmpty(selectDate) && !TextUtils.isEmpty(selectType)) {//如果没有查询时间有查询类型
sql = "select * from " + TABLE_NAME + " where type='" + selectType+"'";
} else {//否则查询条件都不为空查询指定内容
sql ="select * from " + TABLE_NAME + " where date='" + selectDate + "' and type='" + selectType+"'";
}
Cursor cursor = sqLiteDatabase.rawQuery(sql, null);
while (cursor.moveToNext()) {
float money = cursor.getFloat(cursor.getColumnIndex(COLUMN_MONEY));
sum=sum+money;
//list.add(map);
}
String money2=String.valueOf(sum);
tv_show.setText(money2);
sum=0;
}
private void initClick() {
//时间事件
spin_date.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
selectDate = date_data[position];
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
spin_type.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
selectType = type_data[position];
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
findViewById(R.id.btn_search).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
selectData();
}
});
3.3.5收支管理页面activity_manage.xml
界面设计
对于收支管理页面来说用户可以对自己的日常开销进行收支管理同时也可以进行添加、删除和修改等操作。收支管理页面采用LinearLayout作为根布局控件并设置其方向为垂直布局多次使用LinearLayout嵌套作为内部的布局并设置其方向为水平布局和垂直布局内部多次采用ImageView 和TextView显示图片和“您选择的序号”、“修改的内容”字样可以点击Butter“添加”、“修改”、“删除”按钮进入不同的功能的实现用户搜索记录页面显示效果如图3-3-5所示。
功能描述
收支管理模块主要实现添加、修改用户记录的账单和删除功能当用户选择“账单”序号就可以进行收支管理当点击“添加”按钮如图3-3-5a所示点击“修改”按钮如图3-3-5(b)所示点击删除按钮系统会提示用户删除账单如图3-3-5©所示。
收支管理模块功能主要在日期、类型、金额和说明实现简单的键值对的传值对SQl内部的数据进行修改并保存添加、修改和删除按钮的点击事件中实现通过Toast控件实现提示通过findViewById()方法获取到数据库中需要账单内容用到众多sql语句之后将所需要的更改数据显示到用户收支管理界面
关键代码
public class ManageActivity extends AppCompatActivity {
private SQLiteDatabase sqLiteDatabase = null;
private int selectId = -1;
EditText edt_date, edt_type, edt_money, edt_state;
TextView tv_test;
private static final String CREATE_TABLE = "create table if not exists " + TABLE_NAME
+ "(" + COLUMN_ID + " integer primary key autoincrement," + COLUMN_DATE + " text," + COLUMN_TYPE
+ " text," + COLUMN_MONEY + " float," + COLUMN_STATE + " text)";
private void selectData() {
String sql = "select * from " + TABLE_NAME ;
Cursor cursor = sqLiteDatabase.rawQuery(sql, null);
ArrayList<Map<String, String>> list = new ArrayList<Map<String, String>>();
while (cursor.moveToNext()) {
int id = cursor.getInt(cursor.getColumnIndex(COLUMN_ID));
String date = cursor.getString(cursor.getColumnIndex(COLUMN_DATE));
String type = cursor.getString(cursor.getColumnIndex(COLUMN_TYPE));
float money = cursor.getFloat(cursor.getColumnIndex(COLUMN_MONEY));
String state = cursor.getString(cursor.getColumnIndex(COLUMN_STATE));
Map<String, String> map = new HashMap<String, String>();
map.put("id", String.valueOf(id));
map.put("date", date);
map.put("type", type);
map.put("money", String.valueOf(money));
map.put("state", state);
list.add(map);
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_manage);
try {
sqLiteDatabase = openOrCreateDatabase(DATABASE_NAME, MODE_PRIVATE, null);
sqLiteDatabase.execSQL(CREATE_TABLE);
selectData();
} catch (SQLException e) {
Toast.makeText(this, "数据库异常!", Toast.LENGTH_LONG).show();
e.printStackTrace();
}
Button btn_add = findViewById(R.id.btn_add);
btn_add.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (edt_date.getText().toString().equals("") | edt_type.getText().toString().equals("") | edt_money.getText().toString().equals("") | edt_state.getText().toString().equals("")) {
Toast.makeText(ManageActivity.this, "数据不能为空!", Toast.LENGTH_LONG).show();
return;
}
Button btn_delete = findViewById(R.id.btn_delete);
btn_delete.setOnClickListener(new View.OnClickListener()
}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
}).create();
dialog.show();
}
});
四、总结
一学期的android学习基本掌握了Android应用程序开发的一般流程。对常用控件基本掌握其用法对其事件的监听方法也基本掌握。学习Android不仅是对前沿开发技术的了解也是对编程知识的一次提升。
通过学习Android的控件、布局、Activity、Service等一系列基础知识对整个Android的开发有了大致的了解。例如: 要的布局(或者控件) ,在学习界面中我发现Android为我们提供了很好的类似反射机制通过Layout文件夹下的配置文件可以快速的形成界面在配置文件可以设置属性或者样式都是很快捷方便。对比较特殊的界面也可以通过处理嵌入到指定的界面同样你可以通过java代码直接创建View进行添加不过这种方式比较复杂。对一些点击、选中、按键等处理的事件界面之间的 跳转Intent管理通过Bundle对数据在界面之间进行传输。
在手机交互式通信服务中学习了Android手机之间进行短信发送、广播、对广播的监听、服务等在Service类中没有conte_t可以通过Handler来每秒反复运行自动送出系统广播信息同时在这里我们也知道可以设计一个常用的变量类设计一个当前的CurrentActivity这个变量进行控制进行处理。 在Android编程过程中巩固熟悉了Java的编程。由于Android应用程序的开发离不开Java的支持所以基础的Java知识是必须的。Android系统是基于Linu_的手机操作系统平台要深入系统的学习Android不仅仅是有Java和Android应用开发必须要具备Linu_C/C++高级编程才能深入的涉及Android Framework和Android内核开发。成为Android开发的高素质人才。所以在后续对Android的学习中可能会看一些较底层的书籍。
对于Android应用程序的高级编程缺陷很多是这次学习中的不足。要想开发一些好的应用程序还需要更多的知识支持。在做学习最后的项目时遇到了很多平时没有遇到或者没有特别关注的问题如常见的Activity忘记注册对SD卡存取需要权限在写SQL语句时细微的错误就可能导致程序运行错误。这些问题只有自己在实际开发中才能体会到并且解决并且在解决后可以长时间的记住。
通过Android的学习又掌握了一项新的前沿的开发技能也有了更多的发展方向这在以后的找工作的过程中无疑为我们增加了砝码也可以成为我的一项兴趣爱好可以根据我自己的需要设计一些小的程序。
总之在这次学习中我获得了很多东西提高了自己的编程技巧和编程方法并且认识了Android应用程序的开发以及加深了对Java的认识。