Android開發(fā)中實(shí)現(xiàn)用戶注冊(cè)和登陸的代碼實(shí)例分享
在android的應(yīng)用中越來(lái)越多的包含了網(wǎng)絡(luò)互動(dòng)功能,這就帶來(lái)了注冊(cè),登陸賬號(hào)功能。本文完整的介紹對(duì)話框的方式實(shí)現(xiàn)用戶登陸功能。
登陸效果: 應(yīng)用程序判斷當(dāng)前用戶還未登陸,彈出登陸對(duì)話框,用戶輸入賬號(hào)和密碼信息后,傳到服務(wù)器驗(yàn)證,驗(yàn)證成功后,現(xiàn)實(shí)Toast 成功信息,并轉(zhuǎn)到其他界面。

注冊(cè)效果:用戶如沒有賬號(hào),則點(diǎn)擊登陸對(duì)話框的 "沒有賬號(hào),快速注冊(cè)賬號(hào)", 彈出注冊(cè)界面,用戶輸入注冊(cè)信息,點(diǎn)擊注冊(cè)按鈕,注冊(cè)成功后,彈出toast信息"注冊(cè)成功",完成注冊(cè)后,轉(zhuǎn)到其他功能界面。

整個(gè)功能大體上分兩塊:登陸對(duì)話框:輸入登陸信息,實(shí)現(xiàn)登陸功能,轉(zhuǎn)到注冊(cè)界面。注冊(cè)對(duì)話框:輸入注冊(cè)信息,實(shí)現(xiàn)注冊(cè)功能。
對(duì)話框界面布局xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/txt_loginerror"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:textColor="#ff0000"
android:text="輸入的賬號(hào)和密碼不正確"
android:gravity="left"
android:textAppearance="?android:attr/textAppearanceMedium"
android:visibility="invisible"
/>
<TextView
android:id="@+id/username"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:text="賬號(hào)"
android:gravity="left"
android:textAppearance="?android:attr/textAppearanceMedium"
/>
<EditText
android:id="@+id/txt_username"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:autoText="false"
android:capitalize="none"
android:gravity="fill_horizontal"
android:textAppearance="?android:attr/textAppearanceMedium"
/>
<TextView
android:id="@+id/password"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="密碼"
android:gravity="left"
/>
<EditText
android:id="@+id/txt_password"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:autoText="false"
android:capitalize="none"
android:gravity="fill_horizontal"
android:textAppearance="?android:attr/textAppearanceMedium"
/>
<TextView
android:id="@+id/txt_toregister"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:textColor="#2200C1"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="沒有賬號(hào)?快速注冊(cè)"
android:gravity="left"
/>
</LinearLayout>
后臺(tái)業(yè)務(wù)邏輯:
/*
* 創(chuàng)建用戶登陸的對(duì)話框
* 登陸界面包含兩個(gè)按鈕
* 1按鈕為登陸
* 2按鈕為不登陸試玩
* */
private void CreateLoginAlert()
{
AlertDialog.Builder ad =new AlertDialog.Builder(this);
ad.setTitle("賬號(hào)登陸");
ad.setView(ViewUtility.GetView(this,R.layout.sub_logindialog));
adi= ad.create();
/*
*/
adi.setButton("登陸", new OnClickListener(){
@Override
public void onClick(DialogInterface arg0, int arg1) {
EditText password= (EditText)adi.findViewById(R.id.txt_password);
EditText account =(EditText)adi.findViewById(R.id.txt_username);
PassWord=password.getText().toString();
Account=account.getText().toString();
//生成登陸對(duì)話框
m_Dialog=ProgressDialog.show(Main.this, "請(qǐng)等待...", "正在為你登陸...",true);
mRedrawHandler.sleep(100);
}
});
adi.setButton2("試 玩", new OnClickListener(){
@Override
public void onClick(DialogInterface arg0, int arg1) {
ViewUtility.NavigateActivate(Main.this, SelectTheme.class);
}
});
adi.show();
//設(shè)置注冊(cè)點(diǎn)擊事件
TextView register=(TextView)adi.findViewById(R.id.txt_toregister);
register.setOnClickListener(new TextView.OnClickListener()
{
public void onClick(View v){
//創(chuàng)建注冊(cè)對(duì)話框
CreateRegisterAlert();
adi.dismiss();
}
});
}
/*
*定時(shí)線程做驗(yàn)證用
* */
private RefreshHandler mRedrawHandler = new RefreshHandler();
class RefreshHandler extends Handler {
@Override
public void handleMessage(Message msg) {
try{
//調(diào)用網(wǎng)絡(luò)接口,實(shí)現(xiàn)登陸指令
Boolean flags= UserDataServiceHelper.Login(Account, PassWord);
if(flags)
{
//保存登陸信息
UserDataWriteHelper uw=new UserDataWriteHelper(Main.this);
uw.SaveUserInfoInDB("xuwenbing", Account);
//提示登陸成功
Toast.makeText(Main.this, "登陸成功", Toast.LENGTH_SHORT).show();
//轉(zhuǎn)到主題頁(yè)面
ViewUtility.NavigateActivate(Main.this, SelectTheme.class);
}else
{
//失敗 顯示錯(cuò)誤信息
Toast.makeText(Main.this, "登陸失敗", Toast.LENGTH_SHORT).show();
adi.show();
adi.findViewById(R.id.txt_loginerror).setVisibility(View.VISIBLE);
}
}
catch(Exception e)
{
e.printStackTrace();
}
finally{
m_Dialog.dismiss();
}
}
public void sleep(long delayMillis) {
this.removeMessages(0);
sendMessageDelayed(obtainMessage(0), delayMillis);
}
};
對(duì)話框界面布局xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center"
>
<TextView
android:id="@+id/txt_loginerror"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:textColor="#ff0000"
android:text="輸入的賬號(hào)和密碼不正確"
android:gravity="left"
android:textAppearance="?android:attr/textAppearanceMedium"
android:visibility="invisible"
/>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<TextView
android:id="@+id/username"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:text="賬號(hào)"
android:gravity="left"
android:textAppearance="?android:attr/textAppearanceMedium"
/>
<EditText
android:id="@+id/txt_username"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:autoText="false"
android:capitalize="none"
android:gravity="fill_horizontal"
android:textAppearance="?android:attr/textAppearanceMedium"
/>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<TextView
android:id="@+id/password"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="密碼"
android:gravity="left"
/>
<EditText
android:id="@+id/txt_password"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:autoText="false"
android:capitalize="none"
android:gravity="fill_horizontal"
android:textAppearance="?android:attr/textAppearanceMedium"
/>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<TextView
android:id="@+id/nicename"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="昵稱"
android:gravity="left"
/>
<EditText
android:id="@+id/txt_nicename"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:autoText="false"
android:capitalize="none"
android:gravity="fill_horizontal"
android:textAppearance="?android:attr/textAppearanceMedium"
/>
</LinearLayout>
</LinearLayout>
后臺(tái)業(yè)務(wù)邏輯:
/*創(chuàng)建注冊(cè)對(duì)話框*/
private void CreateRegisterAlert()
{
//registerdialog
AlertDialog.Builder ad =new AlertDialog.Builder(this);
ad.setTitle("注冊(cè)賬號(hào)");
ad.setView(ViewUtility.GetView(this,R.layout.sub_registerdialog));
registerdialog= ad.create();
registerdialog.setButton("注冊(cè)", new OnClickListener(){
@Override
public void onClick(DialogInterface arg0, int arg1) {
EditText password= (EditText)registerdialog.findViewById(R.id.txt_password);
EditText account =(EditText)registerdialog.findViewById(R.id.txt_username);
EditText nicename =(EditText)registerdialog.findViewById(R.id.txt_nicename);
PassWord=password.getText().toString();
Account=account.getText().toString();
NiceName=nicename.getText().toString();
//生成注冊(cè)對(duì)話框
m_Dialog=ProgressDialog.show(Main.this, "請(qǐng)等待...", "正在為你注冊(cè)...",true);
mRegsiterHandler.sleep(100);
}
});
registerdialog.setButton2("試 玩", new OnClickListener(){
@Override
public void onClick(DialogInterface arg0, int arg1) {
ViewUtility.NavigateActivate(Main.this, SelectTheme.class);
}
});
registerdialog.show();
}
/*
*定時(shí)注冊(cè)程序
* */
private RegsiterHandler mRegsiterHandler = new RegsiterHandler();
class RegsiterHandler extends Handler {
@Override
public void handleMessage(Message msg) {
try{
//調(diào)用網(wǎng)絡(luò)接口,實(shí)現(xiàn)注冊(cè)指令
Boolean flags= UserDataServiceHelper.Register(Account, PassWord,NiceName);
if(flags)
{
//保存注冊(cè)信息
UserDataWriteHelper uw=new UserDataWriteHelper(Main.this);
uw.SaveUserInfoInDB("xuwenbing", Account);
//提示注冊(cè)成功
Toast.makeText(Main.this, "注冊(cè)成功", Toast.LENGTH_SHORT).show();
//轉(zhuǎn)到主題頁(yè)面
ViewUtility.NavigateActivate(Main.this, SelectTheme.class);
}else
{
//失敗 顯示錯(cuò)誤信息
Toast.makeText(Main.this, "注冊(cè)失敗", Toast.LENGTH_SHORT).show();
registerdialog.show();
registerdialog.findViewById(R.id.txt_loginerror).setVisibility(View.VISIBLE);
}
}
catch(Exception e)
{
e.printStackTrace();
}
finally{
m_Dialog.dismiss();
}
}
public void sleep(long delayMillis) {
this.removeMessages(0);
sendMessageDelayed(obtainMessage(0), delayMillis);
}
};
兩個(gè)網(wǎng)絡(luò)接口功能:
//調(diào)用網(wǎng)絡(luò)接口,實(shí)現(xiàn)登陸指令 Boolean flags= UserDataServiceHelper.Login(Account, PassWord); //調(diào)用網(wǎng)絡(luò)接口,實(shí)現(xiàn)注冊(cè)指令 Boolean flags= UserDataServiceHelper.Register(Account, PassWord,NiceName);
- android實(shí)現(xiàn)注冊(cè)登錄程序
- Android實(shí)現(xiàn)登錄注冊(cè)頁(yè)面(下)
- Android實(shí)現(xiàn)登錄注冊(cè)功能
- Android基于Sqlite實(shí)現(xiàn)注冊(cè)和登錄功能
- Android實(shí)現(xiàn)注冊(cè)登錄界面的實(shí)例代碼
- Android設(shè)計(jì)登錄界面、找回密碼、注冊(cè)功能
- Android客戶端實(shí)現(xiàn)注冊(cè)、登錄詳解(1)
- Android如何通過(guò)手機(jī)獲取驗(yàn)證碼來(lái)完成注冊(cè)功能
- Android用戶注冊(cè)界面簡(jiǎn)單設(shè)計(jì)
- Android用SharedPreferences實(shí)現(xiàn)登錄注冊(cè)注銷功能
相關(guān)文章
springboot如何使用vue打包過(guò)的頁(yè)面資源
這篇文章主要介紹了springboot如何使用vue打包過(guò)的頁(yè)面資源,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
如何在Maven項(xiàng)目配置pom.xml指定JDK版本和編碼
maven是個(gè)項(xiàng)目管理工具,如果我們不告訴它要使用什么樣的jdk版本編譯,它就會(huì)用maven-compiler-plugin默認(rèn)的jdk版本來(lái)處理,這樣就容易出現(xiàn)版本不匹配的問題,這篇文章主要給大家介紹了關(guān)于如何在Maven項(xiàng)目配置pom.xml指定JDK版本和編碼的相關(guān)資料,需要的朋友可以參考下2024-01-01
使用JAR包中MANIFEST.MF的注意事項(xiàng)
這篇文章主要介紹了使用JAR包中MANIFEST.MF的注意事項(xiàng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
IDEA 自動(dòng)生成 JPA 實(shí)體類的圖文教程
這篇文章主要介紹了IDEA 自動(dòng)生成 JPA 實(shí)體類的圖文教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
Java 前臺(tái)加后臺(tái)精品圖書管理系統(tǒng)的實(shí)現(xiàn)
相信每一個(gè)學(xué)生學(xué)編程的時(shí)候,應(yīng)該都會(huì)寫一個(gè)小項(xiàng)目——圖書管理系統(tǒng)。為什么這么說(shuō)呢?我認(rèn)為一個(gè)學(xué)校的氛圍很大一部分可以從圖書館的氛圍看出來(lái),而圖書管理系統(tǒng)這個(gè)不大不小的項(xiàng)目,接觸的多,也比較熟悉,不會(huì)有陌生感,能夠練手,又有些難度,所以我的小項(xiàng)目也來(lái)了2021-11-11

