任务实施 (1) 创建项目 图 3-1 欢迎界面 首先创建一个工程, 将其命名为 BoXueGu, 指定包名为 com.boxuegu (2) 导入界面图片将欢迎界面所需要的背景图片 launch_bg.png 导入到 drawable 文件夹中, 项目的 icon 图标 app_icon.png

Size: px
Start display at page:

Download "任务实施 (1) 创建项目 图 3-1 欢迎界面 首先创建一个工程, 将其命名为 BoXueGu, 指定包名为 com.boxuegu (2) 导入界面图片将欢迎界面所需要的背景图片 launch_bg.png 导入到 drawable 文件夹中, 项目的 icon 图标 app_icon.png"

Transcription

1 第 3 章注册与登录模块 学习目标 掌握欢迎界面的开发, 能够独立制作欢迎界面 ; 掌握注册和登录模块的开发, 能够实现用户登录功能 博学谷项目的注册与登录模块主要用于创建用户账号, 管理用户信息 当用户注册成功后会跳转到登录界面, 用户登录后可以修改密码以及设置密保, 且只有设置过密保的账户才可以找回密码 本章将针对注册与登录模块进行详细讲解 3.1 欢迎界面 任务综述 在实际开发中, 开启应用程序时首先会呈现一个欢迎界面, 用于展示产品 Logo 或展示广告等, 接下来将创建博学谷项目的欢迎界面 博学谷项目的欢迎界面是由 RelativeLayout 布局和一个 TextView 控件组成, 其中 RelativeLayout 的背景图片用于展示产品 Logo,TextView 控件用于展示程序版本号 知识点 布局文件的创建与设计 ; RelativeLayout 布局 TextView 控件 ; Timer 与 TimerTask 技能点 实现 Android 项目的创建 ; 通过 Timer 实现界面延迟跳转 ; 通过 PackageManager 获取程序版本号 任务 3-1 欢迎界面 任务分析 博学谷项目的欢迎界面效果如图 3-1 所示

2 任务实施 (1) 创建项目 图 3-1 欢迎界面 首先创建一个工程, 将其命名为 BoXueGu, 指定包名为 com.boxuegu (2) 导入界面图片将欢迎界面所需要的背景图片 launch_bg.png 导入到 drawable 文件夹中, 项目的 icon 图标 app_icon.png 导入到 mipmap 文件夹中的 mipmap-hdpi 中 (mipmap 文件夹通常用于存放应用程序的启动图标, 它会根据不同手机分辨率对图标进行优化, 其他图片资源要放到 drawable 文件夹中 将图片拷贝到 mipmap 文件夹时会弹出一个对话框, 显示 mipmap-hdpi mipmap-mdpi mipmap-xhdpi mipmap-xxhdpi mipmap-xxxhdpi 五个文件夹, 按照分辨率不同选择合适的文件夹存放图片即可 ) (3) 创建欢迎界面在程序中选中 com.boxuegu 包, 在该包下创建一个 activity 包, 然后在 activity 包中创建一个 Empty Activity 类, 名为 SplashActivity 并将布局文件名指定为 activity_splash, 具体代码如 文件 3-1 所示 文件 3-1 activity_splash.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmlns:android=" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:background="@drawable/launch_bg" > 6 <TextView 7 android:id="@+id/tv_version" 8 android:layout_width="wrap_content" 9 android:layout_height="wrap_content" 10 android:layout_centerinparent="true" 11 android:textcolor="@android:color/white" 12 android:textsize="14sp"/> 13 </RelativeLayout> 从上述代码中可以看出, 通过 RelativeLayout 布局的 android:background 属性, 将布局背景设置成欢迎图片 在布局中放置一个 TextView 用于显示版本号信息, 通过 android:layout_centerinparent="true" 属性将 TextView 置于父控件的中心位置

3 (4) 修改清单文件每个应用程序都会有属于自己的 icon 图标, 同样博学谷项目也会使用自己的 icon 图标, 因此需要在 AndroidManifest.xml 的 <application> 标签中修改 icon 属性, 引入博学谷图标, 具体代码如下 : android:icon="@mipmap/app_icon" 项目创建后所有界面需要使用蓝色标题栏, 因此需要在 <application> 标签中修改 theme 属性, 去掉标题栏, 具体代码如下 : android:theme="@style/theme.appcompat.noactionbar" 博学谷项目启动时, 首先进入的是欢迎界面 SplashActivity 而不是系统默认的 MainActivity, 因此需要将欢迎界面指定为程序默认启动界面 在配置文件中将 MainActivity 的 <intent-filter> 标签以及标签中的所有内容剪切到 SplashActivity 所在的 <activity> 标签中, 具体代码如下 : <activity android:name=".activity.splashactivity" > <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> 任务 3-2 欢迎界面逻辑代码 任务分析 欢迎界面主要展示产品 Logo 和版本信息, 通常会在该界面停留一段之后自动跳转到其他界面, 因此需要在逻辑代码中设置欢迎界面暂停几秒 (3 秒 ) 后再跳转, 并获取程序的版本号 任务实施 (1) 获取版本号在 SplashActivity 中创建 init() 方法, 在该方法中获取 TextView 控件并通过 PackageManager( 包管理器 ) 获取程序版本号 ( 版本号是 build.gradle 文件中的 versionname 的值 ) 显示在 TextView 控件上 (2) 让界面延迟跳转在 init() 方法中使用 Timer 以及 TimerTask 类设置欢迎界面延迟 3 秒再跳转到主界面 (MainActivity 所对应的界面, 此界面目前为空白页面 ), 具体代码如 文件 3-2 所示 文件 3-2 SplashActivity.java 1 package com.boxuegu.activity; 2 import android.content.intent; 3 import android.content.pm.activityinfo; 4 import android.content.pm.packageinfo; 5 import android.content.pm.packagemanager; 6 import android.os.bundle; 7 import android.support.v7.app.appcompatactivity; 8 import android.widget.textview; 9 import com.boxuegu.mainactivity; 10 import com.boxuegu.r; 11 import java.util.timer; 12 import java.util.timertask;

4 13 public class SplashActivity extends AppCompatActivity { 14 private TextView tv_version; 16 protected void oncreate(bundle savedinstancestate) { 17 super.oncreate(savedinstancestate); 18 setcontentview(r.layout.activity_splash); 19 // 设置此界面为竖屏 20 setrequestedorientation(activityinfo.screen_orientation_portrait); 21 init(); 22 } 23 private void init(){ 24 tv_version=(textview) findviewbyid(r.id.tv_version); 25 try { 26 // 获取程序包信息 27 PackageInfo info= getpackagemanager().getpackageinfo(getpackagename(), 0); 28 tv_version.settext("v"+info.versionname); 29 }catch (PackageManager.NameNotFoundException e){ 30 e.printstacktrace(); 31 tv_version.settext("v"); 32 } 33 // 利用 Timer 让此界面延迟 3 秒后再跳转,timer 中有一个线程, 这个线程不断执行 task 34 Timer timer=new Timer(); 35 //timertask 实现 runnable 接口,TimerTask 类表示一个在指定时间内执行的 task 36 TimerTask task=new TimerTask() { 38 public void run() { 39 Intent intent=new Intent(SplashActivity.this,MainActivity.class); 40 startactivity(intent); 41 SplashActivity.this.finish(); 42 } 43 }; 44 timer.schedule(task, 3000); // 设置这个 task 在延迟三秒之后自动执行 45 } 46 } 第 行代码首先通过 PackageManager 的 getpackageinfo() 方法获取 PackageInfo 对象, 然后通 过该对象的 versionname 属性获取到程序的版本号, 最后通过 settext() 方法将获取到的版本号设 置到 TextView 控件上 第 行代码的作用是让程序在欢迎界面停留 3 秒后再跳转 在此段代码中主要用到两个类, 分别为 Timer 类和 TimerTask 类, 其中 Timer 类是 JDK(JavaSE Development Kit 是 Java 开发工 具包 ) 中提供的一个定时器工具, 使用时会在主线程之外开启一个单独的线程执行指定任务, 任 务可以执行一次或多次 TimerTask 类是一个实现了 Runnable 接口的抽象类, 同时代表一个可以 被 Timer 执行的任务, 因此跳转到主界面的任务代码写在 TimerTask 的 run() 方法中 Timer 的 schedule() 方法是任务调度方法, 在 3 秒之后调度 TimerTask 执行跳转操作, 实现延迟跳转功能

5 3.2 注册 任务综述 注册界面主要用于用户输入注册信息, 在注册界面中用户需要输入用户名 密码 再次输入密码 ( 确保密码输入无误 ), 当点击注册按钮时进行注册 由于博学谷项目使用的是本地数据, 因此注册成功后, 需要将用户名和密码保存在 SharedPreferences 中便于后续用户登录 为了保证账户的安全, 在保存密码时会采用 MD5 加密算法, 这种算法是不可逆的, 且具有一定的安全性 知识点 标题栏的创建 ; ImageView 控件 EditText 控件 Button 控件 ; SharedPreferences 的使用 ; setresult(result_ok, data) 方法的使用 ; MD5 加密算法 技能点 掌握注册界面的设计和逻辑构思 ; 掌握标题栏的创建以及常用控件的使用 ; 通过 SharedPreferences 实现数据的存取功能 ; 通过 setresult(result_ok, data) 方法实现界面间数据的回传 ; 通过 MD5 加密算法实现密码加密功能 ; 实现博学谷的注册功能 任务 3-3 标题栏 任务分析 在博学谷项目中, 大部分界面都有一个后退键和一个标题栏 为了便于代码重复利用, 可以将后退键 和标题栏抽取出来单独放在一个布局文件 (main_title_bar.xml) 中, 界面效果如图 3-2 所示 任务实施 (1) 创建标题栏界面 图 3-2 标题栏界面 在 res/layout 文件夹中, 创建一个布局文件 main_title_bar.xml 在该布局文件中, 放置 2 个 TextView 控件, 分别用于显示后退键 ( 后退键的样式采用背景选择器的方式 ) 和当前界面标题 ( 界面标题暂未设置, 需要在代码中动态设置 ), 并设置标题栏背景透明, 具体代码如 文件 3-3 所示 文件 3-3 main_title_bar.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmlns:android=" 3 android:id="@+id/title_bar" 4 android:layout_width="match_parent" 5 android:layout_height="50dp" 6 android:background="@android:color/transparent" >

6 7 <TextView 8 android:id="@+id/tv_back" 9 android:layout_width="50dp" 10 android:layout_height="50dp" 11 android:layout_alignparentleft="true" 12 android:layout_centervertical="true" 13 android:background="@drawable/go_back_selector" /> 14 <TextView 15 android:id="@+id/tv_main_title" 16 android:layout_width="wrap_content" 17 android:layout_height="wrap_content" 18 android:textcolor="@android:color/white" 19 android:textsize="20sp" 20 android:layout_centerinparent="true" /> 21 </RelativeLayout> (2) 创建背景选择器标题栏界面中的返回键在按下与弹起时, 返回键会有明显的区别, 这种效果可以通过背景选择器进行实现 首先将图片 iv_back_selected.png iv_back.png 导入到 drawable 文件夹中, 然后选中 drawable 文件夹, 右键选择 New Drawable resource file 选项, 创建一个背景选择器 go_back_selector.xml, 根据按钮按下和弹起的状态来切换它的背景图片, 给用户一个动态效果 当按钮按下时显示灰色图片 (iv_back_selected.png), 当按钮弹起时显示白色图片 (iv_back.png), 具体代码如 文件 3-4 所示 文件 3-4 go_back_selector.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <selector xmlns:android=" 3 <item android:drawable="@drawable/iv_back_selected" android:state_pressed="true"/> 4 <item android:drawable="@drawable/iv_back"/> 5 </selector> 任务 3-4 注册界面 任务分析 注册界面用于输入用户的注册信息, 在注册界面中需要 3 个 EditText 用于输入用户名 密码 再次确 认密码, 当点击注册按钮后完成用户注册, 界面效果如图 3-3 所示

7 任务实施 (1) 创建注册界面 图 3-3 注册界面 在 com.boxuegu.activity 包中创建一个 Empty Activity 类, 名为 RegisterActivity 并将布局文件名指定为 activity_register 在该布局文件中, 通过 <include> 标签将 main_title_bar.xml( 标题栏 ) 引入 (2) 导入界面图片将注册界面所需图片 register_bg.png default_icon.png user_name_icon.png psw_icon.png register_user_name_bg.png register_psw_bg.png register_psw_again_bg.png 导入到 drawable 文件夹中 (3) 放置界面控件在布局文件中, 放置 1 个 ImageView 控件, 用于显示用户头像 ;3 个 EditText 控件, 用于输入用户名 密码 再次输入密码 ;1 个 Button 控件作为注册按钮, 具体代码如 文件 3-5 所示 文件 3-5 activity_register.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android=" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:background="@drawable/register_bg" 6 android:orientation="vertical" > 7 <include layout="@layout/main_title_bar" /> 8 <ImageView 9 android:layout_width="70dp" 10 android:layout_height="70dp" 11 android:layout_gravity="center_horizontal" 12 android:layout_margintop="25dp" 13 android:src="@drawable/default_icon" /> 14 <EditText 15 android:id="@+id/et_user_name" 16 android:layout_width="fill_parent" 17 android:layout_height="48dp" 18 android:layout_gravity="center_horizontal"

8 19 android:layout_marginleft="35dp" 20 android:layout_marginright="35dp" 21 android:layout_margintop="35dp" android:drawablepadding="10dp" 25 android:gravity="center_vertical" 26 android:hint=" 请输入用户名 " 27 android:paddingleft="8dp" 28 android:singleline="true" 29 android:textcolor="#000000" 30 android:textcolorhint="#a3a3a3" 31 android:textsize="14sp" /> 32 <EditText android:layout_width="fill_parent" 35 android:layout_height="48dp" 36 android:layout_gravity="center_horizontal" 37 android:layout_marginleft="35dp" 38 android:layout_marginright="35dp" android:drawablepadding="10dp" 42 android:hint=" 请输入密码 " 43 android:inputtype="textpassword" 44 android:paddingleft="8dp" 45 android:singleline="true" 46 android:textcolor="#000000" 47 android:textcolorhint="#a3a3a3" 48 android:textsize="14sp" /> 49 <EditText android:layout_width="fill_parent" 52 android:layout_height="48dp" 53 android:layout_gravity="center_horizontal" 54 android:layout_marginleft="35dp" 55 android:layout_marginright="35dp" android:drawablepadding="10dp" 59 android:hint=" 请再次输入密码 " 60 android:inputtype="textpassword" 61 android:paddingleft="8dp" 62 android:singleline="true"

9 63 android:textcolor="#000000" 64 android:textcolorhint="#a3a3a3" 65 android:textsize="14sp" /> 66 <Button android:layout_width="fill_parent" 69 android:layout_height="40dp" 70 android:layout_gravity="center_horizontal" 71 android:layout_marginleft="35dp" 72 android:layout_marginright="35dp" 73 android:layout_margintop="15dp" android:text=" 注册 " android:textsize="18sp" /> 78 </LinearLayout> (4) 创建背景选择器将 register_icon_normal.png register_icon_selected.png 图片导入到 drawable 文件夹中, 并在该文件中创建注册按钮的背景选择器 register_selector.xml 当按钮按下时显示灰色图片(register_icon_selected.png), 当按钮弹起时显示橙色图片 (register_icon_normal.png), 具体代码如 文件 3-6 所示 文件 3-6 register_selector.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <selector xmlns:android=" 3 <item android:drawable="@drawable/register_icon_selected" 4 android:state_pressed="true"/> 5 <item android:drawable="@drawable/register_icon_normal"/> 6 </selector> 任务 3-5 MD5 加密算法 任务分析 MD5 的全称是 Message-Digest Algorithm 5( 信息 -- 摘要算法 ),MD5 算法简单来说就是把任意长度的字符串变换成固定长度 ( 通常是 128 位 ) 的 16 进制字符串 在存储密码过程中, 直接存储明文密码是很危险的, 因此在存储密码前需要使用 MD5 算法加密, 这样不仅提高了用户信息的安全性, 同时也增加了密码破解的难度 任务实施 (1) 创建 MD5Utils 类选中 com.boxuegu 包, 在该包下创建 utils 包, 在 utils 包中创建一个 Java 类, 名为 MD5Utils (2) 进行 MD5 加密在 MD5Utils 类中, 创建一个 md5() 方法对密码进行加密 首先通过 MessageDigest 的 getinstance() 方法获取数据加密对象 digest, 然后通过该对象的 digest() 方法对密码进行加密, 具体代码如 文件 3-7 所示 文件 3-7 MD5Utils.java

10 1 package com.boxuegu.utils; 2 import java.security.messagedigest; 3 import java.security.nosuchalgorithmexception; 4 public class MD5Utils { 5 /** 6 * md5 加密的算法 7 */ 8 public static String md5(string text) { 9 MessageDigest digest = null; 10 try { 11 digest = MessageDigest.getInstance("md5"); 12 byte[] result = digest.digest(text.getbytes()); 13 StringBuilder sb = new StringBuilder(); 14 for (byte b : result) { 15 int number = b & 0xff; 16 String hex = Integer.toHexString(number); 17 if (hex.length() == 1) { 18 sb.append("0" + hex); 19 } else { 20 sb.append(hex); 21 } 22 } 23 return sb.tostring(); 24 } catch (NoSuchAlgorithmException e) { 25 e.printstacktrace(); 26 return ""; 27 } 28 } 29 } 任务 3-6 注册界面逻辑代码 任务分析 在注册界面点击注册按钮后, 需要获取用户名, 用户密码和再次确认密码, 当两次密码相同时, 将用户名和密码 ( 经过 MD5 加密 ) 保存到 SharedPreferences 中 同时当注册成功之后需要将用户名传递到登录界面 (LoginActivity 目前还未创建 ) 中 任务实施 (1) 获取界面控件在 RegisterActivity 中创建界面控件的初始化方法 init(), 用于获取注册界面所要用到的控件以及实现控件的点击事件 (2) 保存注册信息到 SharedPreferences 中

11 接下来在 RegisterActivity 中创建一个 saveregisterinfo() 方法, 将注册成功的用户名和密码 ( 经过 MD5 加密 ) 保存到 SharedPreferences 中, 具体代码如 文件 3-8 所示 文件 3-8 RegisterActivity.java 1 package com.boxuegu.activity; 2 import android.content.intent; 3 import android.content.sharedpreferences; 4 import android.content.pm.activityinfo; 5 import android.graphics.color; 6 import android.os.bundle; 7 import android.support.v7.app.appcompatactivity; 8 import android.text.textutils; 9 import android.view.view; 10 import android.widget.button; 11 import android.widget.edittext; 12 import android.widget.relativelayout; 13 import android.widget.textview; 14 import android.widget.toast; 15 import com.boxuegu.r; 16 import com.boxuegu.utils.md5utils; 17 public class RegisterActivity extends AppCompatActivity { 18 private TextView tv_main_title; // 标题 19 private TextView tv_back; // 返回按钮 20 private Button btn_register; // 注册按钮 21 // 用户名 密码 再次输入的密码的控件 22 private EditText et_user_name,et_psw,et_psw_again; 23 // 用户名 密码 再次输入的密码的控件的获取值 24 private String username,psw,pswagain; 25 // 标题布局 26 private RelativeLayout rl_title_bar; 28 protected void oncreate(bundle savedinstancestate) { 29 super.oncreate(savedinstancestate); 30 // 设置页面布局 31 setcontentview(r.layout.activity_register); 32 // 设置此界面为竖屏 33 setrequestedorientation(activityinfo.screen_orientation_portrait); 34 init(); 35 } 36 private void init(){ 37 // 从 main_title_bar.xml 页面布局中获得对应的 UI 控件 38 tv_main_title=(textview) findviewbyid(r.id.tv_main_title); 39 tv_main_title.settext(" 注册 "); 40 tv_back=(textview) findviewbyid(r.id.tv_back); 41 rl_title_bar=(relativelayout) findviewbyid(r.id.title_bar);

12 42 rl_title_bar.setbackgroundcolor(color.transparent); 43 // 从 activity_register.xml 页面布局中获得对应的 UI 控件 44 btn_register=(button) findviewbyid(r.id.btn_register); 45 et_user_name=(edittext) findviewbyid(r.id.et_user_name); 46 et_psw=(edittext) findviewbyid(r.id.et_psw); 47 et_psw_again=(edittext) findviewbyid(r.id.et_psw_again); 48 tv_back.setonclicklistener(new View.OnClickListener() { 50 public void onclick(view v) { 51 RegisterActivity.this.finish(); 52 } 53 }); 54 btn_register.setonclicklistener(new View.OnClickListener() { 56 public void onclick(view v) { 57 // 获取输入在相应控件中的字符串 58 geteditstring(); 59 if(textutils.isempty(username)){ 60 Toast.makeText(RegisterActivity.this, " 请输入用户名 ", 61 Toast.LENGTH_SHORT).show(); 62 return; 63 }else if(textutils.isempty(psw)){ 64 Toast.makeText(RegisterActivity.this, " 请输入密码 ", 65 Toast.LENGTH_SHORT).show(); 66 return; 67 }else if(textutils.isempty(pswagain)){ 68 Toast.makeText(RegisterActivity.this, " 请再次输入密码 ", 69 Toast.LENGTH_SHORT).show(); 70 return; 71 }else if(!psw.equals(pswagain)){ 72 Toast.makeText(RegisterActivity.this, " 输入两次的密码不一样 ", 73 Toast.LENGTH_SHORT).show(); 74 return; 75 }else if(isexistusername(username)){ 76 Toast.makeText(RegisterActivity.this, " 此账户名已经存在 ", 77 Toast.LENGTH_SHORT).show(); 78 return; 79 }else{ 80 Toast.makeText(RegisterActivity.this, " 注册成功 ", 81 Toast.LENGTH_SHORT).show(); 82 // 把用户名和密码保存到 SharedPreferences 中 83 saveregisterinfo(username, psw); 84 // 注册成功后把用户名传递到 LoginActivity.java 中 85 Intent data =new Intent();

13 86 data.putextra("username", username); 87 setresult(result_ok, data); 88 RegisterActivity.this.finish(); 89 } 90 } 91 }); 92 } 93 /** 94 * 获取控件中的字符串 95 */ 96 private void geteditstring(){ 97 username=et_user_name.gettext().tostring().trim(); 98 psw=et_psw.gettext().tostring().trim(); 99 pswagain=et_psw_again.gettext().tostring().trim(); 100 } 101 /** 102 * 从 SharedPreferences 中读取输入的用户名, 判断 SharedPreferences 中是否有此用户名 103 */ 104 private boolean isexistusername(string username){ 105 boolean has_username=false; 106 SharedPreferences sp=getsharedpreferences("logininfo", MODE_PRIVATE); 107 String sppsw=sp.getstring(username, ""); 108 if(!textutils.isempty(sppsw)) { 109 has_username=true; 110 } 111 return has_username; 112 } 113 /** 114 * 保存用户名和密码到 SharedPreferences 中 115 */ 116 private void saveregisterinfo(string username,string psw){ 117 String md5psw=md5utils.md5(psw); // 把密码用 MD5 加密 118 //logininfo 表示文件名 119 SharedPreferences sp=getsharedpreferences("logininfo", MODE_PRIVATE); 120 SharedPreferences.Editor editor=sp.edit();// 获取编辑器 121 // 以用户名为 key, 密码为 value 保存到 SharedPreferences 中 122 editor.putstring(username, md5psw); 123 editor.commit();// 提交修改 124 } 125 } 第 行代码主要是处理点击注册按钮逻辑 当点击注册按钮时, 首先获取 3 个 EditText 控件 ( 用户名 密码 再次输入密码 ) 的输入值, 判断它们是否为空, 密码和再次输入的密码是否一 致, 用户名是否已经存在, 之后将用户名和密码 (MD5 加密之后的密码 ) 保存到 SharedPreferences 中

14 第 行代码是调用回传数据的方法 setresult(result_ok, data) 把注册成功的用户名传递到登录界面 第 行代码用于判断用户名是否已经存在, 通过输入的用户名查询 SharedPreferences 中是否已经存在该用户 第 行代码用于 MD5 加密, 通过调用 MD5Utils 的 md5() 方法对密码进行加密, 之后将用户名和密码保存到 SharedPreferences 中 3.3 登录 任务综述 登录界面主要是为用户提供一个输入登录信息的界面, 当点击登录按钮时需要在 SharedPreferences 中查询输入的用户名是否有对应的密码, 如果有则用此密码与当前输入的密码 ( 需 MD5 加密 ) 进行比对, 如果信息一致, 则登录成功, 并把登录成功的状态和用户名保存到 SharedPreferences 中, 便于后续判断登录状态和获取用户名 如果登录失败, 则有两种情况, 一种是输入的用户名和密码不一致 ; 另一种是此用户名不存在 知识点 标题栏的引用 ; EditText 控件 Button 控件 ; SharedPreferences 的使用 ; setresult(result_ok, data) 方法的使用 ; Intent 的使用 技能点 掌握登录界面的设计和逻辑构思 ; 通过 SharedPreferences 实现数据的存取功能 ; 通过 setresult(result_ok, data) 方法实现界面间数据的回传 ; 通过 Intent 实现 Activity 之间的跳转 ; 实现博学谷的登录功能 任务 3-7 登录界面 任务分析 登录界面主要是为用户提供一个登录的入口, 在登录界面中用户可以输入用户名和密码, 点击登录按钮 若用户还未注册, 可以点击 立即注册 进入注册界面 ; 若用户忘记密码, 则可以点击 找回密码 进入找回密码界面 ( 找回密码界面未创建 ), 界面效果如图 3-4 所示

15 任务实施 (1) 创建登录界面 图 3-4 登录界面 在 com.boxuegu.activity 包中创建一个 Activity 类, 名为 LoginActivity 并将布局文件名指定为 activity_login 在该布局文件中, 通过 <include> 标签将 main_title_bar.xml( 标题栏 ) 引入 (2) 导入界面图片将登录界面所需图片 login_bg.png login_user_name_bg.png login_psw_bg.png 导入到 drawable 文件夹中 (3) 放置界面控件在布局文件中, 放置 1 个 ImageView 控件, 用于显示用户头像 ;2 个 EditText 控件, 分别用于输入用户名和密码 ;1 个 Button 控件作为登录按钮 ( 和注册按钮用同一个背景选择器 );2 个 TextView 控件, 分别用于显示文字 立即注册 和 找回密码?, 具体代码如 文件 3-9 所示 文件 3-9 activity_login.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android=" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:background="@drawable/login_bg" 6 android:orientation="vertical" > 7 <include layout="@layout/main_title_bar" /> 8 <ImageView 9 android:id="@+id/iv_head" 10 android:layout_width="70dp" 11 android:layout_height="70dp" 12 android:layout_margintop="25dp" 13 android:layout_gravity="center_horizontal" 14 android:background="@drawable/default_icon" /> 15 <EditText 16 android:id="@+id/et_user_name" 17 android:layout_width="fill_parent"

16 18 android:layout_height="48dp" 19 android:layout_margintop="35dp" 20 android:layout_marginleft="35dp" 21 android:layout_marginright="35dp" 22 android:layout_gravity="center_horizontal" android:drawablepadding="10dp" 26 android:paddingleft="8dp" 27 android:gravity="center_vertical" 28 android:hint=" 请输入用户名 " 29 android:singleline="true" 30 android:textcolor="#000000" 31 android:textcolorhint="#a3a3a3" 32 android:textsize="14sp" /> 33 <EditText android:layout_width="fill_parent" 36 android:layout_height="48dp" 37 android:layout_gravity="center_horizontal" 38 android:layout_marginleft="35dp" 39 android:layout_marginright="35dp" android:drawablepadding="10dp" 43 android:paddingleft="8dp" 44 android:hint=" 请输入密码 " 45 android:inputtype="textpassword" 46 android:singleline="true" 47 android:textcolor="#000000" 48 android:textcolorhint="#a3a3a3" 49 android:textsize="14sp" /> 50 <Button android:layout_width="fill_parent" 53 android:layout_height="40dp" 54 android:layout_margintop="15dp" 55 android:layout_marginleft="35dp" 56 android:layout_marginright="35dp" 57 android:layout_gravity="center_horizontal" android:text=" 登录 " android:textsize="18sp" />

17 62 <LinearLayout 63 android:layout_width="fill_parent" 64 android:layout_height="fill_parent" 65 android:layout_margintop="8dp" 66 android:layout_marginleft="35dp" 67 android:layout_marginright="35dp" 68 android:gravity="center_horizontal" 69 android:orientation="horizontal" > 70 <TextView android:layout_width="0dp" 73 android:layout_height="wrap_content" 74 android:layout_weight="1" 75 android:gravity="center_horizontal" 76 android:padding="8dp" 77 android:text=" 立即注册 " android:textsize="14sp" /> 80 <TextView android:layout_width="0dp" 83 android:layout_height="wrap_content" 84 android:layout_weight="1" 85 android:gravity="center_horizontal" 86 android:padding="8dp" 87 android:text=" 找回密码?" android:textsize="14sp" /> 90 </LinearLayout> 91 </LinearLayout> 任务 3-8 登录界面逻辑代码 任务分析 当点击登录按钮时, 需要先判断用户名和密码是否为空, 若为空则提示请输入用户名和密码 ; 若不为空则获取用户输入的用户名, 由于博学谷项目用的是本地数据, 因此根据用户名在 SharedPreferences 中查询是否有对应的密码, 如果有对应的密码并且与用户输入的密码 ( 需 MD5 加密 ) 比对一致, 则登录成功 任务实施 (1) 获取界面控件在 LoginActivity 中创建界面控件的初始化方法 init(), 用于获取登录界面所要用的控件并设置登录按钮 返回键 立即注册 找回密码的点击事件 (2) 获取回传数据

18 重写 onactivityresult() 方法, 通过 data.getstringextra() 方法来获取注册成功的一个用户名, 并将其显示在用户名控件上 (3) 保存登录状态到 SharedPreferences 中由于在后续创建 我 的界面时, 需要根据登录状态来设置界面的图标和用户名, 因此需要创建 saveloginstatus() 方法在登录成功时把登录状态和用户名保存到 SharedPreferences 中, 具体代码如 文件 3-10 所示 文件 3-10 LoginActivity.java 1 package com.boxuegu.activity; 2 import android.content.intent; 3 import android.content.sharedpreferences; 4 import android.content.pm.activityinfo; 5 import android.support.v7.app.appcompatactivity; 6 import android.os.bundle; 7 import android.text.textutils; 8 import android.view.view; 9 import android.widget.button; 10 import android.widget.edittext; 11 import android.widget.textview; 12 import android.widget.toast; 13 import com.boxuegu.r; 14 import com.boxuegu.utils.md5utils; 15 public class LoginActivity extends AppCompatActivity { 16 private TextView tv_main_title; 17 private TextView tv_back,tv_register,tv_find_psw; 18 private Button btn_login; 19 private String username,psw,sppsw; 20 private EditText et_user_name,et_psw; 22 protected void oncreate(bundle savedinstancestate) { 23 super.oncreate(savedinstancestate); 24 setcontentview(r.layout.activity_login); 25 // 设置此界面为竖屏 26 setrequestedorientation(activityinfo.screen_orientation_portrait); 27 init(); 28 } 29 /** 30 * 获取界面控件 31 */ 32 private void init(){ 33 tv_main_title=(textview) findviewbyid(r.id.tv_main_title); 34 tv_main_title.settext(" 登录 "); 35 tv_back=(textview) findviewbyid(r.id.tv_back); 36 tv_register=(textview) findviewbyid(r.id.tv_register); 37 tv_find_psw= (TextView) findviewbyid(r.id.tv_find_psw);

19 38 btn_login=(button) findviewbyid(r.id.btn_login); 39 et_user_name=(edittext) findviewbyid(r.id.et_user_name); 40 et_psw=(edittext) findviewbyid(r.id.et_psw); 41 // 返回键的点击事件 42 tv_back.setonclicklistener(new View.OnClickListener() { 44 public void onclick(view v) { 45 LoginActivity.this.finish(); 46 } 47 }); 48 // 立即注册控件的点击事件 49 tv_register.setonclicklistener(new View.OnClickListener() { 51 public void onclick(view v) { 52 Intent intent=new Intent(LoginActivity.this,RegisterActivity.class); 53 startactivityforresult(intent, 1); 54 } 55 }); 56 // 找回密码控件的点击事件 57 tv_find_psw.setonclicklistener(new View.OnClickListener() { 59 public void onclick(view v) { 60 // 跳转到找回密码界面 ( 此界面暂时未创建 ) 61 } 62 }); 63 // 登录按钮的点击事件 64 btn_login.setonclicklistener(new View.OnClickListener() { 66 public void onclick(view v) { 67 username=et_user_name.gettext().tostring().trim(); 68 psw=et_psw.gettext().tostring().trim(); 69 String md5psw=md5utils.md5(psw); 70 sppsw=readpsw(username); 71 if(textutils.isempty(username)){ 72 Toast.makeText(LoginActivity.this, " 请输入用户名 ", 73 Toast.LENGTH_SHORT).show(); 74 return; 75 }else if(textutils.isempty(psw)){ 76 Toast.makeText(LoginActivity.this, " 请输入密码 ", 77 Toast.LENGTH_SHORT).show(); 78 return; 79 }else if(md5psw.equals(sppsw)){ 80 Toast.makeText(LoginActivity.this, " 登录成功 ", 81 Toast.LENGTH_SHORT).show();

20 82 // 保存登录状态和登录的用户名 83 saveloginstatus(true,username); 84 // 把登录成功的状态传递到 MainActivity 中 85 Intent data=new Intent(); 86 data.putextra("islogin", true); 87 setresult(result_ok, data); 88 LoginActivity.this.finish(); 89 return; 90 }else if((!textutils.isempty(sppsw)&&!md5psw.equals(sppsw))){ 91 Toast.makeText(LoginActivity.this, " 输入的用户名和密码不一致 ", 92 Toast.LENGTH_SHORT).show(); 93 return; 94 }else{ 95 Toast.makeText(LoginActivity.this, " 此用户名不存在 ", 96 Toast.LENGTH_SHORT).show(); 97 } 98 } 99 }); 100 } 101 /** 102 * 从 SharedPreferences 中根据用户名读取密码 103 */ 104 private String readpsw(string username){ 105 SharedPreferences sp=getsharedpreferences("logininfo", MODE_PRIVATE); 106 return sp.getstring(username, ""); 107 } 108 /** 109 * 保存登录状态和登录用户名到 SharedPreferences 中 110 */ 111 private void saveloginstatus(boolean status,string username){ 112 //logininfo 表示文件名 113 SharedPreferences sp=getsharedpreferences("logininfo", MODE_PRIVATE); 114 SharedPreferences.Editor editor=sp.edit(); // 获取编辑器 115 editor.putboolean("islogin", status); // 存入 boolean 类型的登录状态 116 editor.putstring("loginusername", username);// 存入登录时的用户名 117 editor.commit(); // 提交修改 118 } 120 protected void onactivityresult(int requestcode, int resultcode, Intent data) { 121 super.onactivityresult(requestcode, resultcode, data); 122 if(data!=null){ 123 // 从注册界面传递过来的用户名 124 String username =data.getstringextra("username"); 125 if(!textutils.isempty(username)){

21 126 et_user_name.settext(username); 127 // 设置光标的位置 128 et_user_name.setselection(username.length()); 129 } 130 } 131 } 132 } 第 行代码主要是调用 startactivityforresult(intent, 1) 方法跳转到注册界面, 目的是从注册界面回传数据到登录界面 第一个参数 intent 是数据载体, 第二个参数 requestcode 是请求码, 一般是大于等于 0 的整数 第 行代码用于实现点击登录, 当点击登录按钮时, 获取用户输入的用户名和密码, 若用户名密码为空, 则提示用户输入用户名或密码 若输入的密码与 SharedPreferences 中保存的密码一致, 则保存用户的登录状态, 并将登录成功的状态发送到 MainActivity 第 行的作用是当用户登录成功后, 把登录状态和登录的用户名保存到 SharedPreferences 中 第 行代码主要是获取注册界面回传过来的用户名, 设置用户名到 et_user_name 控件上, 并调用 et_user_name 控件的 setselection() 方法来设置光标位置 3.4 本章小结 本章主要讲解了博学谷项目的欢迎界面 注册模块 登录模块功能 这三个功能模块是本项目最简单的部分, 因此放在开篇讲解, 读者先熟悉下项目的开发流程以及开发步骤, 方便后续学习 思考题 1. 请思考如何使用 MD5 加密算法对密码进行加密? 2. 请思考博学谷项目中如何实现用户登录的?

res/layout 目录下的 main.xml 源码 : <?xml version="1.0" encoding="utf 8"?> <TabHost android:layout_height="fill_parent" xml

res/layout 目录下的 main.xml 源码 : <?xml version=1.0 encoding=utf 8?> <TabHost android:layout_height=fill_parent xml 拓展训练 1- 界面布局 1. 界面布局的重要性做应用程序, 界面是最基本的 Andorid 的界面, 需要写在 res/layout 的 xml 里面, 一般情况下一个 xml 对应一个界面 Android 界面布局有点像写 html( 连注释代码的方式都一样 ), 要先给 Android 定框架, 然后再在框架里面放控件,Android 提供了几种框架,AbsoluteLayout,LinearLayout,

More information

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new ListView 自訂排版 主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new int[]{r.drawable.dog1, R.drawable.dog2,

More information

预览图 : (2) 在 SelectCity.java 中增加控件, 用于绑定 select_city 文件的 ListView, TextView,EditTest 等控件 代码和注释如下 :

预览图 : (2) 在 SelectCity.java 中增加控件, 用于绑定 select_city 文件的 ListView, TextView,EditTest 等控件 代码和注释如下 : EditText 实现城市搜索 1801210778 邹宇航 摘要 : 使用 EditText 实现搜索城市的功能, 以此为依据更新 ListView 1. 效果图 : 2. 主要步骤 (1) 在 select-city.xml 布局文件中中添加 EditText 控件用作搜索框, 然后添加 ListView 控件用来显示城市名字内容 代码如下 : 预览图 : (2) 在 SelectCity.java

More information

單步除錯 (1/10) 打開 Android Studio, 點選 Start a new Android Studio project 建立專案 Application name 輸入 BMI 點下 Next 2 P a g e

單步除錯 (1/10) 打開 Android Studio, 點選 Start a new Android Studio project 建立專案 Application name 輸入 BMI 點下 Next 2 P a g e Android Studio Debugging 本篇教學除了最基本的中斷點教學之外, 還有條件式中斷的教學 條件式中斷是進階的除錯技巧, 在某些特定情況中, 我們有一個函數可能會被呼叫數次, 但是我們只希望在某種條件成立時才進行中斷, 進而觀察變數的狀態 而條件式中斷這項技巧正是符合這項需求 本教學分兩部分 單步除錯 (Page2~11, 共 10) 條件式中斷點 (Page12~17, 共 6)

More information

RecyclerView and CardVew

RecyclerView and CardVew RecyclerView and CardView 建國科技大學資管系饒瑞佶 2017/10 V1 CardView CardView A CardView is a ViewGroup. Like any other ViewGroup, it can be added to youractivity or Fragment using a layout XML file. To create an

More information

内文-2.indd

内文-2.indd 客户端服务端音乐资源信息 : 1. 项目需求从本项目开始, 我们一起开发一个简单的在线音乐播放器, 它具有以下功能 (1) 程序启动时显示一个启动画面, 如图 1-1 所示 (2) 在程序主页面显示服务器上的歌曲列表, 包括歌手名与歌曲名, 单击列表条目可实现在线音乐播放, 单击 播放 暂停 上一曲 下一曲 按钮可实现对应的功能, 进度条可以显示歌曲播放进度, 如图 1-2 所示 图 1-1 程序启动画面

More information

Android Fragment

Android Fragment Android Fragment 建國科技大學資管系饒瑞佶 2017/10 V1 Android 3.0 後才支援 Fragment 解決部分 App 適應螢幕大小的問題 它類似於 Activity, 可以像 Activity 可以擁有自己的版面設計, 也和 Activity 一樣有自己的生命週期 ( 具備 oncreate() oncreateview() 與 onpause() 方法 ) LifeCycle

More information

0511-Android程式之GPS應用_專題週記4

0511-Android程式之GPS應用_專題週記4 逢甲大學通訊工程學系專題研究 Android 程式之 GPS 應用 專題週記 0511 學生姓名 陳彥儒 D0035131 廖元譽 D0077791 指導老師 楊豐瑞老師繳交日期 2014.05.11 1 匯入 GoogleMap 1.1 取得授權步驟 目前進度 取得 Google 授權鑰匙 實作程式尚未成功 1.1.1 建立個人的 keystore 1.1.2 由個人的 keystore 查詢 SHA1

More information

Dynamic Layout in Android

Dynamic Layout in Android Dynamic Layout in Android 建國科技大學資管系 饒瑞佶 2013/5 V1 Layout 多半都透過 res/layout/xml 格式設定來達成 Android 是 OOP, 所以可以動態產生 Layout 重點是 Layout 的階層關係 (Hierarchy) 需要處理對應事件 最後一樣用 setcontentview 加入 Layout 一 加入現有 Layout 中

More information

Android Service

Android Service Android Service- 播放音樂 建國科技大學資管系 饒瑞佶 2013/7 V1 Android Service Service 是跟 Activity 並行 一個音樂播放程式若沒使用 Service, 即使按 home 鍵畫面離開之後, 音樂還是照播 如果再執行一次程式, 新撥放的音樂會跟先前撥放的一起撥, 最後程式就會出錯 執行中的程式完全看不到! 但是, 寫成 Service 就不同了

More information

图 6-1 主界面 MainActivity 界面对应的布局文件 (activity_main.xml) 如下所示 : <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="

图 6-1 主界面 MainActivity 界面对应的布局文件 (activity_main.xml) 如下所示 : <?xml version=1.0 encoding=utf-8?> <RelativeLayout xmlns:android= 第 6 章广播接收者 应用案例 案例 6-1 CallRecord( 通话记录 ) 一 案例描述 1 考核知识点 030006001: 广播接收者简介 030006002: 广播接收者的创建 2 练习目标 广播的静态注册和使用 使用广播处理处理事件 3 需求分析手机最重要的功能就是通话功能, 同样储存通话记录也是必不可少的 该案例使用广 播接收者自己实现通话记录的功能 包括呼出电话 已接来电 未接来电以及通话产生的

More information

用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應

用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應 專題進度 老師 : 趙啟時老師 學生 : 陳建廷 2013/10/13 用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應 程式碼 : package com.example.phone; import java.util.arraylist;

More information

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 odps-sdk 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基 开放数据处理服务 ODPS SDK SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基础功能的主体接口, 搜索关键词 "odpssdk-core" 一些

More information

Microsoft Word - weather12 刷新按钮动画+搜索框+bug处理.docx

Microsoft Word - weather12 刷新按钮动画+搜索框+bug处理.docx 一 刷新按钮的动画效果 : 在刷新按钮的位置做两个按钮的布局, 一个是原来的静态图片, 一个是旋转的动画, 然 后控制这两个效果的显示和隐藏 ( 一 ) 刷新按钮的 style: 1. 在 app/src/main/res/values/ styles.xml 文件里添加一个 style: 2. 在 drawable 文件夹下新建一个 title_update_anim.xml, 添加如下内容 注

More information

Android + NFC

Android + NFC Android + NFC 建國科技大學資管系饒瑞佶 2017/3 v1 讀取 Tag UUID Android 2.3.3 (API Level 10) 才有支援完整的 NFC 功能 只要 NFC 相容都讀的到 (NFC 或 Mifare) 建立新專案修改 AndroidManifest.xml 加入 , 如果有 NFC Tag 進入感測範圍, 本 App 也會變成可處理的

More information

Android 开发教程

Android 开发教程 封面 1 文件存取编程基础 文件 文件可以用来存储比使用引用更大数量的数据 Android 提供方法来读 写文件 只有本地文件可以被访问 优点 : 可以存储大容量的数据 缺点 : 文件更新或是格式改变可能会导致巨大的编程工作 文件操作 读文件 Context.openFileInput(String name) 打开一个与应用程序联系的私有文件输入流 当文件不存在时抛出 FileNotFoundException

More information

Microsoft Word - 第3章 Activity.doc

Microsoft Word - 第3章 Activity.doc 第 3 章 Activity 学习目标 u 掌握 Activity 的生命周期 u 掌握 Activity 的四种启动模式 u 掌握显式意图和隐式意图的使用 u 学会使用 Intent 传递数据在现实生活中, 经常会使用手机进行打电话 发短信 玩游戏等, 这就需要与手机界面进行交互 在 Android 系统中, 用户与程序的交互是通过 Activity 完成的 同时 Activity 也是 Android

More information

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页 第 1 页共 32 页 crm Mobile V1.0 for IOS 用户手册 一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页 二 crm Mobile 界面介绍 : 第 3 页共 32 页 三 新建 (New) 功能使用说明 1 选择产品 第 4 页共 32 页 2 填写问题的简要描述和详细描述 第 5 页共

More information

2 从列表选择在添加黑名单界面中, 点击 从联系人中添加 按钮时, 会跳转到联系人列表界面, 点击其中的任意一个联系人, 此时该联系人的电话号码和姓名会显示在添加黑名单界面的编辑框中, 点击下方的 添加 按钮, 此时会将该号码添加到黑名单中, 并在主界面中展示, 如图 3-2 所示 图 3-2 从联

2 从列表选择在添加黑名单界面中, 点击 从联系人中添加 按钮时, 会跳转到联系人列表界面, 点击其中的任意一个联系人, 此时该联系人的电话号码和姓名会显示在添加黑名单界面的编辑框中, 点击下方的 添加 按钮, 此时会将该号码添加到黑名单中, 并在主界面中展示, 如图 3-2 所示 图 3-2 从联 第 3 章通讯卫士模块 了解通讯卫士模块功能 掌握 SQLite 数据库的使用 掌握如何使用广播接收者拦截电话和短信在日常生活中, 使用手机时经常会被某些电话或短信骚扰, 例如推销保险 中奖信息等, 为此, 我们开发了通讯卫士模块, 该模块可以将骚扰电话或垃圾短信添加到黑名单中, 并对其进行拦截 本章将针对通讯卫士模块进行详细讲解 3.1 模块概述 3.1.1 功能介绍 通讯卫士模块的主要功能是进行黑名单拦截,

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc 第 3 章 多个用户界面的程序设计 3.1 页面的切换与传递参数值 3.1.1 传递参数组件 Intent Intent 是 Android 系统的一种运行时的绑定机制, 在应用程序运行时连接两个不同组件 在 Android 的应用程序中不管是页面切换还是传递数据或是调用外部程序都可能要用到 Intent Intent 负责对应用中某次操作的动作 动作涉及的数据 附加数据进行描述, Android

More information

ShareText

ShareText 作者 : 林致宇 日期 :2012/1/23 問題 : 如何分享分享文字資訊給其它的應用程式? 解答 : 有時候我們可能會希望 我們的應用程式的資訊 能夠讓使用者分享出去, 讓使用者能夠將此資訊傳送簡訊給其好友或寄電子郵件的方式寄給其好友, 這份文件將示範如何寫出這樣的應用程式 本文件將產出兩個 App, 第一個 App 是 分享資料的來源, 名為 CopyPaste_Source, 功能非常簡單,

More information

Microsoft Word - 01.DOC

Microsoft Word - 01.DOC 第 1 章 JavaScript 简 介 JavaScript 是 NetScape 公 司 为 Navigator 浏 览 器 开 发 的, 是 写 在 HTML 文 件 中 的 一 种 脚 本 语 言, 能 实 现 网 页 内 容 的 交 互 显 示 当 用 户 在 客 户 端 显 示 该 网 页 时, 浏 览 器 就 会 执 行 JavaScript 程 序, 用 户 通 过 交 互 式 的

More information

建立Android新專案

建立Android新專案 Android 智 慧 型 手 機 程 式 設 計 Android WebService 建 國 科 技 大 學 資 管 系 饒 瑞 佶 2012/4 V1 2012/8 V2 2013/5 V3 2014/10 v4 提 醒 這 節 的 內 容 針 對 的 是 MS 的 Web Service 或 是 使 用 SOAP(Simple Object Access Protocol) 標 準 建 立

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc 第 章.1 Android UI 基本概念 用户界面 (User Interface,UI) 是用户与设备之间进行信息交流的直接媒介, 是决定用户体验最重要的部分 相比于早期的计算机的主要交互界面 批处理界面和命令行界面, 现在更为流行的是更简单直接的用户图形界面 (Graphical User Interface, GUI) GUI 简单易用, 受众面广, 直接推动了个人计算机的发展 目前, 主流大众的操作系统都采用了

More information

幻灯片 1

幻灯片 1 Delivering accurate maps to Chinese Android users 为中国安卓用户提供准确的地图服务 Work at Mapbox includes: Android apps, demos, starter kits, documentation, support, syncing Android team with other departments, etc.

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes Java application Java main applet Web applet Runnable Thread CPU Thread 1 Thread 2 Thread 3 CUP Thread 1 Thread 2 Thread 3 ,,. (new) Thread (runnable) start( ) CPU (running) run ( ) blocked CPU sleep(

More information

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入 100 年 特 種 考 試 地 方 政 府 公 務 人 員 考 試 試 題 等 別 : 三 等 考 試 類 科 : 資 訊 處 理 科 目 : 系 統 分 析 與 設 計 一 請 參 考 下 列 旅 館 管 理 系 統 的 使 用 案 例 圖 (Use Case Diagram) 撰 寫 預 約 房 間 的 使 用 案 例 規 格 書 (Use Case Specification), 繪 出 入

More information

Lecture01_Android介绍

Lecture01_Android介绍 移动平台应用软件开发 Android 介绍 主讲 : 张齐勋 zhangqx@ss.pku.edu.cn 移动平台应用软件开发 课程建设小组 北京大学 二零一七年秋北京 Android是什么 Android不仅仅是一个操作系统 它更是一个完整的软件框 架 Android基于Linux内核 2005年Google公司收购了Android公司 Google公司选择使用Apache许可证开放Android源码

More information

建模与图形思考

建模与图形思考 C03_c 基 於 軟 硬 整 合 觀 點 JNI: 从 C 调 用 Java 函 数 ( c) By 高 煥 堂 3 How-to: 基 於 軟 硬 整 合 觀 點 从 C 调 用 Java 函 数 如 果 控 制 点 摆 在 本 地 C 层, 就 会 常 常 1. 从 本 地 C 函 数 去 调 用 Java 函 数 ; 2. 从 本 地 C 函 数 去 存 取 Java 层 对 象 的 属 性

More information

单击以编辑母片 Content 标题样式 LinearLayout 排版模式 TableLayout 排版模式 RelativeLayout 排版模式 AbsoluteLayout 排版模式 FrameLayout 排版模式 GridLayout 排版模式 TabWidget 切換卡 Lab 5 2

单击以编辑母片 Content 标题样式 LinearLayout 排版模式 TableLayout 排版模式 RelativeLayout 排版模式 AbsoluteLayout 排版模式 FrameLayout 排版模式 GridLayout 排版模式 TabWidget 切換卡 Lab 5 2 单击以编辑母片标题样式 安卓系统 Android 的排版 授课老师 : 谢兆贤 2016/4/18 1 单击以编辑母片 Content 标题样式 LinearLayout 排版模式 TableLayout 排版模式 RelativeLayout 排版模式 AbsoluteLayout 排版模式 FrameLayout 排版模式 GridLayout 排版模式 TabWidget 切換卡 Lab 5

More information

JavaIO.PDF

JavaIO.PDF O u t p u t S t ream j a v a. i o. O u t p u t S t r e a m w r i t e () f l u s h () c l o s e () public abstract void write(int b) throws IOException public void write(byte[] data) throws IOException

More information

Android 开发教程

Android 开发教程 封面 1 GUI 可视化设计器 DroidDraw DroidDraw 是一个基于 Java Swing 的 Android 界面设计器, 可以通过它来生成复杂的 Android Layout XML 文 件,Android 的 Layout 和 Swing Layout 中有很好的对应, 设计器的代码编写起来比较容易 2 AnDroidDraw AnDroidDraw 是一个与 DroidDraw

More information

中 文 摘 要 智 慧 型 手 機 由 於 有 強 大 的 功 能, 以 及 優 渥 的 便 利 性, 還 能 與 網 路 保 持 隨 時 的 鏈 結 與 同 步 更 新, 因 此 深 受 廣 大 消 費 者 喜 愛, 當 然, 手 機 遊 戲 也 成 為 現 代 人 不 可 或 缺 的 娛 樂 之

中 文 摘 要 智 慧 型 手 機 由 於 有 強 大 的 功 能, 以 及 優 渥 的 便 利 性, 還 能 與 網 路 保 持 隨 時 的 鏈 結 與 同 步 更 新, 因 此 深 受 廣 大 消 費 者 喜 愛, 當 然, 手 機 遊 戲 也 成 為 現 代 人 不 可 或 缺 的 娛 樂 之 臺 北 市 大 安 高 級 工 業 職 業 學 校 資 訊 科 一 百 零 一 學 年 度 專 題 製 作 報 告 ------ 以 Android 製 作 ------ ----- 連 線 塔 防 遊 戲 ------ Tower defense game using Internet technology 班 級 : 資 訊 三 甲 組 別 : A9 組 組 員 : 葉 冠 麟 (9906129)

More information

第一章 Android 简介与开发环境搭建

第一章 Android 简介与开发环境搭建 安卓开发环境与常用布局 第一章 Android 简介与开发环境搭建 本章目标 3G 的概念 Android 的改变 Android 开发环境的搭建编写第一个 Android 程序 Android 程序的目录结构 手机发展史 1. 3G 的概念 3G 全称为 :3rd Generation, 中文含义即为第三代数字通信, 是指将无线通信与国际互联网等多媒体通信结合的新一代移动通信系统 2. 符合 3G

More information

Database_001

Database_001 作者 : 林致宇日期 :2011/10/26 主要參考來源 : http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applicat ions/ 問題 : 如在存取一個已經建立好的資料庫? 解答 : 有一些應用程式會需要讀取已經建立好的資料庫, 例如一個試題測驗應用程式, 裡面的試題可能已經於電腦上, 使用任何的

More information

小应用 Magic8

小应用 Magic8 胡家威 计研135班 http://hujiaweibujidao.github.io/ 小应用 Magic8 Android 系统简介 Android 应用结构 Android 四大组件 Activity 生命周期 Android 资源管理 UI 组件和容器组件 内容概要 ( 上 ) Android 系统简介 Android 市场份额 Android 是如何诞生的? Android 之父 :Andy

More information

Microsoft PowerPoint - 05.Android 介面元件-RelativeLayout、Button、TextVeiw、EditText

Microsoft PowerPoint - 05.Android 介面元件-RelativeLayout、Button、TextVeiw、EditText 計劃名稱 : 104 年度教育部資通訊軟體創新人才推升推廣計畫跨校資源中心 : 雲端運算 ( 國立中山大學 ) 課程名稱 : 網路及平台服務 Part1- 課程教材 教材名稱 :Android 介面元件 -RelativeLayout Button TextVeiw EditText 國立高雄大學資訊工程學系張保榮教授 大綱 RelativeLayout 版面配置 Button 版面配置 TextView

More information

Microsoft Word - 02.目錄.doc

Microsoft Word - 02.目錄.doc 目錄 -1- 目錄 序 準備篇 一 使用說明... 0-2 二 標示說明... 0-6 三 注意事項... 0-7 第一類 Android 基礎知識 -UI 設計及語法應用 101. 整存整付計算機... 1-2 102. 電費計算機... 1-8 103. 點餐系統... 1-18 104. 計算 BMI 值... 1-23 105. MENU 功能選單... 1-36 106. 畫廊展示...

More information

《大话设计模式》第一章

《大话设计模式》第一章 第 1 章 代 码 无 错 就 是 优? 简 单 工 厂 模 式 1.1 面 试 受 挫 小 菜 今 年 计 算 机 专 业 大 四 了, 学 了 不 少 软 件 开 发 方 面 的 东 西, 也 学 着 编 了 些 小 程 序, 踌 躇 满 志, 一 心 要 找 一 个 好 单 位 当 投 递 了 无 数 份 简 历 后, 终 于 收 到 了 一 个 单 位 的 面 试 通 知, 小 菜 欣 喜

More information

<android.support.v7.widget.recyclerview android:layout_width="0dp" android:layout_height="0dp" android:layout_marginbottom

<android.support.v7.widget.recyclerview android:layout_width=0dp android:layout_height=0dp android:layout_marginbottom Android 天气预报简单记录 ( 二 ) 主要内容使用 RecyclerView 显示所有城市和未来 4 天天气使用 SearchView 来实现查询基于百度地图 API 实现定位, 更新天气 ViewPager 实现介绍界面使用 RecyclerView 显示所有城市和未来 4 天天气 RecyclerView 是 support.v7 包中的控件, 和 ListView 类似, 十分的灵活,

More information

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit Tomcat Web JUnit Cactus JUnit Java Cactus JUnit 26.1 JUnit Java JUnit JUnit Java JSP Servlet JUnit Java Erich Gamma Kent Beck xunit JUnit boolean JUnit Java JUnit Java JUnit Java 26.1.1 JUnit JUnit How

More information

untitled

untitled JavaEE+Android - 6 1.5-2 JavaEE web MIS OA ERP BOSS Android Android Google Map office HTML CSS,java Android + SQL Sever JavaWeb JavaScript/AJAX jquery Java Oracle SSH SSH EJB+JBOSS Android + 1. 2. IDE

More information

Android Android Android SDK iv

Android Android Android SDK iv Android Market Google Android SDK Apple Google Microsoft b2c b 2010 Internet Android how why iii Android 240... Android Android SDK iv Android Market Google Android SDK Visual C++ Java N-tier J2EE Unix/Linux

More information

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0,

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0, http://debut.cis.nctu.edu.tw/~chi Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0, : POSITIVE_INFINITY NEGATIVE_INFINITY

More information

03 开发入门.key

03 开发入门.key #3 手机应用开发入门 刘宁 Email:liuning2@mail.sysu.edu.cn 大纲» Android 基本概念» 开发包及 工具安装» 创建 HelloWorld» Android 程序设计基础 2 Android 开发基本概念» Activities» Intents» 视图与控件 ( 界 面元素 )» 异步调 用 ( 多线程 支持 )» 后台服务 3 Activities Android

More information

建模与图形思考

建模与图形思考 F06_c 观摩 :ContentProvider 基於軟硬整合觀點 架构與 DB 引擎移植方法 ( c) By 高煥堂 4 通用性基类 ContentProvider 基於軟硬整合觀點 的使用范例 刚才的范例里, 我们直接使用 DataPersist 类的接口来与 SQLite 沟通 本节将替 DataPersist 配上 ContentProvider 基类, 让 Client 能透过 ContentProvider

More information

Chapter 10

Chapter 10 Chapter 10 多媒體程式開發 Widget Widget 簡介 android.widget 套件包含了許多視覺性的 UI 元素, 可用來將操作界面展示在應用程式畫面上 要熟悉 Android 多媒體程式的開發, 必須從 widget 套件著手, 因此本章所舉的範例, 便是以 android.widget 套件的應用為中心 Gallery 簡介 Gallery 是一個水平的清單, 移動清單時,

More information

PowerPoint 簡報

PowerPoint 簡報 UI 設計 Android 專案目錄架構 Android 專案建立後會自動產生 3 個主要目錄 src:java 程式檔案 res: 資源 ( 文字 圖形 聲音檔案等 ) 與 UI 設定有關的 layout 檔 此目錄內檔案名稱只能為小寫字母 數字 _. gen:r.java 根據 res 目錄內容自動產生 不要去修改 R.java Android 中所有的資源檔案 ( 圖片 XML 等 ) 命名都必須使用英文小寫,

More information

// HDevelopTemplateWPF projects located under %HALCONEXAMPLES%\c# using System; using HalconDotNet; public partial class HDevelopExport public HTuple

// HDevelopTemplateWPF projects located under %HALCONEXAMPLES%\c# using System; using HalconDotNet; public partial class HDevelopExport public HTuple halcon 与 C# 混合编程之 Halcon 代码调用 写在前面 完成 halcon 与 C# 混合编程的环境配置后, 进行界面布局设计构思每一个按钮所需要实现 的功能, 将 Halcon 导出的代码复制至相应的 C# 模块下即可 halcon 源程序 : dev_open_window(0, 0, 512, 512, 'black', WindowHandle) read_image (Image,

More information

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double

More information

RxJava

RxJava RxJava By 侦跃 & @hi 头 hi RxJava 扩展的观察者模式 处 观察者模式 Observable 发出事件 Subscriber 订阅事件 bus.post(new AnswerEvent(42)); @Subscribe public void onanswer(answerevent event) {! }! Observable observable = Observable.create(new

More information

<4D6963726F736F667420506F776572506F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

<4D6963726F736F667420506F776572506F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074> 程 序 设 计 实 习 INFO130048 3-2.C++ 面 向 对 象 程 序 设 计 重 载 继 承 多 态 和 聚 合 复 旦 大 学 计 算 机 科 学 与 工 程 系 彭 鑫 pengxin@fudan.edu.cn 内 容 摘 要 方 法 重 载 类 的 继 承 对 象 引 用 和 拷 贝 构 造 函 数 虚 函 数 和 多 态 性 类 的 聚 集 复 旦 大 学 计 算 机 科 学

More information

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 Java V1.0.1 2007 4 10 1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 6.2.10 6.3..10 6.4 11 7.12 7.1

More information

Microsoft Word - Android 7.x.doc

Microsoft Word - Android 7.x.doc 第 4 章 Android GUI 开发 Android 系统提供了丰富的可视化界面组件, 包括菜单 按钮 对话框等 Android 系统采用 Java 程序设计中的 UI 设计思想, 其中包括事件处理机制及布局管理方式 Android 系统中的所有 UI 类都是建立在 View 和 ViewGroup 两个类的基础之上的, 所有 View 的子类称为 Widget, 所有 ViewGroup 的子类称为

More information

Microsoft Word - Android App开发从入门到精通.doc

Microsoft Word - Android App开发从入门到精通.doc 第 2 章 Android 控件 本章主要介绍 Android 中常用的控件及其使用方法,Android SDK 本身给我们提供大量的 UI 控件, 合理熟练地使用这些控件才能做出优美的界面 有时候 Android 自带的控件不一定能满足业务需求, 所以本章还会介绍自定义控件 2.1 View 介绍 在 Android 开发中,Android 的 UI 界面都是由 View 及其派生类组合而成的 View

More information

TVS厂商接入流程API文档

TVS厂商接入流程API文档 TVS 登录接 入 一. 登录验证流程 1. 厂商 APP-LWA-AVS 音箱 -AVS 验证流程 2. 厂商 APP- 微信开发平台 -TVS 后台 -TVS 音箱 -TVS 验证流程 3 厂商 APP-QQ 互联平台 -TVS 后台 -TVS 音箱 -TVS 验证流程 二 厂商 APP 接 入 TVS 登录系统配置步骤 1. 打开 工程 app 目录下的 build.gradle, (1) 确保

More information

untitled

untitled 1 Outline 數 料 數 數 列 亂數 練 數 數 數 來 數 數 來 數 料 利 料 來 數 A-Z a-z _ () 不 數 0-9 數 不 數 SCHOOL School school 數 讀 school_name schoolname 易 不 C# my name 7_eleven B&Q new C# (1) public protected private params override

More information

题目

题目 开发 Android 应用 目的 : 帮助大家了解 Android 平台开发 作者 : 王威威 技术爱好 : linux,qt, 嵌入式开发 MSN : wangweiweicdma@hotmail.com Email : wang.weiwei1@ztenc.com.cn wangjiecdma@126.com 下载开发资源 1 下载最新的 Android SDK http://code.google.com/android/download.html

More information

软件工程文档编制

软件工程文档编制 实训抽象类 一 实训目标 掌握抽象类的定义 使用 掌握运行时多态 二 知识点 抽象类的语法格式如下 : public abstract class ClassName abstract void 方法名称 ( 参数 ); // 非抽象方法的实现代码 在使用抽象类时需要注意如下几点 : 1 抽象类不能被实例化, 实例化的工作应该交由它的子类来完成 2 抽象方法必须由子类来进行重写 3 只要包含一个抽象方法的抽象类,

More information

1.1 举例 : 在线用户 我们做一个新手级的在线用户列表, 原理是这样 : 1. 用户登录, 并把登录使用的用户名保存到 session 中, 通过 session 中 是否存在用户名判断用户是否已登录 session 可以在整个会话过程中保存用户信息, 不必每次刷新页面都重新 登录 2. 用户登

1.1 举例 : 在线用户 我们做一个新手级的在线用户列表, 原理是这样 : 1. 用户登录, 并把登录使用的用户名保存到 session 中, 通过 session 中 是否存在用户名判断用户是否已登录 session 可以在整个会话过程中保存用户信息, 不必每次刷新页面都重新 登录 2. 用户登 1.1 举例 : 在线用户 我们做一个新手级的在线用户列表, 原理是这样 : 1. 用户登录, 并把登录使用的用户名保存到 session 中, 通过 session 中 是否存在用户名判断用户是否已登录 session 可以在整个会话过程中保存用户信息, 不必每次刷新页面都重新 登录 2. 用户登录后, 将用户名添加到 application 中的在线用户列表 用 户注销时, 讲用户名从 application

More information

Microsoft Word - 第5章.doc

Microsoft Word - 第5章.doc 第 5 章 5.1 异常处理 异常 (Exception) 指程序运行过程中出现的非正常现象, 例如用户输入错误 需要处理的文件不存在 在网络上传输数据但网络没有连接等 由于异常情况总是可能发生, 良好健壮的应用程序除了具备用户所要求的基本功能外, 还应该具备预见并处理可能发生的各种异常的功能 所以, 开发应用程序时要充分考虑到各种可能发生的异常情况, 使程序具有较强的容错能力 通常把这种对异常情况进行处理的技术称为异常处理

More information

在Spring中使用Kafka:Producer篇

在Spring中使用Kafka:Producer篇 在某些情况下, 我们可能会在 Spring 中将一些 WEB 上的信息发送到 Kafka 中, 这时候我们就需要在 Spring 中编写 Producer 相关的代码了 ; 不过高兴的是,Spring 本身提供了操作 Kafka 的相关类库, 我们可以直接通过 xml 文件配置然后直接在后端的代码中使用 Kafka, 非常地方便 本文将介绍如果在 Spring 中将消息发送到 Kafka 在这之前,

More information

使用MapReduce读取XML文件

使用MapReduce读取XML文件 使用 MapReduce 读取 XML 文件 XML( 可扩展标记语言, 英语 :extensible Markup Language, 简称 : XML) 是一种标记语言, 也是行业标准数据交换交换格式, 它很适合在系统之间进行数据存储和交换 ( 话说 Hadoop H ive 等的配置文件就是 XML 格式的 ) 本文将介绍如何使用 MapReduce 来读取 XML 文件 但是 Had oop

More information

Spark读取Hbase中的数据

Spark读取Hbase中的数据 Spark 读取 Hbase 中的数据 Spark 和 Flume-ng 整合, 可以参见本博客 : Spark 和 Flume-ng 整合 使用 Spark 读取 HBase 中的数据 如果想及时了解 Spark Hadoop 或者 Hbase 相关的文章, 欢迎关注微信公共帐号 :iteblog_hadoop 大家可能都知道很熟悉 Spark 的两种常见的数据读取方式 ( 存放到 RDD 中 ):(1)

More information

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d

More information

EJB-Programming-4-cn.doc

EJB-Programming-4-cn.doc EJB (4) : (Entity Bean Value Object ) JBuilder EJB 2.x CMP EJB Relationships JBuilder EJB Test Client EJB EJB Seminar CMP Entity Beans Session Bean J2EE Session Façade Design Pattern Session Bean Session

More information

Android + WebService

Android + WebService Android + Web Service 建國科技大學資管系饒瑞佶 2017/3 V1 呼叫 OpenData Web Service http://data.taipei/opendata/datalist/apiaccess?scope=resourceaquire& rid=e7c46724-3517-4ce5-844f-5a4404897b7d http://data.taipei/opendata/datalist/apiaccess?scope=resourceaquir

More information

Microsoft Word - AEL CH05.doc

Microsoft Word - AEL CH05.doc 5-2 AutoCompleteTextView AutoCompleteTextView 非常類似 EditText, 屬於文字輸入方塊 ; 不過 AutoCompleteTextView 會在使用者輸入幾個字時就會顯示提示文字, 方便使用者選取而無需輸入所有文字, 是一種體貼使用者輸入的設計 AutoCompleteTextView 的提示列表與 Spinner 的選項列表建立方式相同, 需要建立字串陣列來儲存欲提示的文字

More information

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6:

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6: Chapter 15. Suppressed Exception CH14 Finally Block Java SE 7 try-with-resources JVM cleanup try-with-resources JVM cleanup cleanup Java SE 7 Throwable getsuppressed Throwable[] getsuppressed() Suppressed

More information

教育部補助資訊軟體人才培育先導計畫 100 年度課程發展專案計畫 實驗課程名稱 : IPC(Inter-Process Communication) 開發教師 : 張晉源老師 開發學生 : 林政揚 學校系所 : 樹德科技大學資訊工程學系

教育部補助資訊軟體人才培育先導計畫 100 年度課程發展專案計畫 實驗課程名稱 : IPC(Inter-Process Communication) 開發教師 : 張晉源老師 開發學生 : 林政揚 學校系所 : 樹德科技大學資訊工程學系 教育部補助資訊軟體人才培育先導計畫 100 年度課程發展專案計畫 實驗課程名稱 : IPC(Inter-Process Communication) 開發教師 : 張晉源老師 開發學生 : 林政揚 (s11639104@stu.edu.tw) 學校系所 : 樹德科技大學資訊工程學系 實驗目的 本實驗的目的在於讓同學們可以了解 Android 系統核心內部的行程通訊的原理, 透過呼叫系統提供的其中一樣服務

More information

_banneradview.settest(true); _banneradview.setuserkeywords("swimming"); _banneradview.setusercategories("1,3,4"); _banneradview.setusergender(jdbanner

_banneradview.settest(true); _banneradview.setuserkeywords(swimming); _banneradview.setusercategories(1,3,4); _banneradview.setusergender(jdbanner 京东 APP 联盟 SDK Android 版接口说明文档 1.0 1. 嵌入 SDK 1.1 添加 SDK Android Studio 环境 : 菜单 New->New Module->Import.jar or.aar package, 然后选中 App 联盟 SDK 所带的 jar 文件 Eclipse+ADT 环境 : 将 App 联盟 SDK 所带的 jar 文件拷贝到 libs/ 目录下

More information

Guava学习之Resources

Guava学习之Resources Resources 提供提供操作 classpath 路径下所有资源的方法 除非另有说明, 否则类中所有方法的参数都不能为 null 虽然有些方法的参数是 URL 类型的, 但是这些方法实现通常不是以 HTTP 完成的 ; 同时这些资源也非 classpath 路径下的 下面两个函数都是根据资源的名称得到其绝对路径, 从函数里面可以看出,Resources 类中的 getresource 函数都是基于

More information

Microsoft PowerPoint - 07.Android 介面元件-TableLayout、Toast、AlertDialog

Microsoft PowerPoint - 07.Android 介面元件-TableLayout、Toast、AlertDialog 計劃名稱 : 104 年度教育部資通訊軟體創新人才推升推廣計畫跨校資源中心 : 雲端運算 ( 國立中山大學 ) 課程名稱 : 網路及平台服務 Part1- 課程教材 教材名稱 :Android 介面元件 -TableLayout Toast AlertDialog 國立高雄大學資訊工程學系張保榮教授 大綱 TableLayout 版面配置 Toast 版面配置 AlertDialog 版面配置 TableLayout

More information

教案模板4-2

教案模板4-2 传智播客 Android 移动应用基础教程 教学设计 课程名称 : Android 移动应用基础教程授课年级 : 2015 年级授课学期 : 2015 学年第一学期教师姓名 : 某某老师 2014 年 10 月 09 日 课题名称第 3 章 Activity 计划学时 8 学时 内容分析 在现实生活中, 经常会使用手机进行打电话 发短信 玩游戏等, 这就需要与手机界 面进行交互 在 Android

More information

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc 本章学习目标 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 配置视图解析器 @RequestMapping 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc 和 Struts2 都属于表现层的框架, 它是 Spring 框架的一部分, 我们可 以从 Spring 的整体结构中看得出来 :

More information

Microsoft Word - Hibernate与Struts2和Spring组合指导.doc

Microsoft Word - Hibernate与Struts2和Spring组合指导.doc 1.1 组合 Hibernate 与 Spring 1. 在 Eclipse 中, 新建一个 Web project 2. 给该项目增加 Hibernate 开发能力, 增加 Hibernate 相关类库到当前项目的 Build Path, 同时也提供了 hibernate.cfg.xml 这个配置文件 3. 给该项目增加 Spring 开发能力, 增加 spring 相关类库到当前项目的 Build

More information

Microsoft Word - 第1章 Android基本概念.docx

Microsoft Word - 第1章 Android基本概念.docx Android 系 统 下 Java 编 程 详 解 作 者 : 华 清 远 见 第 1 章 Android 基 本 概 念 本 章 简 介 本 章 主 要 介 绍 Android 基 本 概 念 方 面 的 内 容, 包 括 Android 平 台 特 性 Android 系 统 架 构 Android 开 发 框 架 和 Android 开 发 环 境 搭 建 1.1 Android 简 介 Android

More information

输入 project name 选择完成

输入 project name 选择完成 JAVA 程序访问 HighGo DB 的环境准备 山东瀚高科技有限公司版权所有仅允许不作任何修改的转载和转发 Hibernate 的配置 MyEclipse 中创建新项目 : 选择菜单栏 file---new---project 选择 web project 进行下一步 输入 project name 选择完成 4. 单击 " 添加 JAR/ 文件夹 ", 会如下图出现 JDBC 下载 Hibernate

More information

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 -> 目录 1 大概思路... 1 2 创建 WebAPI... 1 3 创建 CrossMainController 并编写... 1 4 Nuget 安装 microsoft.aspnet.webapi.cors... 4 5 跨域设置路由... 4 6 编写 Jquery EasyUI 界面... 5 7 运行效果... 7 8 总结... 7 1 1 大概思路 创建 WebAPI 创建 CrossMainController

More information

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6 www.brainysoft.net 1.JasperReport ireport...4 1.1 JasperReport...4 1.2 ireport...4 2....4 2.1 JDK...4 2.1.1 JDK...4 2.1.2 JDK...5 2.1.3 JDK...5 2.2 ant...6 2.2.1 ant...6 2.2.2 ant...6 2.3 JasperReport...7

More information

Mac Java import com.apple.mrj.*;... public class MyFirstApp extends JFrame implements ActionListener, MRJAboutHandler, MRJQuitHandler {... public MyFirstApp() {... MRJApplicationUtils.registerAboutHandler(this);

More information

移动平台期末展示

移动平台期末展示 移动平台开发作品展示 周芳张文杰谢殊凡 作品简介 一 作品简介 Ø 应用名称 : 一笔画 Ø 功能 : 随机生成一笔画图案 玩家可以在屏幕上描绘图案, 程序会判定绘制成功或者失败 Ø 设计目的 : 制作一个休闲益智类的小游戏 设计思路 二 设计思路 Ø 1. 自动生成随机的一笔画 奇顶点 : 指数为奇数的顶点 偶顶点 : 指数为偶数的顶点 一笔画图形的必要条件是 : 奇顶点数目是 0 或者 2 Ø

More information

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class 踩地雷遊戲 高慧君南港高中 開啟專案 MineSweep 任務一 : 產生 30X20 個磚塊編輯 Table 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) import java.util.arraylist; Write a description of class MyWorld

More information

實作SQLiteOpenHelper類別

實作SQLiteOpenHelper類別 SQLiteOpenHelper 類別存取 SQLite 建國科技大學資管系 饒瑞佶 2013/5 V1 Android 連結資料庫 MySQL SQL Server Web Service 遠端資料庫 Internet Intranet Android SQLite 單機資料庫 Android vs. SQLite 透過 SQLiteOpenHelper 類別來操作 建立資料庫 ( 建構子 ) 建立資料表

More information

Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7.

Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7. Kubernetes 包管理理 工具 Helm 蔺礼强 Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7. Kubernetes

More information

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d =

More information

手说TTS开发指南

手说TTS开发指南 手说 TTS 开发指南 v1.3 2011 年 6 月 版权所有 : 手说工作室 shoushuo.com 版本时间作者说明 1.0 2010-11-15 张波 1.1 2010-12-27 在 ondestroy 方法 unbindservice 1.2 2010-12-30 1.3 2011-6-12 去掉 TTS 初始化 ; ttsservice.initialize() 方法调用添加接口方法

More information

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

KillTest 质量更高 服务更好 学习资料   半年免费更新服务 KillTest 质量更高 服务更好 学习资料 http://www.killtest.cn 半年免费更新服务 Exam : 1Z0-854 Title : Java Standard Edition 5 Programmer Certified Professional Upgrade Exam Version : Demo 1 / 12 1.Given: 20. public class CreditCard

More information

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO CHAPTER 使用 Hadoop 打造自己的雲 8 8.3 測試 Hadoop 雲端系統 4 Nodes Hadoop Map Reduce Hadoop WordCount 4 Nodes Hadoop Map/Reduce $HADOOP_HOME /home/ hadoop/hadoop-0.20.2 wordcount echo $ mkdir wordcount $ cd wordcount

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc 第 3 章 Android 控件进阶 要设计出让用户喜欢的 Android 应用程序界面, 除了需要用到在第 2 章讲的最基本的 TextView EditText 和 Button 控件外, 还要用到其他控件, 如 ImageButton 控件 ImageView 控件 RadioButton 控件 CheckBox 控件和 ListView 控件等 本章主要讲解功能强大 应用广泛的一些控件 3.1

More information

Microsoft Word - CX1000-HMI_程序开发_PLC通讯

Microsoft Word - CX1000-HMI_程序开发_PLC通讯 用 VB.Net 开发 CX1000 的 HMI 第二部分和 TwinCAT PLC 通讯 一 TwinCAT 动态库 TwinCAT.Ads.dll The TwinCAT.Ads.dll 是一个.NET 类库, 它提供和 ADS 设备通讯的类 如果 TwinCAT PLC 运行在 IPC 上, 则需要添加的类库是路径 \TwinCAT\ADS Api\.NET\v1.1.4322 下的 TwinCAT.Ads.dll

More information

Microsoft Word - ch04三校.doc

Microsoft Word - ch04三校.doc 4-1 4-1-1 (Object) (State) (Behavior) ( ) ( ) ( method) ( properties) ( functions) 4-2 4-1-2 (Message) ( ) ( ) ( ) A B A ( ) ( ) ( YourCar) ( changegear) ( lowergear) 4-1-3 (Class) (Blueprint) 4-3 changegear

More information

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款 JAVA 程 序 设 计 ( 肆 ) 徐 东 / 数 学 系 使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款 使 用 Java class 代 表 保 险 箱 public class SaveBox 类 名 类 类 体 实 现 封 装 性 使 用 class SaveBox 代 表 保

More information

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

KillTest 质量更高 服务更好 学习资料   半年免费更新服务 KillTest 质量更高 服务更好 学习资料 http://www.killtest.cn 半年免费更新服务 Exam : 310-055Big5 Title : Sun Certified Programmer for the Java 2 Platform.SE 5.0 Version : Demo 1 / 22 1. 11. public static void parse(string str)

More information

2009年3月全国计算机等级考试二级Java语言程序设计笔试试题

2009年3月全国计算机等级考试二级Java语言程序设计笔试试题 2009 年 3 月 全 国 计 算 机 等 级 考 试 笔 试 试 卷 二 级 Java 语 言 程 序 设 计 ( 考 试 时 间 90 分 钟, 满 分 100 分 ) 一 选 择 题 ( 每 题 2 分, 共 70 分 ) 下 列 各 题 A) B) C) D) 四 个 选 项 中, 只 有 一 个 选 项 是 正 确 的 请 将 正 确 选 项 填 涂 在 答 题 卡 相 应 位 置 上,

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes Fortran Algol Pascal Modula-2 BCPL C Simula SmallTalk C++ Ada Java C# C Fortran 5.1 message A B 5.2 1 class Vehicle subclass Car object mycar public class Vehicle extends Object{ public int WheelNum

More information

Microsoft PowerPoint - 03 开发入门.ppt [兼容模式]

Microsoft PowerPoint - 03 开发入门.ppt [兼容模式] 手 机 应 用 平 台 软 件 开 发 3 开 发 入 门 刘 宁 Email:liuning2@mail.sysu.edu.cn 课 程 简 介 课 程 目 标 Android 开 发 准 备 工 作 开 发 包 及 工 具 安 装 创 建 HelloWorld Android 程 序 设 计 基 础 创 意 移 动 应 用 创 意 移 动 应 用 创 意 移 动 应 用 创 意 移 动 应 用

More information

9, : Java 19., [4 ]. 3 Apla2Java Apla PAR,Apla2Java Apla Java.,Apla,,, 1. 1 Apla Apla A[J ] Get elem (set A) A J A B Intersection(set A,set B) A B A B

9, : Java 19., [4 ]. 3 Apla2Java Apla PAR,Apla2Java Apla Java.,Apla,,, 1. 1 Apla Apla A[J ] Get elem (set A) A J A B Intersection(set A,set B) A B A B 25 9 2008 9 M ICROEL ECTRON ICS & COMPU TER Vol. 25 No. 9 September 2008 J ava 1,2, 1,2, 1,2 (1, 330022 ; 2, 330022) :,. Apla - Java,,.. : PAR ;Apla - Java ; ;CMP ; : TP311 : A : 1000-7180 (2008) 09-0018

More information

第 2 節 介面佈局檔 第 1 項 說明 第 2 項 原始碼 第 3 節 主程式開發 第 1 項 主程式 - 基本設定 第 2 項 主程式 - 產生亂數 第 3 項 主程式 - 數字靠邊 數字加總 第 4 節 加入手

第 2 節 介面佈局檔 第 1 項 說明 第 2 項 原始碼 第 3 節 主程式開發 第 1 項 主程式 - 基本設定 第 2 項 主程式 - 產生亂數 第 3 項 主程式 - 數字靠邊 數字加總 第 4 節 加入手 Android 講義 2016.07.03 目錄 第 1 章 資料存取... 1 第 1 節 使用 SharedPreferences... 1 第 1 項 介面佈局檔... 1 第 2 項 建立主程式的內容 - 儲存偏好設定... 1 第 3 項 驗證儲存偏好的動作... 3 第 4 項 建立主程式的內容 - 提取偏好設定... 3 第 2 節 簡單使用 SQLite... 5 第 1 項 介面佈局檔...

More information