安卓APP源碼和設(shè)計報告——麻雀筆記
目錄
一 安卓應用程序開發(fā)背景3
1.1開發(fā)背景3
1.2開發(fā)環(huán)境4
二 安卓應用程序開發(fā)理論與方法4
三 記事本應用程序的設(shè)計與實現(xiàn)5
3.1 擬解決的問題及目標5
3.2 總體設(shè)計6
3.3 詳細設(shè)計與編碼實現(xiàn)6
四 總結(jié)23
一 安卓應用程序開發(fā)背景
1.1開發(fā)背景
1.智能手機的市場
(1)功能多樣化的智能手機挑戰(zhàn)全球PC出貨量
移動互聯(lián)網(wǎng)時代的來臨,直接促進了搭載智能操作系統(tǒng)、具有強大擴展性的智能手機、平板電腦等移動終端產(chǎn)業(yè)的蓬勃發(fā)展。來自美國最大的風險投資機構(gòu)KPCB的數(shù)據(jù)顯示,全球智能手機出貨量正在以遠高于臺式電腦、筆記本電腦出貨量的速度快速增長,該機構(gòu)預計2011年全球智能手機出貨量將達到4.13億,超過臺式電腦與筆記本電腦出貨量的總和。
(2)智能手機的用戶使用數(shù)量正在高速增長。據(jù)市場調(diào)研機構(gòu)Gartner信息,2011年全球智能手機的總出貨量將會達到4.68億部,相比2010年實現(xiàn)了57.7%的增長,而谷歌Android操作系統(tǒng)將會在今年之內(nèi)成為全球最大的智能手機操作系統(tǒng)。另外,全球市場調(diào)研機構(gòu)IDC預計未來5年中國手機市場上,智能手機替代傳統(tǒng)功能手機的趨勢將日益明顯,未來5年中國智能手機市場復合增長率將達到34.1%,人們對IT設(shè)備智能化的向往是這一增長率能夠?qū)崿F(xiàn)的主要因素,并且與其他國家相比,中國智能手機市場的發(fā)展空間更加廣闊。
(3)操作系統(tǒng)格局預測:Android有望成為智能手機市場主導力量
搭載Android操作系統(tǒng)的智能手機目前已經(jīng)成為市場上最炙手可熱的智能產(chǎn)品。來自美國市場研究機構(gòu)Gartner的數(shù)據(jù)顯示,Android操作系統(tǒng)所占的市場份額從2008年的0.5%急劇增長到2011年的15.94%。開放的源代碼和零成本已經(jīng)讓Android在全世界范圍內(nèi)受到青睞并迅速獲得了主要手機廠商和數(shù)百萬軟件開發(fā)者的支持,Gartner預計,未來Android系統(tǒng)的市場份額有望超過其他操作系統(tǒng),從而成為全球第一大智能手機操作系統(tǒng)。
2.安卓手機介紹
安卓手機指的是用Android操作系統(tǒng)的手機。安卓(Android)是基于Linux內(nèi)核的操作系統(tǒng),是Google公司在2007年11月5日公布的手機操作系統(tǒng)。
同樣都是手機上面用的智能系統(tǒng),安卓的系統(tǒng)是新生系統(tǒng),界面更為華麗,開源性更強,當然因為是新生系統(tǒng),所以在第三方軟件方面暫時還不太多。因此,安卓應用程序的需求還是很迫切的。
3.軟件人才需求
據(jù)業(yè)內(nèi)統(tǒng)計,目前國內(nèi)的Android研發(fā)人才缺口至少30萬。由于目前Android技術(shù)較新,無論是相關(guān)書籍、培訓還是大學教育,都處于初級階段,因此Android人才短期將供不應求。從長期來看,隨著各種移動應用和手機游戲等內(nèi)容需求日益增加,也將激勵大中小型手機應用開發(fā)商加大對Android應用的開發(fā)力度,因此Android人才的就業(yè)前景也非常廣泛。
綜上所述,在這樣的背景下,安卓有很強的生命力。同時,作為一個新生的系統(tǒng),其應用程序目前并不多,安卓應用程序的需求還是很迫切的,安卓研發(fā)人才的缺口還很大。這些都促進了我們學習開發(fā)安卓應用程序。
1.2開發(fā)環(huán)境
安卓應用程序開發(fā)環(huán)境如下:
①jdk1.8
②android studio 4.0
③Android SDK
二 安卓應用程序開發(fā)理論與方法
ButterKnife
ButterKnife 是一個專注于 Android 系統(tǒng)的 View 注入框架,以前總是要寫很多 findViewById 來找到 View 對象,有了 ButterKnife 可以很輕松地省去這些步驟。使用 ButterKnife 對性能基本沒有損失,因為 ButterKnife 用到的注解并不是在運行時反射的,而是在編譯的時候生成新的 class。項目集成起來特別方便,使用起來也特別簡單。
ButterKnife 的優(yōu)勢:
強大的 View 綁定和 Click 事件處理功能,簡化代碼,提升開發(fā)效率
方便地處理 Adapter 里的 ViewHolder 綁定問題
運行時不會影響 APP 效率,使用配置方便
代碼清晰,可讀性強SharedPreferences
SharedPreferences 是使用鍵值對的方式來存儲數(shù)據(jù)的。當保存一條數(shù)據(jù)的時候,需要給這條數(shù)據(jù)提供一個對應的鍵,這樣在讀取數(shù)據(jù)的時候就可以通過這個鍵把相應的值取出來。而且 SharedPreferences 還支持多種不同的數(shù)據(jù)類型存儲。SQLite + OrmLite
SQLite 是一款輕量級的關(guān)系型數(shù)據(jù)庫,它的運算速度非??欤加觅Y源很少,通常只需要幾百 KB 的內(nèi)存就足夠了,因而特別適合在移動設(shè)備上使用。SQLite 不僅支持標準的 SQL 語法,還遵循了數(shù)據(jù)庫的 ACID 事務(wù),所以只要以前是用過其他的關(guān)系型數(shù)據(jù)庫,就可以很快地上手 SQLite。
ORM(全稱 Object Relation Mapping)叫做對象關(guān)系映射,是一種程序設(shè)計技術(shù),用于實現(xiàn)面向?qū)ο缶幊陶Z言中不同類型系統(tǒng)的數(shù)據(jù)之間的轉(zhuǎn)換。它可以直接將 Bean 文件轉(zhuǎn)換成數(shù)據(jù)庫中的表,Bean 中的屬性就是表的列,它將繁瑣的數(shù)據(jù)庫操作封裝成一個 Dao 類,使用 Dao 類和 Bean 可以直接對數(shù)據(jù)庫進行操作,大多數(shù)的方法參數(shù)只有一個 Bean 對象。多線程編程 Handler + Message
Handler 顧名思義也就是處理者的意思,它主要是用于發(fā)送和處理消息的。發(fā)送消息一般是使用 Handler 的 sendMessage()方法,而發(fā)出的消息經(jīng)過一系列的輾轉(zhuǎn)處理后,最終會傳遞到 Handler 的 handleMessage()方法中。
Message 是在線程之間傳遞的消息,它可以在內(nèi)部攜帶少量的信息,用于在不同線程之間交換數(shù)據(jù)。除了 what 字段,Message 還可以使用 arg1 和 arg2 字段來攜帶一些整型數(shù)據(jù),使用 obj 字段攜帶一個 Object 對象。Glide
Glide 是一款快速高效的開源 Android 媒體管理和圖片加載框架,它將媒體解碼、內(nèi)存和磁盤緩存以及資源池打包成一個簡單易用的界面。
Glide 支持抓取、解碼和顯示視頻圖片、圖像和動態(tài) gif。Glide 包括一個靈活的 API,允許開發(fā)人員插入幾乎任何網(wǎng)絡(luò)堆棧。默認情況下,Glide 使用了一個定制的基于 HttpUrlConnection 的堆棧,但也包含了可插入谷歌的 Volley 項目或 Square 的 OkHttp 庫的實用程序庫。
Glide 的主要功能是盡可能平滑快速地滾動任何類型的圖像列表,但它也適用于幾乎任何需要獲取、調(diào)整大小和顯示遠程圖像的情況。RecyclerView 控件
RecyclerView 是一個增強版的 ListView,不僅可以輕松實現(xiàn)和 ListView 同樣的效果,還優(yōu)化了 ListView 中存在的各種不足之處。同時 RecyclerView 支持橫向滾動和瀑布流布局Fragment + ViewPager
Fragment 是一種可以嵌入在 Activity 當中的 UI 片段,它能讓程序更加合理和充分地利用大屏幕的空間,因而在平板上應用得非常廣泛。它和 Activity 同樣都能包含布局,同樣都有自己的生命周期。甚至可以理解成一個迷你的 Activity。
ViewPager 是 android 擴展包 v4 包中的類,這個類可以讓用戶左右切換當前的 view。ViewPager 類直接繼承了 ViewGroup 類,因此它一個容器類,可以添加其他的 View 類 ViewPager 類需要一個 PagerAdapter 適配器類給它提供數(shù)據(jù)(類似 RecyclerView)。
ViewPager 經(jīng)常和 Fragment 一起使用,并且官方還提供了專門的 FragmentPagerAdapter 類供 ViewPager 使用。
三 記事本應用程序的設(shè)計與實現(xiàn)
3.1 擬解決的問題及目標
一個簡單的記事本應用,在人們繁忙的時候更快速的記筆記,程序要實現(xiàn)的目標有如下幾個:
登錄注冊
筆記頂置
開始游戲筆記增刪查改
3.2 總體設(shè)計
1、記事本操作流程
先注冊一個賬號,登錄進去,可以添加筆記,編輯筆記,頂置筆記,查找筆記
3.3 詳細設(shè)計與編碼實現(xiàn)
記事本界面
注冊界面
新建筆記界面
編輯界面
個人信息界面
核心代碼如下:
RegisterActivity類
public class RegisterActivity extends AppCompatActivity {
@BindView(R.id.btn_register)
Button btnRegister;
@BindView(R.id.btn_reset)
Button btnReset;
@BindView(R.id.check_hide_pwd_reg)
CheckBox checkHidePwdReg;
@BindView(R.id.check_hide_pwd_reg2)
CheckBox checkHidePwdReg2;
@BindView(R.id.edit_username_reg)
EditText editUsernameReg;
@BindView(R.id.edit_confirm_pwd_reg)
EditText editConfirmPwdReg;
@BindView(R.id.edit_email_reg)
EditText editEmailReg;
@BindView(R.id.edit_password_reg)
EditText editPasswordReg;
SharedPreferenceUtil spu;
private static final String?TAG?= "RegisterActivity";
private UserDao userDao;
private String textUserName;
private String textPassword;
private String textConfirmPwd;
private String textEmail;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
ButterKnife.bind(this);
userDao = new UserDao(this);
spu = SharedPreferenceUtil.getInstance(this);
}
@OnClick({R.id.btn_register, R.id.btn_reset, R.id.check_hide_pwd_reg, R.id.check_hide_pwd_reg2})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.btn_register:
// 檢驗非空
if (isNotEmpty()) {
// 獲得用戶輸入
getEditText();
// 檢驗密碼
if (comparePwd()) {
// 檢查郵箱格式
if (checkEmail()) {
// 檢查郵箱是否可用
if (checkOnlyEmail()) {
insertUserIntoDB();
queryAll();
Intent intent = new Intent(RegisterActivity.this, MainActivity.class);
intent.putExtra(Constant.HAS_REGISTERED, true);
startActivity(intent);
finish();
} else {
Toast.makeText(this, "郵箱已經(jīng)被使用", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(this, "郵箱格式錯誤", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(this, "兩次輸入的密碼不一致", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(this, "用戶名或密碼不能為空", Toast.LENGTH_SHORT).show();
}
break;
case R.id.btn_reset:
editUsernameReg.setText("");
editPasswordReg.setText("");
editConfirmPwdReg.setText("");
editEmailReg.setText("");
break;
case R.id.check_hide_pwd_reg:
if (checkHidePwdReg.isChecked()) {
// 將密碼顯示出來
editPasswordReg.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
} else {
// 隱藏密碼
editPasswordReg.setTransformationMethod(PasswordTransformationMethod.getInstance());
}
// 將光標移動到文本最后
editPasswordReg.setSelection(editPasswordReg.getText().toString().length());
break;
case R.id.check_hide_pwd_reg2:
if (checkHidePwdReg2.isChecked()) {
// 將密碼顯示出來
editConfirmPwdReg.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
} else {
// 隱藏密碼
editConfirmPwdReg.setTransformationMethod(PasswordTransformationMethod.getInstance());
}
// 將光標移動到文本最后
editConfirmPwdReg.setSelection(editConfirmPwdReg.getText().toString().length());
break;
default:
break;
}
}
/**
* 檢驗輸入非空
*
* @return
*/
public boolean isNotEmpty() {
return !"".equals(editUsernameReg.getText().toString()) &&
!"".equals(editPasswordReg.getText().toString()) &&
!"".equals(editConfirmPwdReg.getText().toString());
}
/**
* 從控件中得到輸入值
*/
public void getEditText() {
textUserName = editUsernameReg.getText().toString();
textPassword = editPasswordReg.getText().toString();
textConfirmPwd = editConfirmPwdReg.getText().toString();
textEmail = editEmailReg.getText().toString();
}
/**
* 檢查郵箱是否可用
*
* @return
*/
public boolean checkOnlyEmail() {
List<UserBean> userBeans = userDao.queryForWhat("email", textEmail);
return userBeans.size() == 0;
}
/**
* 驗證兩次輸入的密碼是否一致
*
* @return
*/
public boolean comparePwd() {
return textPassword.equals(textConfirmPwd);
}
/**
* 檢查郵箱格式
*
* @return
*/
public boolean checkEmail() {
Matcher emailMatcher = Constant.EMAIL_PATTERN.matcher(textEmail);
return emailMatcher.matches();
}
/**
* 向數(shù)據(jù)庫表插入數(shù)據(jù)
*/
public void insertUserIntoDB() {
UserBean userBean = new UserBean(textUserName, textPassword, textEmail);
userDao.insert(userBean);
// 同時存到SP中
spu.putString(Constant.USER_NAME, textUserName);
spu.putString(Constant.PASSWORD, textPassword);
}
/**
* 查詢表中所有數(shù)據(jù)
*/
public void queryAll() {
List<UserBean> userBeans = userDao.queryAll();
for (int i = 0; i < userBeans.size(); i++) {
Log.d(TAG, "queryAll: " + userBeans.get(i).toString());
}
}
}
HomeActivity類
public class HomeActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
@BindView(R.id.toolbar)
Toolbar toolbar;
@BindView(R.id.btn_top)
RadioButton btnTop;
@BindView(R.id.btn_add)
RadioButton btnAdd;
@BindView(R.id.btn_all)
RadioButton btnAll;
@BindView(R.id.dock_radio_group)
RadioGroup dockRadioGroup;
@BindView(R.id.drawer_layout)
DrawerLayout drawerLayout;
@BindView(R.id.nav_view)
NavigationView navView;
private static final String?TAG?= "HomeActivity";
ActionBar actionBar;
Fragment fragment;
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
SharedPreferenceUtil spu;
private UserDao userDao;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
ButterKnife.bind(this);
userDao = new UserDao(this);
spu = SharedPreferenceUtil.getInstance(this);
initView();
}
/**
* 初始化控件
*/
public void initView() {
// 工具欄
toolbar.setTitle(R.string.app_name);
setTitleCenter(toolbar);
setSupportActionBar(toolbar);
actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeAsUpIndicator(R.drawable.icon_setting);
}
// 抽屜
ViewGroup.LayoutParams params = navView.getLayoutParams();
params.width = getResources().getDisplayMetrics().widthPixels / 2;
navView.setLayoutParams(params);
navView.setNavigationItemSelectedListener(this);
// 抽屜中的header
View headerView = navView.getHeaderView(0);
TextView textUserName = headerView.findViewById(R.id.header_user_name);
TextView textEmail = headerView.findViewById(R.id.header_email);
textUserName.setText(spu.getString(Constant.USER_NAME));
textEmail.setText(getEmail());
// 默認加載置頂Fragment
fragment = new TopFragment();
transaction.replace(R.id.view_pager, fragment, Constant.TOP_TAG);
transaction.commit();
}
/**
* 單選按鈕監(jiān)聽器 用來切換Fragment
*
* @param view
* @param isChanged
*/
@OnCheckedChanged({R.id.btn_add, R.id.btn_all, R.id.btn_top})
public void onCheckedChanged(CompoundButton view, boolean isChanged) {
transaction = manager.beginTransaction();
switch (view.getId()) {
case R.id.btn_top:
if (isChanged) {
fragment = new TopFragment();
transaction.replace(R.id.view_pager, fragment, Constant.TOP_TAG);
transaction.commit();
Constant.PAGE_STATE?= "top";
}
break;
case R.id.btn_add:
if (isChanged) {
fragment = new AddFragment();
transaction.replace(R.id.view_pager, fragment, Constant.ADD_TAG);
transaction.commit();
}
break;
case R.id.btn_all:
if (isChanged) {
fragment = new AllFragment();
transaction.replace(R.id.view_pager, fragment, Constant.LIST_TAG);
transaction.commit();
Constant.PAGE_STATE?= "all";
}
break;
default:
break;
}
}
/**
* 獲得登錄用戶的郵箱
*
* @return
*/
public String getEmail() {
List<UserBean> userBeans = userDao
.queryByUserNameAndPassword(spu.getString(Constant.USER_NAME), spu.getString(Constant.PASSWORD));
return userBeans.get(0).getEmail();
}
/**
* 抽屜中菜單的點擊事件
*
* @param item
* @return
*/
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
drawerLayout.closeDrawers();
switch (item.getItemId()) {
case R.id.nav_change_pwd:
DialogUtil.editInfoDialog(this, spu.getInt(Constant.USER_ID));
break;
case R.id.nav_dismiss:
DialogUtil.dismissDialog(this, spu.getInt(Constant.USER_ID));
break;
case R.id.nav_exit:
spu.putBoolean(Constant.AUTO_LOGIN, false);
Intent intent = new Intent(HomeActivity.this, MainActivity.class);
startActivity(intent);
finish();
break;
default:
break;
}
return true;
}
/**
* ToolBar的menu
*
* @param menu
* @return
*/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.toolbar_menu, menu);
setIconsVisible(menu, true);
return true;
}
/**
* 重寫ToolBar上菜單點擊事件
* 按照條件查找
*
* @param item
* @return
*/
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.search_title:
DialogUtil.searchTitleDialog(this);
break;
case R.id.search_content:
DialogUtil.searchContentDialog(this);
break;
case R.id.search_category:
DialogUtil.searchCategoryDialog(this);
break;
case android.R.id.home:
drawerLayout.openDrawer(GravityCompat.START);
break;
default:
break;
}
return true;
}
/**
* ToolBar標題居中
*
* @param toolbar
*/
public void setTitleCenter(Toolbar toolbar) {
String title = "title";
final CharSequence originalTitle = toolbar.getTitle();
toolbar.setTitle(title);
for (int i = 0; i < toolbar.getChildCount(); i++) {
View view = toolbar.getChildAt(i);
if (view instanceof TextView) {
TextView textView = (TextView) view;
if (title.equals(textView.getText())) {
textView.setGravity(Gravity.CENTER);
Toolbar.LayoutParams params = new Toolbar.LayoutParams(Toolbar.LayoutParams.WRAP_CONTENT, Toolbar.LayoutParams.MATCH_PARENT);
params.gravity = Gravity.CENTER;
textView.setLayoutParams(params);
}
}
toolbar.setTitle(originalTitle);
}
}
/**
* menu顯示圖標
*
* @param menu
* @param flag
*/
private void setIconsVisible(Menu menu, boolean flag) {
// 判斷menu是否為空
if (menu != null) {
try {
// 如果不為空,就反射拿到menu的setOptionalIconsVisible方法
Method method = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);
// 暴力訪問該方法
method.setAccessible(true);
// 調(diào)用該方法顯示icon
method.invoke(menu, flag);
} catch (Exception e) {
e.printStackTrace();
}
}
}
FindPwdActivity類
public class FindPwdActivity extends AppCompatActivity {
@BindView(R.id.btn_confirm_find)
Button btnConfirmFind;
@BindView(R.id.btn_reset_find)
Button btnResetFind;
@BindView(R.id.edit_confirm_pwd_find)
EditText editConfirmPwdFind;
@BindView(R.id.edit_password_find)
EditText editPasswordFind;
@BindView(R.id.edit_email_find)
EditText editEmailFind;
@BindView(R.id.check_hide_pwd_find)
CheckBox checkHidePwdFind;
@BindView(R.id.check_hide_pwd_find2)
CheckBox checkHidePwdFind2;
private static final String?TAG?= "FindPwdActivity";
private UserDao userDao;
private String textPassword;
private String textConfirmPwd;
private String textEmail;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_find_pwd);
ButterKnife.bind(this);
userDao = new UserDao(this);
}
@OnClick({R.id.btn_confirm_find, R.id.btn_reset_find, R.id.check_hide_pwd_find, R.id.check_hide_pwd_find2})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.btn_confirm_find:
// 檢查非空
if (isNotEmpty()) {
// 獲得用戶輸入
getEditText();
// 檢查郵箱格式
if (checkEmail()) {
// 檢查兩次輸入的密碼是否一致
if (comparePwd()) {
// 更新密碼
if (updatePwdFromDB()) {
// 跳轉(zhuǎn)登錄界面
Intent intent = new Intent(FindPwdActivity.this, MainActivity.class);
startActivity(intent);
FindPwdActivity.this.finish();
}
} else {
Toast.makeText(this, "兩次輸入的密碼不一致", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(this, "郵箱格式錯誤", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(this, "郵箱或密碼不能為空", Toast.LENGTH_SHORT).show();
}
break;
case R.id.btn_reset_find:
// 清空輸入
editPasswordFind.setText("");
editConfirmPwdFind.setText("");
editEmailFind.setText("");
break;
case R.id.check_hide_pwd_find:
if (checkHidePwdFind.isChecked()) {
// 將密碼顯示出來
editPasswordFind.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
} else {
// 隱藏密碼
editPasswordFind.setTransformationMethod(PasswordTransformationMethod.getInstance());
}
// 將光標移動到文本最后
editPasswordFind.setSelection(editPasswordFind.getText().toString().length());
break;
case R.id.check_hide_pwd_find2:
if (checkHidePwdFind2.isChecked()) {
// 將密碼顯示出來
editConfirmPwdFind.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
} else {
// 隱藏密碼
editConfirmPwdFind.setTransformationMethod(PasswordTransformationMethod.getInstance());
}
// 將光標移動到文本最后
editConfirmPwdFind.setSelection(editConfirmPwdFind.getText().toString().length());
break;
default:
break;
}
}
/**
* 檢驗輸入非空
*
* @return
*/
public boolean isNotEmpty() {
return !"".equals(editPasswordFind.getText().toString()) &&
!"".equals(editConfirmPwdFind.getText().toString()) &&
!"".equals(editEmailFind.getText().toString());
}
/**
* 從控件中得到輸入值
*/
public void getEditText() {
textPassword = editPasswordFind.getText().toString();
textConfirmPwd = editConfirmPwdFind.getText().toString();
textEmail = editEmailFind.getText().toString();
Log.d(TAG, "getEditText: " + textEmail);
}
/**
* 檢查郵箱格式
*
* @return
*/
public boolean checkEmail() {
Matcher emailMatcher = Constant.EMAIL_PATTERN.matcher(textEmail);
return emailMatcher.matches();
}
/**
* 驗證兩次輸入的密碼是否一致
*
* @return
*/
public boolean comparePwd() {
return textPassword.equals(textConfirmPwd);
}
/**
* 修改數(shù)據(jù)庫中的密碼
*
* @return 郵箱是否存在
*/
public boolean updatePwdFromDB() {
List<UserBean> userBeans = userDao.queryForWhat("email", textEmail);
if (userBeans.size() != 0) {
UserBean user = userBeans.get(0);
user.setPassword(textPassword);
userDao.update(user);
return true;
} else {
Toast.makeText(this, "郵箱錯誤", Toast.LENGTH_SHORT).show();
return false;
}
}
}
}
public void onLeaveApplication(Ad arg0) {
// TODO Auto-generated method stub
}
public void onFailedToReceiveAd(Ad arg0, ErrorCode arg1) {
// TODO Auto-generated method stub
}
public void onDismissScreen(Ad arg0) {
// TODO Auto-generated method stub
}
});
View gameMessage = findViewById(R.id.GameMessage);
int[] data = getSettingData();
TextView levelMessage = (TextView)findViewById(R.id.level_Message);
levelMessage.setText("SCORE: "+data[0]+"\nBEST: "+data[1]);
gameMessage.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
Intent intent = new Intent(LoadingActivity.this, GameBirdActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
}
});
}
private int[] getSettingData() {
SharedPreferences gb_settings = getSharedPreferences(GameBirdActivity.GameBirdSettingsFile, 0);
int last = gb_settings.getInt(GameBirdActivity.Settings_LevelLast, 0);
int top = gb_settings.getInt(GameBirdActivity.Settings_LevelTop, 0);
return new int[]{last, top};
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
try{
GameBirdActivity.instance.finish();
}catch(Exception e){}
finish();
System.exit(0);
return true;
}
return super.onKeyDown(keyCode, event);
}
}
四 總結(jié)
100