《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课程设计报告河北科技大学

a n d r o i d课程设计报告河北科技大学The pony was revised in January 2021河北科技大学课程设计报告学生姓名:学号:专业班级:计算机班课程名称: Android智能手机软件开发学年学期: 2011学年第一学期指导教师:高凯2 0 11 年 12 月课程设计成绩评定表一、概述设计编写一个能在Android系统下运行的计算器,除了能实现四则运算外,还带有菜单的功能。
菜单中拥有的Item有:1退出键——按下时弹出一个对话框提示是否确认退出;2帮助键——按下后显示帮助信息,并能从帮助界面返回到主界面;3About键——按下后弹出就算器的版本信息;4换肤键——按下后更换皮肤。
二、项目设计与实现先写好布局文件,代码如下:说明:此Activity采用嵌套式LinearLayout布局,最外层的LinearLayout嵌入六个LinearLayout,此时LinearLayout的android:orientation="vertical"即采用垂直布局。
嵌入的六个LinearLayout除第一个采用垂直布局外其他的均采用水平布局。
第一个LinearLayout控制两个EditText的位置,剩下的五个LinearLayout控制20个按钮的布局。
为使软件能适应不同分辨率的手机,所有控件的layout_width和layout_height 属性都设为fill_parent,而控制按钮大小通过设置layout_weight的大小来控制。
这样控件的大小就只和屏幕大小和控件占屏幕的比例有关。
显示效果如下:Activity的界面计算器的基本功能实现接下来就是对各个按钮绑定监听器,实现算术式的输入功能和计算输入的算术式值的功能。
根据各个按钮的功能可将将它们分为四类:Clean按钮为一类,Delete为一类,等号按钮为一类,其他的作为基本算式输入按钮可看做一类。
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语言的理解和掌握;搭建一个完整的安卓开发环境。
安卓课程设计报告

安卓课程设计报告引言在当今数字化的时代,移动应用的发展变得越来越重要。
安卓操作系统作为最受欢迎的移动操作系统之一,为开发人员提供了广阔的创作空间。
本报告将详细介绍我们小组在安卓课程设计中的设计思路、开发过程和项目成果。
一、项目背景移动应用的普及使得人们在手机上执行各种任务变得越来越方便。
鉴于此,我们小组决定开发一款名为“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课程设计实验报告

android课程设计实验报告Android课程设计实验报告一、引言Android操作系统是目前最流行的移动操作系统之一,具有广泛的应用领域和强大的开发能力。
本次课程设计实验旨在通过开发一个基于Android平台的应用程序,来提升学生对Android开发的理解和实践能力。
本文将详细介绍课程设计实验的目的、内容和实施过程,并对实验结果进行分析和总结。
二、实验目的本次课程设计实验的主要目的是让学生通过实际操作,深入了解Android应用程序的开发过程和技术要点,包括界面设计、数据处理、网络通信等方面。
通过这次实验,学生将能够掌握Android开发的基本流程和常用工具,提升其软件开发能力和综合解决问题的能力。
三、实验内容本次实验的主要内容是开发一个基于Android平台的应用程序,要求具备以下功能:1. 用户注册和登录功能:用户可以在应用程序中注册新账号并登录,以便使用更多的功能。
2. 数据展示功能:应用程序可以展示一些实时更新的数据,例如天气信息、股票行情等。
3. 数据编辑和保存功能:用户可以编辑和保存一些个人信息或设置,例如昵称、头像等。
4. 网络通信功能:应用程序可以实现与服务器的数据交互,例如获取最新的新闻内容、发送和接收消息等。
四、实验过程1. 环境搭建:首先,学生需要搭建Android开发环境,包括安装Java开发工具、Android开发工具包和虚拟机等。
2. 项目创建:学生需要创建一个新的Android项目,并进行相关配置,包括应用程序的名称、图标、权限等。
3. 界面设计:学生需要设计应用程序的用户界面,包括登录页面、注册页面、数据展示页面等。
4. 功能实现:学生需要编写代码,实现应用程序的各个功能,包括用户注册和登录功能、数据展示功能、数据编辑和保存功能、网络通信功能等。
5. 调试和测试:学生需要对应用程序进行调试和测试,确保其功能的正确性和稳定性。
6. 文档撰写:学生需要撰写实验报告,包括实验目的、内容、过程和结果等。
安卓app开发课程设计

安卓app开发课程设计一、课程目标知识目标:1. 学生能够理解安卓APP开发的基本概念,掌握安卓开发环境搭建及常用开发工具的使用。
2. 学生能够掌握安卓APP的界面设计原则,使用XML布局文件进行界面搭建。
3. 学生能够掌握安卓APP中的事件处理机制,实现按钮、列表等控件的交互功能。
4. 学生能够了解安卓APP的数据存储方式,运用SQLite数据库进行数据存储和管理。
技能目标:1. 学生能够独立完成安卓APP的界面设计和布局。
2. 学生能够运用所学知识,实现具有基本功能的安卓APP。
3. 学生能够运用调试工具,分析并解决安卓APP开发过程中遇到的问题。
情感态度价值观目标:1. 学生培养对编程的兴趣和热情,树立良好的学习态度,形成自主探究的学习习惯。
2. 学生培养团队合作意识,学会与他人共同解决问题,提高沟通与协作能力。
3. 学生能够认识到科技对社会发展的作用,增强创新意识,提高实践能力。
课程性质:本课程为实践性较强的课程,旨在通过项目驱动的教学方式,让学生在动手实践中掌握安卓APP开发的基本知识和技能。
学生特点:学生处于高年级阶段,具备一定的编程基础和逻辑思维能力,对新鲜事物充满好奇心,具备较强的自学能力。
教学要求:教师应注重理论与实践相结合,关注学生的个体差异,提供个性化的指导,激发学生的学习兴趣,培养学生实际操作能力。
同时,注重培养学生的团队协作能力和创新精神。
通过课程目标的分解,确保学生能够达到预期学习成果,为后续教学设计和评估提供依据。
二、教学内容1. 安卓开发环境搭建:介绍Android Studio的安装与配置,包括SDK、AVD 的创建与管理,使学生熟悉安卓开发环境。
教材章节:第1章 安卓开发环境搭建2. 界面设计与布局:讲解XML布局文件的使用,掌握线性布局、相对布局等基本布局方式,学习界面控件的属性设置。
教材章节:第2章 界面设计与布局3. 事件处理机制:学习安卓APP中事件处理机制,掌握点击事件、长按事件等基本事件处理方法,实现控件交互功能。
android课程设计报告

android课程设计报告一、课程目标知识目标:1. 掌握Android开发环境的基本配置,理解Android系统的架构及工作原理;2. 学会使用Android Studio进行应用程序开发,熟悉常用的布局、控件及其属性;3. 掌握Android事件处理机制,了解Activity、Service、BroadcastReceiver等核心组件的使用;4. 学会数据存储与读取,掌握SQLite数据库在Android中的应用;5. 了解网络编程在Android中的应用,掌握使用HTTP协议进行数据交互。
技能目标:1. 能够独立搭建Android开发环境,并进行基本的调试;2. 能够运用Android Studio设计美观、易用的用户界面;3. 能够编写具有基本功能的Android应用程序,如计算器、天气查询等;4. 能够根据实际需求,选择合适的数据存储方式,如SharedPreferences、SQLite等;5. 能够运用所学知识,实现简单的网络请求和数据解析。
情感态度价值观目标:1. 培养学生对Android编程的兴趣,激发学习热情;2. 培养学生具备良好的编程习惯,注重代码规范和注释;3. 培养学生团队协作意识,学会与他人分享、交流技术心得;4. 培养学生具备解决问题的能力,面对编程难题不轻言放弃;5. 培养学生关注移动开发领域的发展动态,紧跟技术潮流。
本课程针对高年级学生,在已有编程基础的前提下,深入浅出地讲解Android 应用开发。
课程设计注重实用性,结合教材内容,将知识点分解为具体的学习成果,以便学生能够学以致用。
通过本课程的学习,使学生掌握Android编程的基本技能,培养具备实际项目开发能力的优秀程序员。
二、教学内容1. Android开发环境搭建:讲解Android Studio的安装与配置,熟悉Android模拟器和真机调试;对应教材章节:第1章 Android开发环境搭建。
2. Android基本UI设计:学习常用的布局(如LinearLayout、RelativeLayout等)和控件(如TextView、Button、EditText等);对应教材章节:第2章 Android基本UI设计。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《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,WindowsMobile,PalmOS等手机平台过于封闭,不能很好的满足用户的需求,因此市场迫切需要一个开发性很强的平台。
经过多年的发展,第三代数字通信(3G)技术活动了广泛的接受,它为移动终端用户带来了更快的数据传输速率。
随着3G网络的使用,移动终端不再仅是通讯网络的终端,还将成为互联网的终端。
因此,移动终端的应用软件和需要的服务将会有很大的发展空间。
Google为此于2007年11月推出了一个专为移动设备设计的软件平台——Android。
Android是一套真正意义上的开发性的移动设备综合平台,它包括操作系统、中间件和一些关键的平台应用。
Android 是由Linux+Java构成的开源软件,允许所有厂商和个人在其基础上进行开发。
Android平台的开放性等特点既能促进技术(包括平台本身)的创新,又有助于降低开发成本,还可以是运营商能非常方便地制定自己的特色化的产品。
因此,它具有很大的市场发展潜力。
2 需求分析如今,伴随着GoogleAndroid操作系统的盛行,基于AndroidSDK的系统开发和基于Android应用的开发等已倍受大家关注。
Android应用面向的是普通个体用户,这些用户往往会更加关注用户体验,因此Android应用增加多媒体功能十分必要。
就目前的手机发展趋势来看,手机已经不再是单一的通讯工具,更多的手机用户希望在工作、学习之余通过方便灵巧可随身携带的仪器休闲娱乐。
而且近年来,由于人们生活水平的提高,越来越多的人开始关注人体健康,而体重也成为了人们关注的重点,尤其是女性。
因此为了迎合众多用户的需求并适应现在的手机的规模,我设计了一个计算标准体重的应用程序。
3 设计目的本设计是在学习Android平台软件开发的课程的基础上进行的一次综合实践。
通过本课程设计,让学生们巩固下有关Android平台软件开发的知识,也考查学生们的学习情况。
4 技术简介 4.1 Android Studio--开发软件 Android Studio 是一个Android开发环境,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试。
4,2 java+Android类库+xml--开发语言 4.2.1 java java是在计算机史上影响深远的编程语言,它是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。
Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程[1] 。
Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。
Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。
4.2.1 xml 可扩展标记语言XML(eXtensible Markup Language)是一种简单灵活的文本格式的可扩展标记语言,起源于SGML(Standard Generalized Markup Language),是SGML的一个子集合,也就是SGML的一个简化版本,非常适合于在Web上或者其它多种数据源间进行数据的交换。
5 设计思路 5.1 功能分析该设计实现了一个可计算输出标准体重功能的应用程序。
根据世界卫生组织推荐的计算标准体重的方法为:男性标准体重=(身高-80)*0.7;女性标准体重=(身高-70)*0.6”。
因此需要输入的信息有性别、身高。
用户在登录界面里,输入用户名和密码后,点击“登录”按钮,便可进入计算标准体重功能的应用程序。
然后,在该程序中输入对应的信息后,点击“提交”按钮,接着,会跳转到结果界面,显示计算结果。
我还在登录界面中设计了背景音乐播放功能,点击“开启背景音乐”按钮,就会播放音乐;只有点击“关闭播放音乐”按钮,音乐才会停止,否则会一直播放。
5.2 模块划分我设计了三个模块,即三个Activity,分别为用户登录(activity_Login)、输入和提交信息(activity_main)和显示计算结果(activity_result)。
(1) 用户登录(activity_Login)模块:一个图片控件(ImageView)用于加载图片,两个文本框(TextView)分别是用户名和密码,两个编辑框(EditText)用于输入用户名和密码,三个按钮(Button)分别为“登录”、“开启背景音乐”和“关闭播放音乐”,以及一些标题文本。
(2) 输入和提交信息(activity_main)模块:一个图片控件(ImageView)用于加载图片一个RadioGroup组件,三个编辑框(EditText)分别是性别、身高和cm,两个单选框(RadioButton)分别是“男”和“女”,一个“提交”按钮(Button),以及一些标题文本。
(3) 显示计算结果(activity_result)模块:一个图片控件(ImageView)用于加载图片,三个文本框(TextView),以及一些标题文本。
5.3 程序流程图根据以上的分析,可画出相应的程序流程图,如图5-1所示。
图5-1程序流程图 6 程序实现及代码分析 6.1 用户登录界面用户登录程序界面(activity_Login)的功能是实现用户登录,并可以开启背景音乐功能。
用户必须输入正确的用户名和密码,才可进入计算标准体重界面,否则,会出现“输入不正确”的提示信息,程序界面如图6-1所示。
图6-1用户登录程序界面功能代码:activity_Login.java(实现用户登录功能) package com.example.zc.myfirstapplication; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.Button; import android.widget.EditText; import android.view.View; import android.widget.Toast; import android.view.View.OnClickListener;public class LoginActivity extends AppCompatActivity {private EditText name=null;private EditText password=null;Button login;private static String TAG = “MusicService“;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_login);name=(EditText)findViewById(R.id.edtName);password=(EditText)findViewById(R.id.edtPassword);login=(Button)findViewById(R.id.btnLogin);initlizeViews();login.setOnClickListener(new View.OnClickListener(){public void onClick(View view) {if (name.getText().toString().equals(“zc“) && password.getText().toString().equals(“666666“)) {Intent intent = new Intent();intent.setAction(“com.example.zc.action.LOGIN “);startActivity(intent);Toast.makeText(getApplicationContext(), “正在登录中...“,Toast.LENGTH_SHORT).show();}else {Toast.makeText(getApplicationContext(), “用户名或密码错误!“Toast.LENGTH_SHORT).show();}}});}private void initlizeViews() {Button btnStart = (Button) findViewById(R.id.btnStart);Button btnStop = (Button) findViewById(R.id.btnStop);OnClickListener ocl = new OnClickListener() {@Overridepublic void onClick(View v) {//显示指定intent所指的对象是个serviceIntent intent = newIntent(LoginActivity.this, MusicService.class);switch (v.getId()) {case R.id.btnStart:startService(intent);//开启服务break;case R.id.btnStop:stopService(intent);//停止服务break;}}};btnStart.setOnClickListener(ocl);btnStop.setOnClickListener(ocl); } }MusicService.Java(实现背景音乐播放功能) package com.example.zc.myfirstapplication; import android.app.Service; import android.content.Intent; import android.media.MediaPlayer; import android.os.IBinder; import android.util.Log; import android.widget.Toast;public class MusicService extends Service{//为日志工具设置标签private static String TAG = “MusicService“;//定义音乐播放器变量private MediaPlayer mPlayer;//该服务不存在需要被创建时被调用,不管startService()还是bindService()都会启动时调用该方法 @Overridepublic void onCreate() {mPlayer = MediaPlayer.create(getApplicationContext(),R.raw.music);//设置可以重复播放mPlayer.setLooping(true);super.onCreate();}@Overridepublic void onStart(Intent intent, int startId) {Toast.makeText(this, “开始播放音乐“, Toast.LENGTH_SHORT).show();Log.e(TAG, “MusicService onStart()“);mPlayer.start();super.onStart(intent, startId);}@Overridepublic void onDestroy() {Toast.makeText(this, “停止播放音乐“, Toast.LENGTH_SHORT).show();Log.e(TAG, “MusicService onDestroy()“);mPlayer.stop();super.onDestroy();}//其他对象通过bindService 方法通知该Service时该方法被调用@Overridepublic IBinder onBind(Intent intent) {Toast.makeText(this, “MusicService onBind()“ , Toast.LENGTH_SHORT).show();Log.e(TAG, “MusicService onBind()“);mPlayer.start();return null;}//其它对象通过unbindService方法通知该Service 时该方法被调用@Overridepublic boolean onUnbind(Intent intent) {Toast.makeText(this, “MusicService onUnbind()“, Toast.LENGTH_SHORT).show();Log.e(TAG, “MusicService onUnbind()“);mPlayer.stop();return super.onUnbind(intent);} } 6.2 输入和提交信息程序界面输入和提交信息程序界面(activity_main)的功能是输入人的性别和身高信息,并提交信息。