该项目是大二上学期时的android实训项目,要求如下:
android同学录项目开发
1)同学录基本要素,人的基本信息:,人物照片,姓名,性别,联系电话,住址,qq,email。
2)可以通过同学录直接拨打电话和发短信。
3)关键的照片显示。实时的拍照,可以新生成一个同学录的记录,然后填写相关信息。
一、项目展示
二、Android功能代码
bean层PersonInfo.java
package com.example.classmatesmemories_xxd_35_20191213.bean;
public class PersonInfo {
private long id_xxd;
private String name_xxd;
private String gender_xxd;
private String address_xxd;
private String phone_xxd;
private String QQ_xxd;
private String email_xxd;
public PersonInfo(Long id_xxd,String name_xxd, String gender_xxd, String address_xxd, String phone_xxd, String QQ_xxd, String email_xxd) {
this.id_xxd = id_xxd;
this.name_xxd = name_xxd;
this.gender_xxd = gender_xxd;
this.address_xxd = address_xxd;
this.phone_xxd = phone_xxd;
this.QQ_xxd = QQ_xxd;
this.email_xxd = email_xxd;
}
public PersonInfo(String name_xxd, String gender_xxd, String address_xxd, String phone_xxd, String QQ_xxd, String email_xxd) {
this.name_xxd = name_xxd;
this.gender_xxd = gender_xxd;
this.address_xxd = address_xxd;
this.phone_xxd = phone_xxd;
this.QQ_xxd = QQ_xxd;
this.email_xxd = email_xxd;
}
public long getId_xxd() {
return id_xxd;
}
public void setId_xxd(long id_xxd) {
this.id_xxd = id_xxd;
}
public String getName_xxd() {
return name_xxd;
}
public void setName_xxd(String name_xxd) {
this.name_xxd = name_xxd;
}
public String getGender_xxd() {
return gender_xxd;
}
public void setGender_xxd(String gender_xxd) {
this.gender_xxd = gender_xxd;
}
public String getAddress_xxd() {
return address_xxd;
}
public void setAddress_xxd(String address_xxd) {
this.address_xxd = address_xxd;
}
public String getPhone_xxd() {
return phone_xxd;
}
public void setPhone_xxd(String phone_xxd) {
this.phone_xxd = phone_xxd;
}
public String getQQ_xxd() {
return QQ_xxd;
}
public void setQQ_xxd(String QQ_xxd) {
this.QQ_xxd = QQ_xxd;
}
public String getEmail_xxd() {
return email_xxd;
}
public void setEmail_xxd(String email_xxd) {
this.email_xxd = email_xxd;
}
public String toString(){return "[序号: " + id_xxd + ", 姓名: " + name_xxd + ", 性别: " + gender_xxd + ", qq: " + QQ_xxd + ", 手机号码: " + phone_xxd + ", 电子邮件: " + email_xxd + ", 地址: " + address_xxd + "]";}
}
dao层PersonDao.java
package com.example.classmatesmemories_xxd_35_20191213.dao;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import com.example.classmatesmemories_xxd_35_20191213.bean.PersonInfo;
public class PersonDao {
private MyHelper helper;
public PersonDao(Context context){
helper = new MyHelper(context);
}
public int delete(long id) {
SQLiteDatabase db = helper.getWritableDatabase();
// 按条件删除指定表中的数据, 返回受影响的行数
int count = db.delete("T_pople_xxd", "id_xxd=?", new String[] { id + "" });
db.close();
return count;
}
public int update(PersonInfo p){
SQLiteDatabase db = helper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name_xxd",p.getName_xxd());
values.put("gender_xxd",p.getGender_xxd());
values.put("phone_xxd",p.getPhone_xxd());
values.put("address_xxd",p.getAddress_xxd());
values.put("qq_xxd",p.getQQ_xxd());
values.put("email_xxd",p.getEmail_xxd());
int count = db.update("T_pople_xxd",values,"id_xxd=?",new String[]{p.getId_xxd()+""});
db.close();
return count;
}
}
dao层MyHelper.java
package com.example.classmatesmemories_xxd_35_20191213.dao;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class MyHelper extends SQLiteOpenHelper {
public MyHelper( Context context) {
super(context,"DB_memories_xxd.db",null,1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE T_pople_xxd(id_xxd INTEGER PRIMARY KEY AUTOINCREMENT,name_xxd VARCHAR(20),gender_xxd VARCHAR(6),phone_xxd VARCHAR(20),address_xxd VARCHAR(200),qq_xxd VARCHAR(20),email_xxd VARCHAR(100))");
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
MainActivity.java
package com.example.classmatesmemories_xxd_35_20191213;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
Button open;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
open = findViewById(R.id.btn_open);
open.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent it = new Intent(MainActivity.this,Main2Activity.class);
startActivity(it);
}
});
}
}
Main2Activity.java
package com.example.classmatesmemories_xxd_35_20191213;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class Main2Activity extends AppCompatActivity {
TextView exit,modify,add,glance;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
exit = findViewById(R.id.tv_exit);
modify = findViewById(R.id.tv_modify);
add = findViewById(R.id.tv_add);
glance = findViewById(R.id.tv_query);
exit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent it = new Intent(Main2Activity.this,MainActivity.class);
startActivity(it);
}
});
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent it = new Intent(Main2Activity.this,add.class);
startActivity(it);
}
});
modify.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent it = new Intent(Main2Activity.this,Modify.class);
startActivity(it);
}
});
glance.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent it = new Intent(Main2Activity.this,queryAll.class);
startActivity(it);
}
});
}
}
add.java
package com.example.classmatesmemories_xxd_35_20191213;
import android.Manifest;
import android.content.ContentValues;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import com.example.classmatesmemories_xxd_35_20191213.dao.MyHelper;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class add extends AppCompatActivity implements View.OnClickListener{
EditText t_name,t_address,t_phone,t_qq,t_email,t_gender;
Button submit;
ImageView photo_tx,exit;
Bitmap image;
//打开相册的请求码
private static final int MY_ADD_CASE_CALL_PHONE2 = 7;
private AlertDialog.Builder builder;
private AlertDialog dialog;
private LayoutInflater inflater;
private View layout;
private TextView takePhotoTV;
private TextView choosePhontoTV;
private TextView cancelTV;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add);
photo_tx = findViewById(R.id.img_photo);
t_name = findViewById(R.id.et_name);
t_address = findViewById(R.id.et_address);
t_phone = findViewById(R.id.et_call);
t_qq = findViewById(R.id.et_qq);
t_gender = findViewById(R.id.et_gender);
t_email = findViewById(R.id.et_email);
submit = findViewById(R.id.btn_submit);
exit = findViewById(R.id.img_back);
final MyHelper myHelper = new MyHelper(this);
exit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent it = new Intent(add.this,Main2Activity.class);
startActivity(it);
}
});
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SQLiteDatabase db;
ContentValues values;
db = myHelper.getWritableDatabase();
values = new ContentValues();
values.put("name_xxd",t_name.getText().toString().trim());
values.put("gender_xxd",t_gender.getText().toString().trim());
values.put("phone_xxd",t_phone.getText().toString().trim());
values.put("address_xxd",t_address.getText().toString().trim());
values.put("qq_xxd",t_qq.getText().toString().trim());
values.put("email_xxd",t_email.getText().toString().trim());
db.insert("T_pople_xxd",null,values);
Toast.makeText(add.this,"填写完成",Toast.LENGTH_LONG).show();
db.close();
}
});
}
public void updatephoto(View view) {
viewInit();
}
private void viewInit() {
builder = new AlertDialog.Builder(this);//创建对话框
inflater =getLayoutInflater();
layout = inflater.inflate(R.layout.choicephoto,null);//获取自定义布局
builder.setView(layout);//设置对话框的布局
dialog = builder.create();//生成最终的对话框
dialog.show();//显示对话框
takePhotoTV = layout.findViewById(R.id.photograph);
choosePhontoTV = layout.findViewById(R.id.photo);
cancelTV = layout.findViewById(R.id.cancel);
//设置监听
takePhotoTV.setOnClickListener(this);
choosePhontoTV.setOnClickListener(this);
cancelTV.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.photograph:
//动态权限:点击相机获取相机权限
DongTaiShare();
getPicFromCamera();
break;
case R.id.photo:
//点击了相册
//6.0之后动态申请权限 SD卡写入权限
if (ContextCompat.checkSelfPermission(add.this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(add.this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
MY_ADD_CASE_CALL_PHONE2);
} else {
//打开相册
getPicFromAlbm();
}
dialog.dismiss();
break;
case R.id.cancel:
dialog.dismiss();//关闭对话框
break;
default:break;
}
}
private void getPicFromAlbm() {
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, 2);
}
private void getPicFromCamera() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 1);
}
private void DongTaiShare() {
if (Build.VERSION.SDK_INT >= 23) {
String[] mPermissionList = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.CALL_PHONE, Manifest.permission.READ_LOGS, Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.SET_DEBUG_APP, Manifest.permission.SYSTEM_ALERT_WINDOW, Manifest.permission.GET_ACCOUNTS, Manifest.permission.WRITE_APN_SETTINGS, Manifest.permission.CAMERA};
ActivityCompat.requestPermissions(this, mPermissionList, 123);
}
}
protected void onActivityResult(int requestCode,int resultCode,Intent intent){
switch (requestCode){
//调用相机后返回
case 1:
if (resultCode == RESULT_OK){
final Bitmap photo = intent.getParcelableExtra("data");
photo_tx.setImageBitmap(photo);
}
break;
case 2:
if(resultCode ==RESULT_OK){
Uri uri = intent.getData();
cropPhone(uri);//裁剪图片
}
break;
case 3:
Bundle bundle = intent.getExtras();
if(bundle != null){
//在这里获得了剪裁后的Bitmap对象,可以用于上传
Bitmap image = bundle.getParcelable("data");
//设置到ImageView上
photo_tx.setImageBitmap(image);
//也可以进行一些保存、压缩等操作后上传
String path = saveImage("userHeader",image);
File file = new File(path);
// 这里可以做上传文件的操作
}
break;
}
}
//裁剪图片
private void cropPhone(Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
intent.setDataAndType(uri,"image/*");
intent.putExtra("crop","true");
intent.putExtra("aspectX",1);
intent.putExtra("aspectY",1);
intent.putExtra("outputX",300);
intent.putExtra("outputY",300);
intent.putExtra("return-data",true);
startActivityForResult(intent,3);
}
//保存图片到本地
public String saveImage(String name, Bitmap bmp){
File appDir = new File(Environment.getExternalStorageDirectory().getPath());
if(!appDir.exists()){
appDir.mkdir();
}
String fileName = name + ".jpg";
File file= new File(appDir,fileName);
try {
FileOutputStream fos = new FileOutputStream(file);
bmp.compress(Bitmap.CompressFormat.JPEG,100,fos);
fos.flush();
fos.close();
return file.getAbsolutePath();
}catch (IOException e){
e.printStackTrace();
}
return null;
}
}
Modify.java
package com.example.classmatesmemories_xxd_35_20191213;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.example.classmatesmemories_xxd_35_20191213.bean.PersonInfo;
import com.example.classmatesmemories_xxd_35_20191213.dao.MyHelper;
import com.example.classmatesmemories_xxd_35_20191213.dao.PersonDao;
import java.util.ArrayList;
import java.util.List;
public class Modify extends AppCompatActivity {
private int[] icons = {R.drawable.tx1};
List<PersonInfo> list;
private ListView listView;
private MyHelper myHelper;
private PersonDao dao;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_modify);
ImageView back = findViewById(R.id.img_back);
dao = new PersonDao(Modify.this);
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent it = new Intent(Modify.this,Main2Activity.class);
startActivity(it);
}
});
int j =test(Modify.this);
if(j == 1){
listView = (ListView) findViewById(R.id.lv_modify);
MyBaseAdapter adapter = new MyBaseAdapter();
listView.setAdapter(adapter);
}
}
private int test(Context context) {
list = new ArrayList<PersonInfo>();
int i=0;
int j=1;
myHelper = new MyHelper(context);
SQLiteDatabase db;
db = myHelper.getReadableDatabase();
Cursor cursor = db.query("T_pople_xxd",null,null,null,null,null,null);
if (cursor.getCount()==0){
Toast.makeText(this,"No data",Toast.LENGTH_SHORT).show();
j = 0;
}else{
cursor.moveToFirst();
while (cursor.moveToNext()){
long id =cursor.getLong(cursor.getColumnIndex("id_xxd"));
String name = cursor.getString(1);
String gender = cursor.getString(2);
String phone =cursor.getString(3);
String address =cursor.getString(4);
String qq =cursor.getString(5);
String email=cursor.getString(6);
list.add(new PersonInfo(id,name,gender,phone,address,qq,email));
}
cursor.close();
db.close();
}
return j;
}
public class MyBaseAdapter extends BaseAdapter {
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View view =convertView != null ? convertView : View.inflate(getApplicationContext(),R.layout.item_modify,null);
final PersonInfo p = list.get(position);
TextView id = view.findViewById(R.id.tv_numberid);
id.setText(p.getId_xxd()+"");
TextView name =view.findViewById(R.id.vet_name);
name.setText(p.getName_xxd());
final EditText gender = view.findViewById(R.id.vet_gender);
gender.setText(p.getGender_xxd());
final EditText phone = view.findViewById(R.id.vet_phone);
phone.setText(p.getAddress_xxd());
final EditText qq = view.findViewById(R.id.vet_qq);
qq.setText(p.getQQ_xxd());
final EditText email = view.findViewById(R.id.vet_email);
email.setText(p.getEmail_xxd());
final EditText address = view.findViewById(R.id.vet_address);
address.setText(p.getPhone_xxd());
Button delete = view.findViewById(R.id.btn_delete);
delete.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//删除数据之前首先弹出一个对话框
DialogInterface.OnClickListener listener =
new DialogInterface.
OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
list.remove(p); // 从集合中删除
dao.delete(p.getId_xxd()); // 从数据库中删除
notifyDataSetChanged();// 刷新界面
}
};
AlertDialog.Builder builder = new AlertDialog.Builder(Modify.this); // 创建对话框
builder.setTitle("确定要删除吗?"); // 设置标题
// 设置确定按钮的文本以及监听器
builder.setPositiveButton("确定", listener);
builder.setNegativeButton("取消", null); // 设置取消按钮
builder.show(); // 显示对话框
}
});
Button update = view.findViewById(R.id.btn_update);
update.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//删除数据之前首先弹出一个对话框
DialogInterface.OnClickListener listener =
new DialogInterface.
OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
list.get(position).setGender_xxd(gender.getText().toString().trim());
list.get(position).setAddress_xxd(address.getText().toString().trim());
list.get(position).setEmail_xxd(email.getText().toString().trim());
list.get(position).setPhone_xxd(phone.getText().toString().trim());
list.get(position).setQQ_xxd(qq.getText().toString().trim());
dao.update(list.get(position));
}
};
AlertDialog.Builder builder = new AlertDialog.Builder(Modify.this); // 创建对话框
builder.setTitle("确定要修改吗?"); // 设置标题
// 设置确定按钮的文本以及监听器
builder.setPositiveButton("确定", listener);
builder.setNegativeButton("取消", null); // 设置取消按钮
builder.show(); // 显示对话框
}
});
return view;
}
}
}
Query.java
package com.example.classmatesmemories_xxd_35_20191213;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.example.classmatesmemories_xxd_35_20191213.bean.PersonInfo;
import com.example.classmatesmemories_xxd_35_20191213.dao.MyHelper;
import java.util.ArrayList;
import java.util.List;
public class queryAll extends AppCompatActivity {
private int[] icons = {R.drawable.tx1,R.drawable.message,R.drawable.call};
List<PersonInfo> list;
private ListView listView;
private MyHelper myHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_query_all);
ImageView back = findViewById(R.id.img_back);
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent it = new Intent(queryAll.this,Main2Activity.class);
startActivity(it);
}
});
int j =test(queryAll.this);
if(j == 1){
listView = (ListView) findViewById(R.id.lv);
MyBaseAdapter adapter = new MyBaseAdapter();
listView.setAdapter(adapter);
}
}
private int test(Context context){
list = new ArrayList<PersonInfo>();
int i=0;
int j=1;
myHelper = new MyHelper(context);
SQLiteDatabase db;
db = myHelper.getReadableDatabase();
Cursor cursor = db.query("T_pople_xxd",null,null,null,null,null,null);
if (cursor.getCount() == 0){
Toast.makeText(this,"no data",Toast.LENGTH_LONG).show();
j=0;
}else{
cursor.moveToFirst();
while (cursor.moveToNext()){
long id =cursor.getLong(cursor.getColumnIndex("id_xxd"));
String name = cursor.getString(1);
String gender = cursor.getString(2);
String phone =cursor.getString(3);
String address =cursor.getString(4);
String qq =cursor.getString(5);
String email=cursor.getString(6);
list.add(new PersonInfo(id,name,gender,phone,address,qq,email));
}
cursor.close();
db.close();
}
return j;
}
public class MyBaseAdapter extends BaseAdapter{
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View view =convertView != null ? convertView : View.inflate(getApplicationContext(),R.layout.item_temper,null);
TextView id = view.findViewById(R.id.tv_numberid);
id.setText(list.get(position).getId_xxd()+"");
TextView name = view.findViewById(R.id.vet_name);
name.setText(list.get(position).getName_xxd());
TextView gender =view.findViewById(R.id.vet_gender);
gender.setText(list.get(position).getGender_xxd());
TextView number =view.findViewById(R.id.vet_phone);
number.setText(list.get(position).getPhone_xxd());
TextView qq = view.findViewById(R.id.vet_qq);
qq.setText(list.get(position).getQQ_xxd());
TextView email = view.findViewById(R.id.vet_email);
email.setText(list.get(position).getEmail_xxd());
TextView address = view.findViewById(R.id.vet_address);
address.setText(list.get(position).getAddress_xxd());
ImageView call = view.findViewById(R.id.img_call);
call.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String tel = list.get(position).getAddress_xxd(); //获取电话号码
Intent intent = new Intent(Intent.ACTION_DIAL);//设置动作为打电话
intent.setData(Uri.parse("tel:" + tel));//设置打电话的号码
startActivity(intent);
}
});
ImageView message = view.findViewById(R.id.img_message);
message.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String tels = list.get(position).getAddress_xxd(); //获取电话
Intent intent = new Intent(); //创建 Intent 实例
intent.setAction(Intent.ACTION_SENDTO); //设置动作为发送短信
intent.setData(Uri.parse("smsto:"+tels)); //设置发送的号码
startActivity(intent); //启动 Activity
}
});
return view;
}
}
}
github项目完整代码:https://github.com/xxd6772123/classmatesmemories
三、总结
android同学录实训项目实现了增删改查的功能,UI布局较为简单,功能实现实训要求。在这次android实训中,我受益匪浅。记得刚看到这道实训题时心中还是犹豫不决地认为这次项目实训会不会很难上手虽然在之前的课堂上老师已经把一些基本功能的使用教授给我们了,但感觉要自己独立完成一个项目心中还是有些压力,大概是之前只会看老师做而自己很少动手的缘故了,不过等到自己真正的开始做起项目来,会感到越做越有动力,甚至想要快点把这个项目给弄完,之前的犹豫和害怕也不再存在,一心只想快点看到自己做出来的成功,虽然在做的过程遇到了很多瓶颈但也通过了查阅资料得到了解决,在这次android实训中,自己最后完成的成果虽然没有达到十全十美,但也符合自己对本学期该门课程的要求,也希望在之后的作业中更加严格的要求自己。