安卓开发课程设计报告

合集下载

Android课程设计报告模板

Android课程设计报告模板

android移动开发课程设计报告学生姓名:X X 学号:XXXXXXX 专业:计算机科学与技术班级:XXXXXXX 设计题目:口袋微博学年学期:2015 年秋季学期指导教师:X X目录(示例)一、设计题目 (1)二、设计目的 (1)三、设计原理及方案 (1)1使用的软件工具和环境 (1)2需求分析与概要设计 (1)3数据库设计(若有) (2)4详细设计和关键问题 (3)四、实现效果 (8)五、设计体会 (69)参考文献 (71)一、设计题目Android社交分享平台——口袋微博设计目的二、设计原理及方案首先要实现以下这些功能:Android端登录和注册模块的实现Android端个人中心模块的实现Android端快速发布模块的实现Android端查看联系人模块的实现Android端管理日志模块的实现Android端管理相册模块的实现1使用的软件工具和环境1)PC计算机2)JDK安装包3)Eclipse安装包4)Android SDK安装包5)ADT插件2需求分析与概要设计(详细描述系统的功能需求)Android端登录和注册模块的实现Android端个人中心模块的实现Android端快速发布模块的实现Android端查看联系人模块的实现Android端管理日志模块的实现Android端管理相册模块的实现(详细描述系统结构;例如总体架构设计、流程图、用例图等,并分别描述)说明:这里的用例图和类图的对应关系可以在下面的E-R图上找到,这里我就略了一下。

Android端总体架Web端的原理示意图数据库设计(若有的必须给出,没有的给出其他重要设计过程)(给出ER关系图及数据库表)用powerdesigner设计对应关系,并生成表,E-R图3详细设计和关键问题(分功能模块描述设计细节,例如详细功能图、类图和关键流程图等。

遇到的关键Android 问题是如何解决的)相册列表:功能图查看修改权限二、快速发布:三、实现效果(包括系统描述和程序运行界面的截图)1.口袋微博用户登录界面2.口袋微博个人中心——快速发布功能界面3.口袋微博个人中心——我的好友功能界面4.口袋微博个人中心——最近访客功能界面5.口袋微博个人中心——日志列表功能界面6.口袋微博个人中心——相册列表功能界面7.口袋微博——搜索好友界面以下是部分重要代码由于代码太多无法容纳(1)LoginActivity.java登录界面package wyf.wpf;import static wyf.wpf.ConstantUtil.SERVER_ADDRESS; import static wyf.wpf.ConstantUtil.SERVER_PORT; import android.app.Activity;import android.app.ProgressDialog;import android.content.Intent;import android.content.SharedPreferences;import android.os.Bundle;import android.os.Looper;import android.view.View;import android.widget.Button;import android.widget.CheckBox;import android.widget.EditText;import android.widget.ImageButton;import android.widget.Toast;public class LoginActivity extends Activity {MyConnector mc = null;ProgressDialog pd;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.login);checkIfRemember();Button btnLogin = (Button)findViewById(R.id.btnLogin);btnLogin.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {pd = ProgressDialog.show(LoginActivity.this, "请稍候", "正在连接服务器...", true, true);login();}});Button btnReg = (Button)findViewById(R.id.btnReg);btnReg.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(LoginActivity.this, wyf.wpf.RegActivity.class);startActivity(intent);finish();}});ImageButton ibExit = (ImageButton)findViewById(R.id.ibExit);ibExit.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {android.os.Process.killProcess(android.os.Process.myPid()); //结束进程,退出程序}});}//方法:连接服务器进行登录public void login(){new Thread(){public void run(){Looper.prepare();try{if(mc == null){mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);}EditText etUid = (EditText)findViewById(R.id.etUid); //获得帐号EditTextEditText etPwd = (EditText)findViewById(R.id.etPwd); //获得密码EditTextString uid = etUid.getEditableText().toString().trim(); //获得输入的帐号String pwd = etPwd.getEditableText().toString().trim(); //获得输入的密码if(uid.equals("") || pwd.equals("")){ //判断输入是否为空Toast.makeText(LoginActivity.this, "请输入帐号或密码!", Toast.LENGTH_SHORT).show();//输出提示消息return;}String msg = "<#LOGIN#>"+uid+"|"+pwd; //组织要返回的字符串mc.dout.writeUTF(msg); //发出消息String receivedMsg = mc.din.readUTF(); //读取服务器发来的消息pd.dismiss();if(receivedMsg.startsWith("<#LOGIN_SUCCESS#>")){ //收到的消息为登录成功消息receivedMsg = receivedMsg.substring(17);String [] sa = receivedMsg.split("\\|");CheckBox cb = (CheckBox)findViewById(R.id.cbRemember); //获得CheckBox 对象if(cb.isChecked()){rememberMe(uid,pwd);}//转到功能面板Intent intent = new Intent(LoginActivity.this,FunctionTabActivity.class);intent.putExtra("uno", sa[0]);startActivity(intent); //启动功能Activityfinish();}else if(msg.startsWith("<#LOGIN_FAIL#>")){ //收到的消息为登录失败Toast.makeText(LoginActivity.this, msg.substring(14), Toast.LENGTH_LONG).show();Looper.loop();Looper.myLooper().quit();}}catch(Exception e){e.printStackTrace();}}}.start();}//方法:将用户的id和密码存入Preferencespublic void rememberMe(String uid,String pwd){SharedPreferences sp = getPreferences(MODE_PRIV ATE); //获得PreferencesSharedPreferences.Editor editor = sp.edit(); //获得Editoreditor.putString("uid", uid); //将用户名存入Preferenceseditor.putString("pwd", pwd); //将密码存入Preferencesmit();}//方法:从Preferences中读取用户名和密码public void checkIfRemember(){SharedPreferences sp = getPreferences(MODE_PRIVA TE); //获得PreferencesString uid = sp.getString("uid", null);String pwd = sp.getString("pwd", null);if(uid != null && pwd!= null){EditText etUid = (EditText)findViewById(R.id.etUid);EditText etPwd = (EditText)findViewById(R.id.etPwd);CheckBox cbRemember = (CheckBox)findViewById(R.id.cbRemember);etUid.setText(uid);etPwd.setText(pwd);cbRemember.setChecked(true);}}@Overrideprotected void onDestroy() {if(mc != null){mc.sayBye();}super.onDestroy();}}(2)DirayActivity.javapackage wyf.wpf;import static wyf.wpf.ConstantUtil.SERVER_ADDRESS; import static wyf.wpf.ConstantUtil.SERVER_PORT;import java.util.ArrayList;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.Gravity;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.BaseAdapter;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.TextView;import android.widget.AdapterView.OnItemClickListener;public class DiaryActivity extends Activity{ArrayList<String []> diaryList = new ArrayList<String []>();MyConnector mc = null;String uno = null;String visitor = null;BaseAdapter ba = new BaseAdapter() {@Overridepublic View getView(int position, View convertView, ViewGroup parent) {LinearLayout ll = new LinearLayout(DiaryActivity.this);TextView tvTitle = new TextView(DiaryActivity.this);ll.setOrientation(LinearLayout.VERTICAL);tvTitle.setTextAppearance(DiaryActivity.this, R.style.title);tvTitle.setGravity(Gravity.LEFT); //设置TextView的对齐方式tvTitle.setText(diaryList.get(position)[1]);TextView tvContent = new TextView(DiaryActivity.this);tvContent.setTextAppearance(DiaryActivity.this, R.style.content); //设置字体大小tvContent.setGravity(Gravity.LEFT); //设置TextView的对齐方式tvContent.setText(diaryList.get(position)[2]); //设置显示的内容ll.addView(tvTitle);ll.addView(tvContent);return ll;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic Object getItem(int arg0) {return null;}@Overridepublic int getCount() {return diaryList.size();}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Intent intent = getIntent();uno = intent.getStringExtra("uno"); //获得主人IDvisitor = intent.getStringExtra("visitor"); //获得访客IDgetDiaryList();setContentView(yout.diary);ListView lvDiary = (ListView)findViewById(R.id.lvDiary); //获得ListView对象lvDiary.setAdapter(ba);lvDiary.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View v, int position,long id) {Intent intent = new Intent(DiaryActivity.this,CommentActivity.class);intent.putExtra("rid", diaryList.get(position)[0]);intent.putExtra("uno", uno);intent.putExtra("visitor", visitor);startActivity(intent);}});}//方法:获取日志列表public void getDiaryList(){new Thread(){public void run(){try{mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);mc.dout.writeUTF("<#GET_DIARY#>"+uno+"|"+"1");int size = mc.din.readInt(); //读取日志的长度for(int i=0;i<size;i++){ //循环接受日志信息String diaryInfo = mc.din.readUTF(); //读取日志信息String [] sa = diaryInfo.split("\\|");diaryList.add(sa); //将日志信息添加到列表中}}catch(Exception e){e.printStackTrace();}}}.start();}@Overrideprotected void onDestroy() {if(mc != null){mc.sayBye();mc = null;}super.onDestroy();}}(3)口袋微博_____个人中心PublishActivity.javapackage wyf.wpf;import static wyf.wpf.ConstantUtil.*;import android.app.Activity;import android.app.AlertDialog;import android.app.ProgressDialog;import android.content.DialogInterface;import android.content.Intent;import android.os.Bundle;import android.os.Looper;import android.view.Gravity;import youtInflater;import android.view.View;import android.view.ViewGroup;import youtParams;import android.widget.AdapterView;import android.widget.BaseAdapter;import android.widget.EditText;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;import android.widget.AdapterView.OnItemClickListener;public class PublishActivity extends Activity{String [] items = { //存放ListView中的选项内容"更新心情","发布日志","拍照上传"};int [] imgIds = {R.drawable.p_status,R.drawable.p_diary,R.drawable.p_shoot};String uno = null; //存放MyConnector mc = null; //MyConnector对象引用ProgressDialog pd = null; //ProgressDialog对象引用View dialog_view = null; //心情BaseAdapter ba = new BaseAdapter() {@Overridepublic View getView(int position, View convertView, ViewGroup parent) {LinearLayout ll = new LinearLayout(PublishActivity.this);ll.setOrientation(LinearLayout.HORIZONTAL);ll.setGravity(Gravity.CENTER);ImageView iv = new ImageView(PublishActivity.this); //创建ImageView对象iv.setAdjustViewBounds(true);iv.setImageResource(imgIds[position]); //设置ImageView的ll.addView(iv); //将ImageView添加到线性布局中TextView tv = new TextView(PublishActivity.this);tv.setPadding(10, 0, 0, 0);tv.setLayoutParams(new youtParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));tv.setTextAppearance(PublishActivity.this, R.style.title);tv.setText(items[position]); //设置TextView显示的内容ll.addView(tv);return ll;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic Object getItem(int position) {return null;}@Overridepublic int getCount() {return items.length;}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Intent intent = getIntent(); //获得启动该Activity的Intentuno = intent.getStringExtra("uno");setContentView(yout.publish); //设置当前屏幕ListView lvPublish = (ListView)findViewById(R.id.lvPublish); //获得ListView对象引用lvPublish.setAdapter(ba);lvPublish.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View v, int position,long id) {switch(position){ //判断点击的是哪一个选项case 0: //更新心情LayoutInflater li = LayoutInflater.from(PublishActivity.this);dialog_view = li.inflate(yout.publish_status, null);new AlertDialog.Builder(PublishActivity.this).setTitle("更新心情").setIcon(R.drawable.p_status).setView(dialog_view).setPositiveButton("发表",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {pd = ProgressDialog.show(PublishActivity.this, "请稍候", "正在更新心情...",true,true);updateStatus();}}).setNegativeButton("取消",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}}).show();break;case 1: //发表日志Intent intent1 = new Intent(PublishActivity.this,PublishDiaryActivity.class);//创建Intentintent1.putExtra("uno", uno); //设置Intent的Extra字段startActivity(intent1);break;case 2: //拍照上传Intent intent2 = new Intent(PublishActivity.this,ShootActivity.class);//创建Intentintent2.putExtra("uno", uno); //设置Intent的Extra字段startActivity(intent2);break;}}});}//方法:连接服务器,更新心情public void updateStatus(){new Thread(){public void run(){Looper.prepare();EditText etStatus = (EditText)dialog_view.findViewById(R.id.etInputStatus);String status = etStatus.getEditableText().toString().trim(); //获得心情内容if(status.equals("")){ //如果输入的心情为空pd.dismiss();Toast.makeText(PublishActivity.this, "请输入更新的心情", Toast.LENGTH_LONG).show();//输出提示Looper.loop();return;}String message = "<#NEW_STA TUS#>"+status+"|"+uno;if(mc == null){mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);}try{mc.dout.writeUTF(message); //向服务器发送更新的心情pd = ProgressDialog.show(PublishActivity.this, "正在连接网络", "请稍候",true);String reply = mc.din.readUTF(); //从服务器返回的回复pd.dismiss();if(reply.equals("<#STA TUS_SUCCESS#>")){ //心情更新成功Toast.makeText(PublishActivity.this, "心情更新成功!", Toast.LENGTH_LONG).show();Looper.loop();}else { //心情更新失败Toast.makeText(PublishActivity.this, "心情更新失败!", Toast.LENGTH_LONG).show();Looper.loop();}}catch(Exception e){e.printStackTrace();}Looper.myLooper().quit();}}.start();}@Overrideprotected void onDestroy() {if(mc != null){mc.sayBye();}super.onDestroy();}}(4)注册处理____RegActivity.javapackage wyf.wpf;import static wyf.wpf.ConstantUtil.SERVER_ADDRESS;import static wyf.wpf.ConstantUtil.SERVER_PORT;import android.app.Activity;import android.app.ProgressDialog;import android.content.Intent;import android.os.Bundle;import android.os.Handler;import android.os.Looper;import android.os.Message;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.LinearLayout;import android.widget.Toast;public class RegActivity extends Activity{MyConnector mc = null; //声明MyConnector对象String uno = ""; //记录用户的IDProgressDialog pd= null; //声明进度对话框Handler myHandler = new Handler(){@Overridepublic void handleMessage(Message msg) {switch(msg.what){case 0:View linearLayout = (LinearLayout)findViewById(R.id.regResult); //获得线性布局linearLayout.setVisibility(View.VISIBLE); //设置可见性EditText etUno = (EditText)findViewById(R.id.etUno);etUno.setText(uno);break;}super.handleMessage(msg);}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.reg); //设置当前屏幕Button btnReg = (Button)findViewById(R.id.btnReg); //获得注册Button按钮对象btnReg.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {pd = ProgressDialog.show(RegActivity.this, "请稍候...", "正在连接服务器...", false);register();}});Button btnBack = (Button)findViewById(R.id.btnBack); //获得返回按钮对象btnBack.setOnClickListener(new View.OnClickListener() { //为返回按钮添加监听器@Overridepublic void onClick(View v) {Intent intent = new Intent(RegActivity.this,LoginActivity.class); //创建Intent对象startActivity(intent); //启动Activityfinish();}});Button btnEnter = (Button)findViewById(R.id.btnEnter); //获得进入功能面板按钮对象btnEnter.setOnClickListener(new View.OnClickListener() { //为进入功能面板的按钮添加监听器@Overridepublic void onClick(View v) {Intent intent = new Intent(RegActivity.this,FunctionTabActivity.class); //创建Intentintent.putExtra("uno", uno); //设置Extra字段startActivity(intent); //启动FunctionTabfinish(); //关闭该Activity}});}//方法:连接服务器,进行注册public void register(){new Thread(){public void run(){Looper.prepare();//获得用户输入的数据并进行验证EditText etName = (EditText)findViewById(R.id.etName); //获得昵称EditText对象EditText etPwd1 = (EditText)findViewById(R.id.etPwd1); //获得密码EditText对象EditText etPwd2 = (EditText)findViewById(R.id.etPwd2); //获得确认密码EditText 对象EditText etEmail = (EditText)findViewById(R.id.etEmail); //获得邮箱EditText对象EditText etStatus = (EditText)findViewById(R.id.etStatus); //获得心情EditText对象String name = etName.getEditableText().toString().trim(); //获得昵称String pwd1 = etPwd1.getEditableText().toString().trim(); //获得密码String pwd2 = etPwd2.getEditableText().toString().trim(); //获得确认密码String email = etEmail.getEditableText().toString().trim(); //获得邮箱String status = etStatus.getEditableText().toString().trim(); //获得状态if(name.equals("") || pwd1.equals("") || pwd2.equals("") || email.equals("") || status.equals("")){ Toast.makeText(RegActivity.this, "请将注册信息填写完整", Toast.LENGTH_LONG).show();return;}if(!pwd1.equals(pwd2)){ //判断两次输入的密码是否一致Toast.makeText(RegActivity.this, "两次输入的密码不一致!", Toast.LENGTH_LONG).show();return;}try{mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);String regInfo = "<#REGISTER#>"+name+"|"+pwd1+"|"+email+"|"+status;mc.dout.writeUTF(regInfo);String result = mc.din.readUTF();pd.dismiss();if(result.startsWith("<#REG_SUCCESS#>")){ //返回信息为注册成功result= result.substring(15); //去掉信息头uno = result; //记录用户的IDmyHandler.sendEmptyMessage(0); //发出Handler消息Toast.makeText(RegActivity.this, "注册成功!", Toast.LENGTH_LONG).show();}else{ //注册失败Toast.makeText(RegActivity.this, "注册失败!请重试!", Toast.LENGTH_LONG).show();}}catch(Exception e){e.printStackTrace();}}}.start();}@Overrideprotected void onDestroy() {if(mc != null){mc.sayBye();}super.onDestroy();}}(5)AlbumActivity.javapackage wyf.wpf;import static wyf.wpf.ConstantUtil.IMAGESWITCHER_HEIGHT;import static wyf.wpf.ConstantUtil.PHOTO_HEIGHT;import static wyf.wpf.ConstantUtil.PHOTO_WIDTH;import static wyf.wpf.ConstantUtil.SERVER_ADDRESS;import static wyf.wpf.ConstantUtil.SERVER_PORT;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Color;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.Drawable;import android.opengl.Visibility;import android.os.Bundle;import android.os.Handler;import android.os.Looper;import android.os.Message;import android.view.View;import android.view.ViewGroup;import android.view.animation.AnimationUtils;import android.widget.AdapterView;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.Gallery;import android.widget.ImageSwitcher;import android.widget.ImageView;import android.widget.Spinner;import android.widget.TextView;import android.widget.Toast;import android.widget.ViewSwitcher;import android.widget.AdapterView.OnItemClickListener;import android.widget.AdapterView.OnItemSelectedListener;public class AlbumActivity extends Activity implements ViewSwitcher.ViewFactory{ List<String []> photoInfoList = new ArrayList<String []>();Bitmap [] photoList; //存放图片的数组Gallery gl = null; //Gallery对象的引用ImageSwitcher is = null; //ImageSwitcher对象的引用Spinner sp = null; //Spinner对象的引用MyConnector mc = null; //MyConnector对象的引用String xid = ""; //存放相册的IDString uno = ""; //存放用户IDString visitor = ""; //存放访问者的IDString pid = ""; //存放当前显示的照片IDint from = -1; //启动该Activity的来源,0为MyAlbumListActivity,1为AlbumListActivityList<String []> albumInfoList = new ArrayList<String []>(); //存放相册信息,id和相册名称//Spinner的AdapterBaseAdapter baSpinner = new BaseAdapter() {@Overridepublic View getView(int position, View convertView, ViewGroup parent) {TextView tv = new TextView(AlbumActivity.this);tv.setTextSize(18.5f);tv.setTextColor(Color.DKGRAY);String [] sa = albumInfoList.get(position);tv.setText(sa[1]);return tv;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic Object getItem(int position) {return null;}@Overridepublic int getCount() {return albumInfoList.size();}};//Gallery的AdapterBaseAdapter baGallery= new BaseAdapter() {@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ImageView iv = new ImageView(AlbumActivity.this);iv.setAdjustViewBounds(true);iv.setLayoutParams(new youtParams(PHOTO_WIDTH, PHOTO_HEIGHT));iv.setMaxHeight(PHOTO_HEIGHT); //设置ImageView显示的高度iv.setMaxWidth(PHOTO_WIDTH); //设置ImageView显示的宽度iv.setImageBitmap(photoList[position]); //设置ImageView显示的内容return iv;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic Object getItem(int position) {return null;}@Overridepublic int getCount() {if(photoList != null){return photoList.length;}else{return 0;}}};//点下Gallery中的图片后触发的事件监听器OnItemClickListener myListener = new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View v, int position,long id) {if(is != null){ //如果ImageSwitcher不为空Drawable d = new BitmapDrawable(photoList[position]);is.setImageDrawable(d);}}};Handler myHandler = new Handler(){@Overridepublic void handleMessage(Message msg) {switch(msg.what){case 0:gl.setAdapter(baGallery);is.setImageDrawable(new BitmapDrawable(photoList[0]));break;}super.handleMessage(msg);}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.album); //设置当前屏幕Intent intent = getIntent(); //获取启动该Activity的Intentuno = intent.getStringExtra("uno"); //获得Extra字段的unovisitor = intent.getStringExtra("visitor");from = intent.getIntExtra("from", -1); //获得Extra字段的fromint position = intent.getIntExtra("position", 0); //获得被选中的相册String [] albumInfoArray = intent.getStringArrayExtra("albumlist"); //获得相册信息数组xid = intent.getStringExtra("xid"); //获得被选中的相册编号albumInfoList = new ArrayList<String []>();for(String s:albumInfoArray){ //遍历信息数组String [] sa = s.split("\\|");albumInfoList.add(sa); //构建相册信息列表}sp = (Spinner)findViewById(R.id.spAlbum); //获得Spinner对象sp.setAdapter(baSpinner); //设置Spinner对象的Adaptersp.setSelection(position); //选中在前一个Activity中被选中的相册sp.setOnItemSelectedListener(new OnItemSelectedListener() { //为Spinner添加监听器@Overridepublic void onItemSelected(AdapterView<?> parent, View v,int position, long id) {xid = albumInfoList.get(position)[0]; //修改存储相册ID的成员变量getPhotoList(); //获得相册中的相片列表}@Overridepublic void onNothingSelected(AdapterView<?> parent) {}});gl = (Gallery)findViewById(R.id.galleryPhoto); //获得Gallery对象gl.setOnItemClickListener(myListener); //设置Gallery的OnItemClickListener监听器is = (ImageSwitcher)findViewById(R.id.isPhoto); //获得ImageSwitcher对象is.setFactory(this); //设置ImageSwitcher的Factoryis.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in)); //设置ImageSwitcher 的In动画is.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_out));//设置ImageSwitcher 的Out动画Button btnBack = (Button)findViewById(R.id.btnAlbumBack); //获得返回按钮btnBackbtnBack.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {switch(from){ //判断启动该Activity的来源case 0: //有MyAlbumListActivity启动Intent intent1 = new Intent(AlbumActivity.this,FunctionTabActivity.class);intent1.putExtra("uno", uno);intent1.putExtra("tab", "tab5");startActivity(intent1);finish();break;case 1: //由AlbumListActivity启动Intent intent2 = new Intent(AlbumActivity.this,HomePageActivity.class);intent2.putExtra("uno", uno);intent2.putExtra("visitor", visitor);intent2.putExtra("tab", "tab2");startActivity(intent2);finish();break;}}});Button btnDeletePhoto = (Button)findViewById(R.id.btnDeletePhoto);if(visitor != null){ //不是查看自己的相册btnDeletePhoto.setVisibility(View.GONE); //如果不是自己的相册,隐藏删除按钮}btnDeletePhoto.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {new AlertDialog.Builder(AlbumActivity.this).setTitle("提示").setIcon(R.drawable.alert_icon).setMessage("确认删除该照片?").setPositiveButton("确定",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {int pos = gl.getSelectedItemPosition();pid = photoInfoList.get(pos)[0];deletePhoto();}}).setNegativeButton("取消",null).show();}});}public void getPhotoList(){new Thread(){public void run(){Looper.prepare();mc = null;mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);mc.dout.writeUTF("<#GET_ALBUM#>"+xid);int size = 0; //获得相册长度size = mc.din.readInt(); //读取相册的长度if(size == 0){Toast.makeText(AlbumActivity.this, "该相册还未上传照片", Toast.LENGTH_LONG).show();Looper.loop();return;}photoInfoList = new ArrayList<String []>(size);photoList = new Bitmap[size];for(int i=0;i<size;i++){ //循环获取图片数据String photoInfo = mc.din.readUTF(); //读取相片信息String [] sa = photoInfo.split("\\|"); //切割字符串photoInfoList.add(sa); //将相片信息添加到列表中int photoLength = mc.din.readInt(); //读取相片长度byte [] buf = new byte[photoLength]; //创建相应长度的数组mc.din.read(buf); //读入图片数据photoList[i] = BitmapFactory.decodeByteArray(buf, 0, photoLength); //创建Bitmap }myHandler.sendEmptyMessage(0);}catch(Exception e){e.printStackTrace();}}}.start();}//方法:删除指定照片public void deletePhoto(){new Thread(){public void run(){Looper.prepare();if(mc ==null){mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);}String msg = "<#DELETE_PHOTO#>"+pid;mc.dout.writeUTF(msg);String reply = mc.din.readUTF();if(reply.equals("<#DELETE_PHOTO_SUCCESS#>")){Toast.makeText(AlbumActivity.this, "照片删除成功!", Toast.LENGTH_LONG).show();}else {Toast.makeText(AlbumActivity.this, "删除失败,请重试!", Toast.LENGTH_LONG).show();}getPhotoList();Looper.loop();}catch(Exception e){e.printStackTrace();}}}.start();}@Overridepublic View makeView() {ImageView iv = new ImageView(this);iv.setScaleType(ImageView.ScaleType.CENTER_INSIDE);iv.setLayoutParams(newyoutParams(IMAGESWITCHER_HEIGHT,IMAGESWITCHER_HEIGHT));return iv;}@Overrideprotected void onDestroy() {if(mc != null){mc.sayBye();。

Android-课程设计报告

Android-课程设计报告

课程设计课程名称:嵌入式技术课程设计设计题目:基于Android系统的小查询工具学院:信息工程与自动化学院专业:计算机科学与技术年级: 2010级学生姓名:指导教师:日期: 2013/7/8教务处制课程设计任务书信息工程与自动化学院计算机科学与技术专业 2010 年级学生姓名:课程设计题目:基于Android系统的小查询工具课程设计主要内容:通过本课程设计,使学生巩固软件工程的基本概念、原理,熟悉安卓应用开发环境和技术,学会完成一个移动终端应用软件的分析、设计、编码测试和安装,将理论与实际相结合,强化学生的项目开发和团队意识,提高学生分析能力和创新能力基本理论1、 Android系统的开发方法及基本原理2、 JavaEE应用程序设计开发技术实验方法与基本要求要求学生掌握Windows环境下Android系统开发的一般方法,AndroidSdk 集成开发环境的构建及JavaEE应用程序的开发。

整个设计过程必须由学生自己独立完成,课程设计按二人一组,分组进行全过程的设计。

设计内容1、Windows环境下构建Android系统的开发环境2、基于Android模拟手机,设计手机应用程序3、将程序下载的Android手机上应用设计指导教师(签字):教学基层组织负责人(签字):年月日目录一、课程设计的目的及要求 (3)1.1 课程设计的目的 (3)1.2 课程设计要求 (3)二、Android应用程序开发背景 (3)2.1开发背景 (3)2.2开发环境 (4)三、Android应用程序开发环境搭建 (5)3.1所需软件的下载 (5)3.2相应软件的安装 (5)四、“小查询工具”的设计与实现 (10)1. 总体设计 (10)1)界面设计 (10)2)功能设计 (12)2. 详细设计 (12)1)模块设计 (12)2)编码实现 (12)3. 手机上运行截图 (14)五、总结与体会 (16)基于Android系统的小查询工具设计一、课程设计的目的及要求1.1 课程设计的目的1) 复习、巩固Java语言的基础知识,进一步加深对Java语言的理解和掌握;搭建一个完整的安卓开发环境。

android课程设计报告_2

android课程设计报告_2

目录1. 概述 (1)2. 项目设计与实现 (1)2.1欢迎界面 (1)2.1.1界面布局 (2)2.1.2功能实现 (2)2.2登陆界面 (2)2.2.1 界面布局 (2)2.2.2 功能实现 (2)2.3微信显示界面 (4)2.3.1 界面布局 (4)2.3.2功能实现 (5)2.4主界面 (5)2.4.1 界面布局 (5)2.4.2 功能实现 (5)3.参考文献 (5)4.致谢 (6)1.概述移动互联网时代的来临, 直接促进了搭载智能操作系统、具有强大扩展性的智能手机、平板电脑等移动终端产业的蓬勃发展。

搭载安卓操作系统的智能手机目前已经成为市场上最炙手可热的智能产品。

开放的源代码和零成本已经让安卓在全世界范围内受到青睐并迅速获得了主要手机厂商和数百万软件开发者的支持, 2011年安卓系统的市场份额已经超过Symbian, 成为全球第一大智能手机操作系统。

本项目基于QQ和微信等聊天工具, 仿制其功能初步实现了登录界面和主界面的简单设置, 剩余的功能我会在以后更加努力实现。

2. 项目设计与实现2.1欢迎界面图1 欢迎界面2.1.1界面布局整体采用相对布局, 下面为一个线性布局, 其中包括一个ImageViewTextView,最下面仍是一个线性布局, 包括两个Button和两个TextView。

2.1.2功能实现欢迎界面由按钮和图片等构成, 启动该客户端时, 首先进入该界面。

在欢迎界面点击登录按钮可通过QQ号或微信号登录, 点击注册按钮, 可在联网的情况下注册微信号。

2.2登陆界面图2 登录界面2.2.1 界面布局整体采用RelativeLayout相对布局, 下面仍为一相对布局, 其中包括一个Buttton 和一个TextView.紧邻为两个EditText,最下面为相对布局, 包括两个Button。

2.2.2 功能实现使用UserEdit.getText().toString().trim() 和PasswordEdit.getText(). toString().trim()方法得到用户输入的用户名和密码。

安卓课程设计报告

安卓课程设计报告

安卓课程设计报告引言在当今数字化的时代,移动应用的发展变得越来越重要。

安卓操作系统作为最受欢迎的移动操作系统之一,为开发人员提供了广阔的创作空间。

本报告将详细介绍我们小组在安卓课程设计中的设计思路、开发过程和项目成果。

一、项目背景移动应用的普及使得人们在手机上执行各种任务变得越来越方便。

鉴于此,我们小组决定开发一款名为“Daily Planner”的日程管理应用。

该应用旨在帮助用户更加高效地管理个人和工作日程,提高生活的规划和安排能力。

二、需求分析1. 功能需求- 日程管理:用户可以创建、编辑和删除日程,并设置提醒。

- 分类管理:用户可以按照分类将日程划分,如工作、学习、娱乐等。

- 日程分享:用户可以将日程分享给其他用户,方便共享安排。

- 备忘录功能:用户可以添加备忘录,例如购物清单、想法记录等。

- 数据备份:用户可以将日程数据进行备份和恢复。

2. 非功能需求- 用户友好性:用户界面设计简洁明了,操作简单直观。

- 性能要求:应用响应速度快,稳定性高。

- 安全性:用户数据加密存储,保障用户隐私。

三、系统设计和开发我们小组采用了敏捷开发方法,将整个项目分为多个迭代阶段。

每个迭代阶段都有相应的目标和任务,以确保项目在时间和质量上的有效管理。

1. 技术选型为了实现项目需求,我们选择了Java作为主要的开发语言,使用Android Studio作为集成开发环境。

此外,我们还使用了SQLite 作为本地数据库存储数据。

2. 界面设计我们注重用户体验,将界面设计简洁明了。

主界面呈现日历视图,用户可以直观地查看每日计划。

通过侧边菜单,用户可以快速切换到不同的功能模块,如日程管理、备忘录等。

3. 后台开发为了实现日程管理、分类管理等功能,我们设计了相应的后台逻辑。

我们使用SQLite作为本地数据库存储用户数据,并通过查询和更新操作实现不同的功能需求。

四、系统测试与优化在开发过程中,我们注重系统的稳定性和性能。

我们采用了自动化测试框架对系统进行测试,以确保功能的正确性。

安卓开发课程设计报告

安卓开发课程设计报告

安卓开发课程设计报告一、课程目标知识目标:1. 学生理解安卓应用开发的基本概念和原理,掌握安卓开发环境搭建方法。

2. 学生掌握安卓应用的基本组件,如Activity、Service、BroadcastReceiver 等,并了解其生命周期。

3. 学生学会使用安卓布局和控件,能够设计美观、易用的用户界面。

4. 学生掌握安卓事件处理机制,能够实现应用内的交互功能。

5. 学生了解安卓存储和数据持久化的方法,能够实现数据的保存和读取。

技能目标:1. 学生能够独立搭建安卓开发环境,并熟练使用相关工具进行开发。

2. 学生具备编写、调试和优化安卓应用的能力,能够解决实际开发过程中遇到的问题。

3. 学生能够运用所学知识,设计并实现具有实际意义的小型安卓应用。

4. 学生学会查阅安卓开发相关资料,具备自我学习和持续提升的能力。

情感态度价值观目标:1. 学生培养对计算机科学的兴趣,激发创新意识和探索精神。

2. 学生养成合作学习和解决问题的习惯,提高团队协作能力。

3. 学生认识到编程对于培养逻辑思维和抽象思维能力的重要性,增强自信心。

4. 学生了解安卓应用在实际生活中的应用,认识到科技对生活的改变,培养社会责任感。

本课程旨在通过安卓开发教学,使学生在掌握基本知识、技能的基础上,培养实际开发能力,激发创新意识,提高团队协作能力,为未来进一步学习计算机科学和从事相关领域工作打下坚实基础。

二、教学内容1. 安卓开发基础- 环境搭建:讲解并实践安装Java开发工具、Android Studio和模拟器。

- 应用结构:介绍Android应用的基本目录结构,理解AndroidManifest.xml 文件的作用。

2. 安卓应用组件- Activity:学习Activity的生命周期,掌握状态保存和恢复。

- Service:了解Service的基本用法,实现后台服务。

- BroadcastReceiver:学习广播接收者的使用,实现应用间的消息传递。

《Android平台软件开发》课程设计报告(Word最新版)

《Android平台软件开发》课程设计报告(Word最新版)

《Android平台软件开发》课程设计报告通过整理的《Android平台软件开发》课程设计报告相关文档,希望对大家有所帮助,谢谢观看!《Android平台软件开发》课程设计报告题目基于安卓的计算标准体重的应用程序专业计算机科学与技术学生姓名学号二O一六年X月X 日目录1背景介绍1 2需求分析1 3设计目的2 4技术介绍2 4.1 Android Studio--开发软件2 4.2 java+Android类库+xml 24.2.1 java 24.2.2 xml 2 5 设计思路25.1功能分析2 5.2模块划分2 5.3程序流程图3 6 程序实现及代码分析36.1用户登录界面3 6.2输入和提交信息程序界面8 6.3显示计算结果程序界面10 7 总结12 参考文献13基于安卓的计算标准体重的应用程序周超南京信息工程大学滨江学院计算机系,江苏南京210044 摘要:本报告主要阐述的是根据身高计算标准体重的应用程序。

本应用程序是以安卓技术、Java开发语和android studio开发平台为背景来进行设计的。

本应用程序包含了用户登录功能、背景音乐播放功能和计算标准体重功能。

关键词:Java;android studio;安卓;1 背景介绍随着移动通信与Internet向移动终端的普及,网络和用户对移动终端的要求越来越高,而Symbian,Windows Mobile,PalmOS等手机平台过于封闭,不能很好的满足用户的需求,因此市场迫切需要一个开发性很强的平台。

经过多年的发展,第三代数字通信(3G)技术活动了广泛的接受,它为移动终端用户带来了更快的数据传输速率。

随着3G网络的使用,移动终端不再仅是通讯网络的终端,还将成为互联网的终端。

因此,移动终端的应用软件和需要的服务将会有很大的发展空间。

Google为此于2007年11月推出了一个专为移动设备设计的软件平台——Android。

Android是一套真正意义上的开发性的移动设备综合平台,它包括操作系统、中间件和一些关键的平台应用。

android课程设计实验报告

android课程设计实验报告

android课程设计实验报告Android课程设计实验报告一、引言Android操作系统是目前最流行的移动操作系统之一,具有广泛的应用领域和强大的开发能力。

本次课程设计实验旨在通过开发一个基于Android平台的应用程序,来提升学生对Android开发的理解和实践能力。

本文将详细介绍课程设计实验的目的、内容和实施过程,并对实验结果进行分析和总结。

二、实验目的本次课程设计实验的主要目的是让学生通过实际操作,深入了解Android应用程序的开发过程和技术要点,包括界面设计、数据处理、网络通信等方面。

通过这次实验,学生将能够掌握Android开发的基本流程和常用工具,提升其软件开发能力和综合解决问题的能力。

三、实验内容本次实验的主要内容是开发一个基于Android平台的应用程序,要求具备以下功能:1. 用户注册和登录功能:用户可以在应用程序中注册新账号并登录,以便使用更多的功能。

2. 数据展示功能:应用程序可以展示一些实时更新的数据,例如天气信息、股票行情等。

3. 数据编辑和保存功能:用户可以编辑和保存一些个人信息或设置,例如昵称、头像等。

4. 网络通信功能:应用程序可以实现与服务器的数据交互,例如获取最新的新闻内容、发送和接收消息等。

四、实验过程1. 环境搭建:首先,学生需要搭建Android开发环境,包括安装Java开发工具、Android开发工具包和虚拟机等。

2. 项目创建:学生需要创建一个新的Android项目,并进行相关配置,包括应用程序的名称、图标、权限等。

3. 界面设计:学生需要设计应用程序的用户界面,包括登录页面、注册页面、数据展示页面等。

4. 功能实现:学生需要编写代码,实现应用程序的各个功能,包括用户注册和登录功能、数据展示功能、数据编辑和保存功能、网络通信功能等。

5. 调试和测试:学生需要对应用程序进行调试和测试,确保其功能的正确性和稳定性。

6. 文档撰写:学生需要撰写实验报告,包括实验目的、内容、过程和结果等。

Android课程设计报告

Android课程设计报告

河南城建学院课程设计报告书专业:计算机科学与技术课程设计名称:《Java高级应用》题目:基于Android平台的记事本软件班级:0814131班学设计者:付明玉同组人员: 李志军、翟帅星指导老师:张妍琰景伟娜陈红军完成时间:2016年06月04一、设计目的设计目的《Java高级应用》课程设计是我们实践性学习环节之一,通过课程设计:(1)、巩固本学期所学的理论知识,熟悉androidstutio 工具及相关java组件的灵活应用。

(2)、编制出完整的应用程序,锻炼我们的分析解决实际问题的能力,为以后完成大型项目的开发打下基础。

(3)、把理论与实验课所学内容做一个综合,并在此基础上强化我们的实践意识、提高实际动手能力和创新能力。

设计要求设计一款基于Android平台的记事本软件。

功能要求:具有记事本的基本功能,可以实现记录,批量处理。

具备在线备份和分享功能。

在线备份能备份各种编辑中或者编辑完成的文章。

二、需求分析需求分析(1)用户进入系统后可以设置个人信息:设置页面颜色、姓名、电话、及锁定密码,设置标记;(2)查看记录:查看以前的记录;(3)添加记录:添加新的记录;(4)删除记录:删除已有的记录;(5)垃圾箱:删除的信息会被放到垃圾箱里,并可以进行还原操作,若确定是没有信息,则可以清空垃圾箱,实现批量删除;(6)日历:可以显示当前日期,与手机时间,会根据信息修改的时间,自动改变信息记录时间;而且可以再日历中的某一天添加标记信息;(7)排序:可以对信息进行排序(按时间、字母表、颜色)(8)视图:在代码中添加了listView和gridView两种显示视图,用户可以自由选择;(9)简介:对软件和开发的简单介绍软件逻辑逻辑图notes,如表2-1所示。

数据库中表notes信息calendar_ month COLUMN_CALENDAR_MONTHinteger Default-1日历日期(月)calendar_ year COLUMN_CALENDAR_YEARinteger Default-1日历日期(年)三、模块分析及设计首页面进入页面的效果如图3-1所示图3-1-1在系统主页面,我们采用了简单明了的方式直观向用户展示了这个软件的用途,直接点击就可以记录事件,在这个页面我们添加了:setupActionBar();setupNavigationDrawer();由actionbar实现左滑动菜单;此外,在Activity 中使用了Fragment,可以使设计适用于不同的手机屏幕大小,提供更加灵活的UI支持。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

武汉理工大学华夏学院课程报告课程名称:智能手机软件开发题目:基于Android的手机通讯录的设计与实现专业信息工程系班级学号姓名成绩指导教师2015年3月23日至2015年6月12日智能手机软件开发大作业根据所学的Android 手机开发的知识,采用Eclipse、JAVA开发一个基于Android 平台的手机通讯录软件,具体要求如下:1.要发该软件能够在以上的平台上运行。

2.要求软件界面美观,操作方便,符合日常使用规范。

3.能够通过该手机通讯录来添加新的联系人,用来存放联系人的姓名、单位、电话、QQ、地址等信息。

4.能够通过该手机通讯录来编辑联系人信息,来修改联系人的个人信息。

5.能够通过该手机通讯录来调用系统的通信接口,直接给用户发短信,打电话。

6.在手机通讯录中,添加合适的菜单,来操作手机通讯录。

7.将开发的过程写成报告,要求内容完整,格式规范,条理清晰。

1 设计目的随着手机通讯录功能的不断加强与完善,手机通讯录对于人们的意义,已不仅仅像记事簿一样显示通讯地址,而是向着个性化、人性化的方向发展移动终端的应用软件和需要的服务将会有很大的发展空间。

根据这个特点,设计一个基于Android平台的通讯录系统,能根据手机的特点,存储,管理,修改联系人信息,并且能够根据选定的联系人,对其拨打电话,发送短信等。

手机通讯录作为手机的基本功能之一,每天我们都在频繁地使用着。

根据手机功能使用调查显示,通讯录从无到有,从英文到中文,经过了十几年的发展历程,今后的发展趋势就是从通讯录发展为名片夹,也就是在一个人名下,可以存储座机、手机、单位、地址、电子邮件等内容。

所以手机通讯录功能越来越齐全,满足了人们的需求。

2 开发环境由于该android通讯录是一个基于Java语言开发软件,所以选择了作为开发平台,作为插件,它能够安装Android SDK,从而可以安装使用Android虚拟机,使得程序得以开发,亦更为方便。

本通讯录系统就是在+Android平台环境下编写设计而成的。

3 需求分析该系统针对的主要用户是Android手机用户。

Android手机通信管理系统包括以下主要内容:(1) 用户通过联系人功能可以保存联系人的详细信息,可以对联系人进行编辑、删除、拨打电话、发送短信可以根据索引条件搜索联系人。

(2) 用户通过短信记录功能可以发送短信,删除短信记录。

(3) 用户通过SD卡所储存信息向通讯录批量导入联系人信息。

(4) 用户通过个人中心可以设置自己的详细信息,这样方便其他人了解自己,也可以将具有相同名字的联系人合并。

要设计一个良好的手机通讯录,就必须首先明确该应用环境对系统的要求。

Android手机通讯录应用背景:方便用户快捷通讯。

(1)类似于传统手机通讯录的联系人的添加、修改、查找、删除功能。

(2)指定联系人后,录音并发送给该联系人的留言功能。

(3)通过通讯录访问联系人的微博以实现与联系人互动的功能。

(4)接收短信、电话、语音留言和微博留言的信息并提醒用户。

(5)保存用户自身的个人信息以用于与他人联系时显示身份。

4 概要设计下面数据流图是对于Android手机通讯管理软件主要功能模块包括的简单结构图:联系人查看、联系人编辑、联系人添加、联系人删除、呼叫、发送短信、搜索,如图所示:图 Android手机通讯管理软件主要功能模块联系人列表界面主菜单中包括添加联系人、搜索联系人、关于及查看系统版本号、退出菜单项。

点击添加联系人,则进入联系人添加界面,添加成功后返回列表界面。

点击搜索菜单,则进入联系人搜索界面,输入联系人的全名或一个字,即可查找相关联系人,点击联系人会进入联系人查看界面,可以对联系人进行编辑、删除、拨打电话、发送短信。

如下图所示的Android手机通讯管理软件业务流程图.图 Android手机通讯管理软件业务流程图5 数据库设计SQLite数据库简介SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。

它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL 这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。

SQLite 第一个Alpha版本诞生于2000年5月. 至今已经有10个年头,SQLite也迎来了一个版本 SQLite 3已经发布。

本系统采用的是Android系统自带的SQLite轻型数据库数据库。

因此占用资源非常小。

数据库表结构首先创建数据库,在数据库中创建表用来存储联系人数据,其中包括联系人姓名、手机号、QQ、地址等联系方式。

6 详细设计与实现联系人浏览模块进入首界面,显示联系人列表。

点击某个联系人会进入查看联系人界面,可以查看联系人的详细信息,对联系人进行编辑、删除、拨打电话发送短信等。

截图所示:图通讯录联系人列表模块界面点击菜单按钮时,就会显示添加、查找、关于和退出功能。

如果点击退出菜单,则会退出该软件。

如图所示:图通讯录主菜单项模块长按菜单显示Android手机通讯截图如图所示:图通讯录联系人界面菜单模块查看联系人模块在联系人界面点中击某个联系人,则会跳转到该界面。

该软件实现了给联系人拨打电话和发送短信的功能。

查看联系人界面截图如图所示:图手机通讯查看联系人模块界面编辑联系人模块联系人编辑界面设置了返回列表菜单和删除联系人菜单。

点击返回列表菜单,会返回到联系人浏览界面。

编辑联系人界面如图所示:图手机通讯录编辑联系人界面模块查找联系人模块查找到所有包含该部分的联系人,并在ListView中显示出来所有的联系人的姓名和手机号码,截图如图所示:图通讯录查找联系人模块界面7 总结这学期的智能手机开发课程的学习,让我了解到手机开发端应用的广泛性,以及对自己所学知识的总结,做手机通讯录,让我了解到手机已经成为日常生活中不可分割的一部分,所以手机上的功能满足人们的需求,才是手机通讯录开的重要性。

对于这次的课程设计,使我发现了自己所掌握的知识是真正如此的缺乏,自己综合应用所学的专业知识能力是如此的不足通过这次开发项目,我们学会了如何在一个项目中集成多种技术,如何合理的耦合各种小功能,如何解决各种开发中出现的问题。

同时在这次开发中出现的问题也暴露出了我们对java程序设计的一些问题,以及自己的动手能力还需要提高,而且做一个项目首先要明白这个项目的中心思想,这样才有目的去设计。

通过课程设计,使我深深体会到,干任何事都必须耐心,细致,课程设计过程中,许多迷惑有时不免令我感到有些心烦意乱,有几次因为不小心而出错,只能毫不情意地重来。

但一想起老师对我们耐心的教导,认真对待的良好习惯.这次课程设计使我在工作作风上得到了一次难得的磨练,一个人的性格很大程度上决定一件事情的进展以及对工作的态度和生活的态度,所以养成好的习惯能够帮助我克服各种苦难,能够帮助我在今后的学习中脚踏实地的工作。

通过这次手机开发通讯录课程设计,我能够更加深刻的了解到手机通讯录开发的前景以及所需的知识,总之在今后的学习中自己应该了解如今社会上开发手机通讯录所需的最新的技术,不能一成不变,只看书本上的知识,养成自我学习的良好习惯。

8 参考文献[1] 罗伟. 基于 Android平台的即时通讯系统的研究与实现[D].湖南师范大学, 2009 .[2] 李刚,《疯狂Java讲义》,电子工业出版社,2008[3] 程峰,《JAVA核心技术》,机械工业出版社,2007[4] 王鹏,《JAVA语言程序设计》,大连理工出版社,20059 附录源代码public class DBHelper{/**操作数据库和各个表*/public static final String DATABASE_NAME="CONTACT_DB";public static final String TABLE_CONTACTER="contact_person";public static final String TABLE_MOBLIEPHONE="phone_number";public static final String TABLE_GROUP="mygroup";public static final String TABLE_EMAIL="email";public static final String TABLE_QQ="qq";public static final String TABLE_HOMEPHONE="home_phone_number";public static final String TABLE_ADDRESS="address";public static final String TABLE_FAX="fax";quals(""))cursor=(TABLE_CONTACTER,new String[]{"id","name","headImage"}, null, null, null, null, null);else {StringBuffer sqlBuffer=new StringBuffer();("select id,name,headImage from ").append(TABLE_CONTACTER).append(" where name like '%").append(condition).append("%'");cursor=(), null);}();while(!()){HashMap<String, Object> item=new HashMap<String, Object>();("contacter_id", ("id")));("name", ("name")));("headimage", ("headImage")));rim()!=null&&!("birthday")).trim().equals("")){String string=("birthday")).trim();=("birthday")));}=("headImage"));dd_code=("add_code"));[i].province=("province"));[i].city=("city"));[i].street=("street"));[i].zip_code=("zip_code"));[i].coutry=("country"));();}return contacter;}/** 自动生成联系人编码*/public int generateContacterID(){Cursor cursor=(TABLE_CONTACTER,new String[]{"id"}, null, null, null, null, null);();int i=0;if()==0)return 0;while(!()){if(i!=("id")))return i;i++;();}return i;}/*** 插入新的联系人*/public boolean insertContacter(Contacter contacter) {boolean flag;int id=generateContacterID();指导教师评语:成绩评定:指导教师(签名):2015 年6月15日。

相关文档
最新文档