安卓APP源碼和設(shè)計(jì)報(bào)告——快遞查詢(xún)錄入系統(tǒng)
《多媒體通信技術(shù)》
題 目:快遞
完 成 日 期?2022年05月
目 錄
1 緒論1
2 設(shè)計(jì)方案2
2.1 設(shè)計(jì)思路和方案2
2.2 功能要求2
2.3 設(shè)計(jì)的流程圖2
3 設(shè)計(jì)過(guò)程3
3.1 界面布局3
3.2 功能實(shí)現(xiàn)3
4 運(yùn)行結(jié)果與分析4
4.1 設(shè)計(jì)的使用步驟4
4.2 運(yùn)行結(jié)果與分析4
5 總結(jié)5
附錄6
1 緒論
快遞業(yè)務(wù)有兩個(gè)基本的特點(diǎn),一個(gè)是快件運(yùn)轉(zhuǎn)的速度快,另外一個(gè)特點(diǎn)是對(duì)快件進(jìn)行全程跟蹤為用戶(hù)提供服務(wù)。業(yè)務(wù)之所以能快速運(yùn)轉(zhuǎn),能在最短的時(shí)間內(nèi)為用戶(hù)提點(diǎn)對(duì)點(diǎn)的服務(wù),一個(gè)很重要的因素就是有強(qiáng)大的信息系統(tǒng)做支撐,而且信息流必須領(lǐng)先于實(shí)物流。實(shí)物流在運(yùn)轉(zhuǎn)的過(guò)程中,信息系統(tǒng)如果不能對(duì)下一個(gè)環(huán)節(jié)提供前置信息,下一個(gè)環(huán)節(jié)就很難及時(shí)有效地調(diào)配資源,如調(diào)配航空資源,車(chē)輛等運(yùn)力資源以及人力資源為實(shí)物流流向下一個(gè)環(huán)節(jié)做好準(zhǔn)備??蛻?hù)之所以選擇快遞公司,除了速度與價(jià)格上的因素之外,另外一個(gè)重要的因素是所提供服務(wù),強(qiáng)大的管理系統(tǒng)是快遞公司提升服務(wù)質(zhì)量的唯一選擇。另外一方面信息系統(tǒng)是快遞公司運(yùn)行效率的保證,快遞物品在運(yùn)輸過(guò)程中希望以最高效、最經(jīng)濟(jì)的方式流向下一個(gè)環(huán)節(jié),如果不能提供及時(shí)有效的實(shí)物流信息,就有可能造成公司資源的浪費(fèi)或者是造成快遞物品的投遞時(shí)效性的降低。
2 設(shè)計(jì)方案
2.1 設(shè)計(jì)思路和方案
在移動(dòng)互聯(lián)網(wǎng)的時(shí)代,快遞企業(yè)開(kāi)發(fā)快遞APP軟件,可以幫助企業(yè)節(jié)省人力物力、簡(jiǎn)化操作程序、降低成本費(fèi)用、加強(qiáng)與用戶(hù)的信息交流。開(kāi)發(fā)快遞APP就能在移動(dòng)互聯(lián)網(wǎng)時(shí)代搶占到主動(dòng)權(quán),開(kāi)拓更廣闊的市場(chǎng)。
本次課題設(shè)計(jì)開(kāi)發(fā)了一個(gè)快遞查詢(xún)錄入系統(tǒng),用戶(hù)可以在注冊(cè)登入之后進(jìn)行快遞的查詢(xún)、輸入、刪除和修改。
系統(tǒng)需要包含注冊(cè)、登入功能,保存賬號(hào)和密碼到SharedPreferences。按鈕實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)和彈窗提示。利用SQLite進(jìn)行增刪查改的實(shí)現(xiàn),實(shí)例化四個(gè)Button,兩個(gè)EditText,兩個(gè)TextView,連接數(shù)據(jù)庫(kù)。按鈕增加監(jiān)聽(tīng)點(diǎn)擊事件,editText用來(lái)獲取輸入,TextView來(lái)展示成果。
2.2 功能要求
本設(shè)計(jì)是快遞查詢(xún)錄入系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn),應(yīng)具備的功能包括:
登陸;
注冊(cè);
(3)查詢(xún);
(4)輸入;
(5)刪除;
(6)修改。
2.3 設(shè)計(jì)的流程圖
本設(shè)計(jì)中用戶(hù)操作的流程圖如圖2.2所示。
圖2.2 流程圖
由圖2.2可見(jiàn),該設(shè)計(jì)首先要運(yùn)行小手機(jī)然后會(huì)顯示登錄界面,如果是新用戶(hù)就直接登錄,如果不是需要注冊(cè)一個(gè)賬號(hào)進(jìn)行登錄。登錄后可對(duì)快遞訂單輸入/查詢(xún),還有選擇快遞公司。
3 設(shè)計(jì)過(guò)程
3.1 界面布局
本設(shè)計(jì)的登錄界面布局如圖3.1所示。
圖3.1 登錄界面布局
本設(shè)計(jì)的登錄后快遞輸入/查詢(xún)界面布局如圖3.2所示。
圖3.2 快遞查詢(xún)錄入界面布局
3.2功能實(shí)現(xiàn)
1界面的實(shí)現(xiàn)
登入注冊(cè)界面設(shè)計(jì),包括用戶(hù)名和密碼的輸入框,頁(yè)面的輸入框和按鈕均采用了自定義樣式,加入圓角的設(shè)計(jì)和顏色的漸變,視覺(jué)上看起來(lái)更舒適美觀。
2菜單界面實(shí)現(xiàn)
登入成功后跳轉(zhuǎn)到導(dǎo)航頁(yè)面,每個(gè)按鈕都會(huì)有對(duì)應(yīng)的文字提示,對(duì)應(yīng)要跳轉(zhuǎn)到的各個(gè)子頁(yè)面。
3各模塊詳細(xì)實(shí)現(xiàn)
增刪查改詳細(xì)設(shè)計(jì)包括輸入、更新、查詢(xún)、刪除快遞單號(hào)。
4快遞公司頁(yè)面實(shí)現(xiàn)
程序功能還包括登入和注冊(cè)兩個(gè)重要功能,用戶(hù)的用戶(hù)名和密碼存放在sharedpreferences數(shù)據(jù)類(lèi)中。
4 運(yùn)行結(jié)果與分析
4.1 設(shè)計(jì)的使用步驟
本設(shè)計(jì)的使用步驟為:
首先打開(kāi)模擬器運(yùn)行小手機(jī)
已有賬號(hào)直接登陸
沒(méi)有賬號(hào)注冊(cè)一個(gè)賬號(hào)然后登陸
點(diǎn)擊訂單輸入/查詢(xún)進(jìn)行查詢(xún)
可以輸入,更新,查詢(xún),刪除
查看寄快遞公司
4.2 運(yùn)行結(jié)果與分析
效果注冊(cè)和登錄如圖4.1注冊(cè)界面和4.2登錄界面所示。
圖4.1 注冊(cè)界面
圖4.2 登錄界面
若賬號(hào)沒(méi)有注冊(cè)過(guò),將會(huì)顯示此用戶(hù)名不存在。如圖4.3登陸失敗界面所示。
圖4.3 登陸失敗界面
快遞錄入查詢(xún)和快遞公司界面如圖4.4所示。
圖4.4 快遞錄入查詢(xún)和快遞公司界面
點(diǎn)擊訂單輸入/查詢(xún),頁(yè)面跳轉(zhuǎn),在此頁(yè)面可以對(duì)訂單進(jìn)行輸入更新查詢(xún)刪除,效果如圖4.5訂單輸入/查詢(xún)頁(yè)面所示。
圖4.5 訂單輸入/查詢(xún)界面
點(diǎn)擊快遞公司,可對(duì)快遞公司進(jìn)行查詢(xún),下拉還有其他快遞公司可供選擇。如圖4.6快遞公司界面所示。
圖4.6 快遞公司界面
5 總結(jié)
本設(shè)計(jì)主要完成了快遞查詢(xún)錄入系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)?;仡櫞舜握n程報(bào)告感慨頗多,在這次移動(dòng)終端開(kāi)發(fā)課程設(shè)計(jì)過(guò)程中,我發(fā)現(xiàn)平時(shí)學(xué)習(xí)的知識(shí)與實(shí)踐環(huán)節(jié)所用到的有一定的差距,往往我覺(jué)得自己掌握的很好或者自認(rèn)為熟練的技術(shù)卻在此次實(shí)踐環(huán)節(jié)中往往出問(wèn)題,書(shū)本上的知識(shí)只提供方法的借鑒,實(shí)踐中自己必須摸索出適合具體工作的方法,這一切都離不開(kāi)鉆研精神與勤學(xué)好問(wèn)的精神.在人與人相處過(guò)程中我收獲更大,首先要謙虛謹(jǐn)慎,不能自以為是,認(rèn)為自己懂得很多,而僅僅埋頭苦干,而不向他人請(qǐng)教,工作不但是實(shí)踐與應(yīng)用的過(guò)程,同時(shí)也是學(xué)習(xí)的過(guò)程。在這短短的時(shí)間里,讓我深深的感覺(jué)到自己在實(shí)際應(yīng)用中所學(xué)專(zhuān)業(yè)知識(shí)的匱乏。讓我真真領(lǐng)悟到“學(xué)無(wú)止境”這句話的涵義。而老師在專(zhuān)業(yè)認(rèn)識(shí)周中所講的,都是課本上沒(méi)有而對(duì)我們又非常實(shí)用的東西,這又給我們的實(shí)訓(xùn)增加了濃墨淡采的光輝。我懂得了實(shí)際生活中,專(zhuān)業(yè)知識(shí)是怎樣應(yīng)用與實(shí)踐的。
在Android studio調(diào)試過(guò)程中我也遇到了很多問(wèn)題,比如圖片的選擇,我剛開(kāi)始選擇的圖片過(guò)于清晰,導(dǎo)致程序無(wú)法運(yùn)行。后來(lái)選擇大小較小的圖片發(fā)現(xiàn)還是出錯(cuò),回顧老師的課堂回放視頻才發(fā)現(xiàn)老師講過(guò),需要將圖片的格式也進(jìn)行更改。
附錄
登入實(shí)現(xiàn)代碼
public class?LoginActivity?extends?AppCompatActivity {
private?TextView?tv_main_title;//標(biāo)題
private?TextView?tv_back,tv_register,tv_find_psw;//返回鍵,顯示的注冊(cè),找回密碼
private?Button?btn_login;//登錄按鈕
private?String?userName,psw,spPsw;//獲取的用戶(hù)名,密碼,加密密碼
private?EditText?et_user_name,et_psw;//編輯框
@Override
protected void?onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
//設(shè)置此界面為豎屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
init();
}
//獲取界面控件
private void?init() {
//從main_title_bar中獲取的id
tv_main_title=findViewById(R.id.tv_main_title);
tv_main_title.setText("登錄");
tv_back=findViewById(R.id.tv_back);
//從activity_login.xml中獲取的
tv_register=findViewById(R.id.tv_register);
tv_find_psw=findViewById(R.id.tv_find_psw);
btn_login=findViewById(R.id.btn_login);
et_user_name=findViewById(R.id.et_user_name);
et_psw=findViewById(R.id.et_psw);
//返回鍵的點(diǎn)擊事件
tv_back.setOnClickListener(new?View.OnClickListener() {
@Override
public void?onClick(View v) {
//登錄界面銷(xiāo)毀
LoginActivity.this.finish();
}
});
//立即注冊(cè)控件的點(diǎn)擊事件
tv_register.setOnClickListener(new?View.OnClickListener() {
@Override
public void?onClick(View v) {
//為了跳轉(zhuǎn)到注冊(cè)界面,并實(shí)現(xiàn)注冊(cè)功能
Intent intent=new?Intent(LoginActivity.this,RegisterActivity.class);
startActivityForResult(intent, 1);
}
});
//找回密碼控件的點(diǎn)擊事件
tv_find_psw.setOnClickListener(new?View.OnClickListener() {
@Override
public void?onClick(View v) {
//跳轉(zhuǎn)到找回密碼界面
}
});
//登錄按鈕的點(diǎn)擊事件
btn_login.setOnClickListener(new?View.OnClickListener() {
@Override
public void?onClick(View v) {
//開(kāi)始登錄,獲取用戶(hù)名和密碼 getText().toString().trim();
userName=et_user_name.getText().toString().trim();
psw=et_psw.getText().toString().trim();
//對(duì)當(dāng)前用戶(hù)輸入的密碼進(jìn)行MD5加密再進(jìn)行比對(duì)判斷, MD5Utils.md5( ); psw 進(jìn)行加密判斷是否一致
String md5Psw= MD5Utils.md5(psw);
// md5Psw ; spPsw 為 根據(jù)從SharedPreferences中用戶(hù)名讀取密碼
// 定義方法 readPsw為了讀取用戶(hù)名,得到密碼
spPsw=readPsw(userName);
// TextUtils.isEmpty
if(TextUtils.isEmpty(userName)){
Toast.makeText(LoginActivity.this,?"請(qǐng)輸入用戶(hù)名", Toast.LENGTH_SHORT).show();
return;
}else if(TextUtils.isEmpty(psw)){
Toast.makeText(LoginActivity.this,?"請(qǐng)輸入密碼", Toast.LENGTH_SHORT).show();
return;
// md5Psw.equals(); 判斷,輸入的密碼加密后,是否與保存在SharedPreferences中一致
}else if(md5Psw.equals(spPsw)){
//一致登錄成功
Toast.makeText(LoginActivity.this,?"登錄成功", Toast.LENGTH_SHORT).show();
//保存登錄狀態(tài),在界面保存登錄的用戶(hù)名 定義個(gè)方法 saveLoginStatus boolean 狀態(tài) , userName 用戶(hù)名;
saveLoginStatus(true,?userName);
//登錄成功后關(guān)閉此頁(yè)面進(jìn)入主頁(yè)
Intent data=new?Intent();
//datad.putExtra( ); name , value ;
data.putExtra("isLogin",true);
//RESULT_OK為Activity系統(tǒng)常量,狀態(tài)碼為-1
// 表示此頁(yè)面下的內(nèi)容操作成功將data返回到上一頁(yè)面,如果是用back返回過(guò)去的則不存在用setResult傳遞data值
setResult(RESULT_OK,data);
//銷(xiāo)毀登錄界面
LoginActivity.this.finish();
//跳轉(zhuǎn)到主界面,登錄成功的狀態(tài)傳遞到 MainActivity 中
startActivity(new?Intent(LoginActivity.this,Classification.class));
return;
}else if((spPsw!=null&&!TextUtils.isEmpty(spPsw)&&!md5Psw.equals(spPsw))){
Toast.makeText(LoginActivity.this,?"輸入的用戶(hù)名和密碼不一致", Toast.LENGTH_SHORT).show();
return;
}else{
Toast.makeText(LoginActivity.this,?"此用戶(hù)名不存在", Toast.LENGTH_SHORT).show();
}
}
});
}
/**
*從SharedPreferences中根據(jù)用戶(hù)名讀取密碼
*/
private?String readPsw(String userName){
//getSharedPreferences("loginInfo",MODE_PRIVATE);
//"loginInfo",mode_private; MODE_PRIVATE表示可以繼續(xù)寫(xiě)入
SharedPreferences sp=getSharedPreferences("loginInfo",?MODE_PRIVATE);
//sp.getString() userName, "";
return?sp.getString(userName ,?"");
}
/**
*保存登錄狀態(tài)和登錄用戶(hù)名到SharedPreferences中
*/
private void?saveLoginStatus(boolean?status,String userName){
//saveLoginStatus(true, userName);
//loginInfo表示文件名 SharedPreferences sp=getSharedPreferences("loginInfo", MODE_PRIVATE);
SharedPreferences sp=getSharedPreferences("loginInfo",?MODE_PRIVATE);
//獲取編輯器
SharedPreferences.Editor editor=sp.edit();
//存入boolean類(lèi)型的登錄狀態(tài)
editor.putBoolean("isLogin", status);
//存入登錄狀態(tài)時(shí)的用戶(hù)名
editor.putString("loginUserName", userName);
//提交修改
editor.commit();
}
/**
* 注冊(cè)成功的數(shù)據(jù)返回至此
*?@param requestCode?請(qǐng)求碼
*?@param resultCode?結(jié)果碼
*?@param data?數(shù)據(jù)
*/
@Override
//顯示數(shù)據(jù), onActivityResult
//startActivityForResult(intent, 1); 從注冊(cè)界面中獲取數(shù)據(jù)
//int requestCode , int resultCode , Intent data
// LoginActivity -> startActivityForResult -> onActivityResult();
protected void?onActivityResult(int?requestCode,?int?resultCode, Intent data) {
//super.onActivityResult(requestCode, resultCode, data);
super.onActivityResult(requestCode, resultCode, data);
if(data!=null){
//是獲取注冊(cè)界面回傳過(guò)來(lái)的用戶(hù)名
// getExtra().getString("***");
String userName=data.getStringExtra("userName");
if(!TextUtils.isEmpty(userName)){
//設(shè)置用戶(hù)名到 et_user_name 控件
et_user_name.setText(userName);
//et_user_name控件的setSelection()方法來(lái)設(shè)置光標(biāo)位置
et_user_name.setSelection(userName.length());
}
}
}
}注冊(cè)實(shí)現(xiàn)代碼
public class?RegisterActivity?extends?AppCompatActivity {
private?TextView?tv_main_title;//標(biāo)題
private?TextView?tv_back;//返回按鈕
private?Button?btn_register;//注冊(cè)按鈕
//用戶(hù)名,密碼,再次輸入的密碼的控件
private?EditText?et_user_name,et_psw,et_psw_again;
//用戶(hù)名,密碼,再次輸入的密碼的控件的獲取值
private?String?userName,psw,pswAgain;
//標(biāo)題布局
private?RelativeLayout?rl_title_bar;
@Override
protected void?onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//設(shè)置頁(yè)面布局 ,注冊(cè)界面
setContentView(R.layout.activity_register);
//設(shè)置此界面為豎屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
init();
}
private void?init() {
//從main_title_bar.xml 頁(yè)面布局中獲取對(duì)應(yīng)的UI控件
tv_main_title=findViewById(R.id.tv_main_title);
tv_main_title.setText("注冊(cè)");
tv_back=findViewById(R.id.tv_back);
//布局根元素
rl_title_bar=findViewById(R.id.title_bar);
rl_title_bar.setBackgroundColor(Color.TRANSPARENT);
//從activity_register.xml 頁(yè)面中獲取對(duì)應(yīng)的UI控件
btn_register=findViewById(R.id.btn_register);
et_user_name=findViewById(R.id.et_user_name);
et_psw=findViewById(R.id.et_psw);
et_psw_again=findViewById(R.id.et_psw_again);
tv_back.setOnClickListener(new?View.OnClickListener() {
@Override
public void?onClick(View v) {
//返回鍵
RegisterActivity.this.finish();
}
});
//注冊(cè)按鈕
btn_register.setOnClickListener(new?View.OnClickListener() {
@Override
public void?onClick(View v) {
//獲取輸入在相應(yīng)控件中的字符串
getEditString();
//判斷輸入框內(nèi)容
if(TextUtils.isEmpty(userName)){
Toast.makeText(RegisterActivity.this,?"請(qǐng)輸入用戶(hù)名", Toast.LENGTH_SHORT).show();
return;
}else if(TextUtils.isEmpty(psw)){
Toast.makeText(RegisterActivity.this,?"請(qǐng)輸入密碼", Toast.LENGTH_SHORT).show();
return;
}else if(TextUtils.isEmpty(pswAgain)){
Toast.makeText(RegisterActivity.this,?"請(qǐng)?jiān)俅屋斎朊艽a", Toast.LENGTH_SHORT).show();
return;
}else if(!psw.equals(pswAgain)){
Toast.makeText(RegisterActivity.this,?"輸入兩次的密碼不一樣", Toast.LENGTH_SHORT).show();
return;
/**
*從SharedPreferences中讀取輸入的用戶(hù)名,判斷SharedPreferences中是否有此用戶(hù)名
*/
}else if(isExistUserName(userName)){
Toast.makeText(RegisterActivity.this,?"此賬戶(hù)名已經(jīng)存在", Toast.LENGTH_SHORT).show();
return;
}else{
Toast.makeText(RegisterActivity.this,?"注冊(cè)成功", Toast.LENGTH_SHORT).show();
//把賬號(hào)、密碼和賬號(hào)標(biāo)識(shí)保存到sp里面
/**
* 保存賬號(hào)和密碼到SharedPreferences中
*/
saveRegisterInfo(userName,?psw);
//注冊(cè)成功后把賬號(hào)傳遞到LoginActivity.java中
// 返回值到loginActivity顯示
Intent data =?new?Intent();
data.putExtra("userName",?userName);
setResult(RESULT_OK, data);
//RESULT_OK為Activity系統(tǒng)常量,狀態(tài)碼為-1,
// 表示此頁(yè)面下的內(nèi)容操作成功將data返回到上一頁(yè)面,如果是用back返回過(guò)去的則不存在用setResult傳遞data值
RegisterActivity.this.finish();
}
}
});
}
/**
* 獲取控件中的字符串
*/
private void?getEditString(){
userName=et_user_name.getText().toString().trim();
psw=et_psw.getText().toString().trim();
pswAgain=et_psw_again.getText().toString().trim();
}
/**
* 從SharedPreferences中讀取輸入的用戶(hù)名,判斷SharedPreferences中是否有此用戶(hù)名
*/
private boolean?isExistUserName(String userName){
boolean?has_userName=false;
//mode_private SharedPreferences sp = getSharedPreferences( );
// "loginInfo", MODE_PRIVATE
SharedPreferences sp=getSharedPreferences("loginInfo",?MODE_PRIVATE);
//獲取密碼
String spPsw=sp.getString(userName,?"");//傳入用戶(hù)名獲取密碼
//如果密碼不為空則確實(shí)保存過(guò)這個(gè)用戶(hù)名
if(!TextUtils.isEmpty(spPsw)) {
has_userName=true;
}
return?has_userName;
}
private void?saveRegisterInfo(String userName,String psw){
String md5Psw = MD5Utils.md5(psw);//把密碼用MD5加密
//loginInfo表示文件名, mode_private SharedPreferences sp = getSharedPreferences( );
SharedPreferences sp=getSharedPreferences("loginInfo",?MODE_PRIVATE);
//獲取編輯器, SharedPreferences.Editor editor -> sp.edit();
SharedPreferences.Editor editor=sp.edit();
//以用戶(hù)名為key,密碼為value保存在SharedPreferences中
//key,value,如鍵值對(duì),editor.putString(用戶(hù)名,密碼);
editor.putString(userName, md5Psw);
//提交修改 editor.commit();
editor.commit();
}增刪查改代碼實(shí)現(xiàn)
public class DictActivity extends AppCompatActivity {
private Button insertButton, updateButton, searchButton, deleteButton;
private Button btn_xl1;
private EditText name, age;
private TextView show, showAge;
final DatabaseHelper dbHelper = new DatabaseHelper(DictActivity.this);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dict);
btn_xl1 = findViewById(R.id.btn_xl);
btn_xl1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//創(chuàng)建Intent 對(duì)象
Intent intent = new Intent(DictActivity.this, Classification.class);
//啟動(dòng)Activity
startActivity(intent);
}
});
insertButton = findViewById(R.id.btn_insert);
updateButton = findViewById(R.id.btn_update);
searchButton = findViewById(R.id.btn_search);
deleteButton = findViewById(R.id.btn_delete);
name = findViewById(R.id.name);
age = findViewById(R.id.age);
show = findViewById(R.id.tv_show);
showAge = findViewById(R.id.tv_showAge);
SQLiteDatabase db = dbHelper.getReadableDatabase();
myShow();
insertButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name", name.getText().toString());
values.put("age", age.getText().toString());
long id = db.insert("information", null, values);
Log.d("myDeBug", "insert");
myShow();
db.close();
name.setText(null);
age.setText(null);
}
});
updateButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("age", age.getText().toString());
db.update("information", values, "name=?", new String[]{name.getText().toString()});
myShow();
db.close();
Log.d("myDebug", "update");
name.setText(null);
age.setText(null);
}
});
searchButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
String name1 = name.getText().toString();
show.setText(null);
if (name1.equals("")) {
// show.setText("姓名");
// showAge.setText("單號(hào)");
// Cursor cursor = db.rawQuery("select * from information",null);
//
// while (cursor.moveToNext()) {
// String newName = cursor.getString(cursor.getColumnIndex("name"));
// int newAge = cursor.getInt(cursor.getColumnIndex("age"));
// show.setText(show.getText() + "\n" + newName);
// showAge.setText(showAge.getText()+"\n" + newAge);
// }
myShow();
db.close();
} else {
show.setText("姓名");
showAge.setText("單號(hào)");
Cursor cursor = db.rawQuery("select * from information where name = ? ", new String[]{name1});
while (cursor.moveToNext()) {
String newName = cursor.getString(cursor.getColumnIndex("name"));
int newAge = cursor.getInt(cursor.getColumnIndex("age"));
// show.setText(show.getText() + "\n" + newName + "\t" + newAge);
show.setText(show.getText() + "\n" + newName);
showAge.setText(showAge.getText() + "\n" + newAge);
}
cursor.close();
db.close();
name.setText(null);
age.setText(null);
}
}
});
deleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.delete("information", "name=?", new String[]{name.getText().toString()});
myShow();
db.close();
Log.d("myDeBug", "DeleteSuccess");
name.setText(null);
age.setText(null);
}
});
}
public void myShow() {
SQLiteDatabase db = dbHelper.getReadableDatabase();
show.setText("姓名");
showAge.setText("單號(hào)");
Cursor cursor = db.rawQuery("select * from information", null);
while (cursor.moveToNext()) {
String newName = cursor.getString(cursor.getColumnIndex("name"));
int newAge = cursor.getInt(cursor.getColumnIndex("age"));
show.setText(show.getText() + "\n" + newName);
showAge.setText(showAge.getText() + "\n" + newAge);
}
cursor.close();
}
}
public class?DatabaseHelper?extends?SQLiteOpenHelper {
public?DatabaseHelper(Context context){super(context,"Test.db",null,1);}
//第一個(gè)參數(shù)是上下文,第二個(gè)參數(shù)是數(shù)據(jù)庫(kù)名稱(chēng),
//第三個(gè)參數(shù)是CursorFactory對(duì)象,一般設(shè)置為null,第四個(gè)參數(shù)是數(shù)據(jù)庫(kù)的版本
public void?onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE information(_id INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(20),age INTEGER)");
}
//創(chuàng)建表 表名information 表結(jié)構(gòu) 自增id,字符串姓名,int年齡
public void?onUpgrade(SQLiteDatabase db,?int?oldVersion,?int?newVersion) {
Log.d("myDeBug","數(shù)據(jù)庫(kù)版本已更新");
}
//數(shù)據(jù)庫(kù)版本發(fā)生變化時(shí)調(diào)用
}