在android的应用中越来越多的包含了网络互动功能,这就带来了注册,登陆账号功能。本文完整的介绍对话框的方式实现用户登陆功能。
登陆效果: 应用程序判断当前用户还未登陆,弹出登陆对话框,用户输入账号和密码信息后,传到服务器验证,验证成功后,现实Toast 成功信息,并转到其他界面。
注册效果:用户如没有账号,则点击登陆对话框的 "没有账号,快速注册账号", 弹出注册界面,用户输入注册信息,点击注册按钮,注册成功后,弹出toast信息"注册成功",完成注册后,转到其他功能界面。
整个功能大体上分两块:登陆对话框:输入登陆信息,实现登陆功能,转到注册界面。注册对话框:输入注册信息,实现注册功能。
对话框界面布局xml文件:
01 | <? xml version = "1.0" encoding = "utf-8" ?> |
04 | android:layout_width = "fill_parent" |
05 | android:layout_height = "wrap_content" |
06 | android:orientation = "vertical" > |
09 | android:id = "@+id/txt_loginerror" |
10 | android:layout_height = "wrap_content" |
11 | android:layout_width = "wrap_content" |
12 | android:layout_marginLeft = "20dip" |
13 | android:layout_marginRight = "20dip" |
14 | android:textColor = "#ff0000" |
15 | android:text = "输入的账号和密码不正确" |
16 | android:gravity = "left" |
17 | android:textAppearance = "?android:attr/textAppearanceMedium" |
18 | android:visibility = "invisible" |
23 | android:id = "@+id/username" |
24 | android:layout_height = "wrap_content" |
25 | android:layout_width = "wrap_content" |
26 | android:layout_marginLeft = "20dip" |
27 | android:layout_marginRight = "20dip" |
29 | android:gravity = "left" |
30 | android:textAppearance = "?android:attr/textAppearanceMedium" |
34 | android:id = "@+id/txt_username" |
35 | android:layout_height = "wrap_content" |
36 | android:layout_width = "fill_parent" |
37 | android:layout_marginLeft = "20dip" |
38 | android:layout_marginRight = "20dip" |
39 | android:autoText = "false" |
40 | android:capitalize = "none" |
41 | android:gravity = "fill_horizontal" |
42 | android:textAppearance = "?android:attr/textAppearanceMedium" |
45 | android:id = "@+id/password" |
46 | android:layout_height = "wrap_content" |
47 | android:layout_width = "wrap_content" |
48 | android:layout_marginLeft = "20dip" |
49 | android:layout_marginRight = "20dip" |
50 | android:textAppearance = "?android:attr/textAppearanceMedium" |
52 | android:gravity = "left" |
55 | android:id = "@+id/txt_password" |
56 | android:layout_height = "wrap_content" |
57 | android:layout_width = "fill_parent" |
58 | android:layout_marginLeft = "20dip" |
59 | android:layout_marginRight = "20dip" |
60 | android:autoText = "false" |
61 | android:capitalize = "none" |
62 | android:gravity = "fill_horizontal" |
63 | android:textAppearance = "?android:attr/textAppearanceMedium" |
67 | android:id = "@+id/txt_toregister" |
68 | android:layout_height = "wrap_content" |
69 | android:layout_width = "wrap_content" |
70 | android:layout_marginLeft = "20dip" |
71 | android:layout_marginRight = "20dip" |
72 | android:textColor = "#2200C1" |
73 | android:textAppearance = "?android:attr/textAppearanceMedium" |
74 | android:text = "没有账号?快速注册" |
75 | android:gravity = "left" |
后台业务逻辑:
007 | private void CreateLoginAlert() |
009 | AlertDialog.Builder ad =new AlertDialog.Builder(this); |
011 | ad.setView(ViewUtility.GetView(this,R.layout.sub_logindialog)); |
017 | adi.setButton("登陆", new OnClickListener(){ |
020 | public void onClick(DialogInterface arg0, int arg1) { |
022 | EditText password= (EditText)adi.findViewById(R.id.txt_password); |
023 | EditText account =(EditText)adi.findViewById(R.id.txt_username); |
025 | PassWord=password.getText().toString(); |
026 | Account=account.getText().toString(); |
028 | m_Dialog=ProgressDialog.show(Main.this, "请等待...", "正在为你登陆...",true); |
030 | mRedrawHandler.sleep(100); |
034 | adi.setButton2("试 玩", new OnClickListener(){ |
037 | public void onClick(DialogInterface arg0, int arg1) { |
038 | ViewUtility.NavigateActivate(Main.this, SelectTheme.class); |
046 | TextView register=(TextView)adi.findViewById(R.id.txt_toregister); |
047 | register.setOnClickListener(new TextView.OnClickListener() |
049 | public void onClick(View v){ |
051 | CreateRegisterAlert(); |
062 | private RefreshHandler mRedrawHandler = new RefreshHandler(); |
064 | class RefreshHandler extends Handler { |
067 | public void handleMessage(Message msg) { |
072 | Boolean flags= UserDataServiceHelper.Login(Account, PassWord); |
076 | UserDataWriteHelper uw= new UserDataWriteHelper(Main. this ); |
077 | uw.SaveUserInfoInDB( "xuwenbing" , Account); |
079 | Toast.makeText(Main. this , "登陆成功" , Toast.LENGTH_SHORT).show(); |
081 | ViewUtility.NavigateActivate(Main. this , SelectTheme. class ); |
085 | Toast.makeText(Main. this , "登陆失败" , Toast.LENGTH_SHORT).show(); |
087 | adi.findViewById(R.id.txt_loginerror).setVisibility(View.VISIBLE); |
098 | public void sleep( long delayMillis) { |
099 | this .removeMessages( 0 ); |
100 | sendMessageDelayed(obtainMessage( 0 ), delayMillis); |
对话框界面布局xml文件:
001 | <? xml version = "1.0" encoding = "utf-8" ?> |
004 | android:layout_width = "fill_parent" |
005 | android:layout_height = "wrap_content" |
006 | android:orientation = "vertical" > |
009 | android:layout_width = "fill_parent" |
010 | android:layout_height = "wrap_content" |
011 | android:orientation = "horizontal" |
012 | android:gravity = "center" |
015 | android:id = "@+id/txt_loginerror" |
016 | android:layout_height = "wrap_content" |
017 | android:layout_width = "wrap_content" |
018 | android:layout_marginLeft = "20dip" |
019 | android:layout_marginRight = "20dip" |
020 | android:textColor = "#ff0000" |
021 | android:text = "输入的账号和密码不正确" |
022 | android:gravity = "left" |
023 | android:textAppearance = "?android:attr/textAppearanceMedium" |
024 | android:visibility = "invisible" |
029 | android:layout_width = "fill_parent" |
030 | android:layout_height = "wrap_content" |
031 | android:orientation = "horizontal" |
035 | android:id = "@+id/username" |
036 | android:layout_height = "wrap_content" |
037 | android:layout_width = "wrap_content" |
038 | android:layout_marginLeft = "20dip" |
039 | android:layout_marginRight = "20dip" |
041 | android:gravity = "left" |
042 | android:textAppearance = "?android:attr/textAppearanceMedium" |
046 | android:id = "@+id/txt_username" |
047 | android:layout_height = "wrap_content" |
048 | android:layout_width = "fill_parent" |
049 | android:layout_marginLeft = "20dip" |
050 | android:layout_marginRight = "20dip" |
051 | android:autoText = "false" |
052 | android:capitalize = "none" |
053 | android:gravity = "fill_horizontal" |
054 | android:textAppearance = "?android:attr/textAppearanceMedium" |
059 | android:layout_width = "fill_parent" |
060 | android:layout_height = "wrap_content" |
061 | android:orientation = "horizontal" |
065 | android:id = "@+id/password" |
066 | android:layout_height = "wrap_content" |
067 | android:layout_width = "wrap_content" |
068 | android:layout_marginLeft = "20dip" |
069 | android:layout_marginRight = "20dip" |
070 | android:textAppearance = "?android:attr/textAppearanceMedium" |
072 | android:gravity = "left" |
075 | android:id = "@+id/txt_password" |
076 | android:layout_height = "wrap_content" |
077 | android:layout_width = "fill_parent" |
078 | android:layout_marginLeft = "20dip" |
079 | android:layout_marginRight = "20dip" |
080 | android:autoText = "false" |
081 | android:capitalize = "none" |
082 | android:gravity = "fill_horizontal" |
083 | android:textAppearance = "?android:attr/textAppearanceMedium" |
087 | android:layout_width = "fill_parent" |
088 | android:layout_height = "wrap_content" |
089 | android:orientation = "horizontal" |
092 | android:id = "@+id/nicename" |
093 | android:layout_height = "wrap_content" |
094 | android:layout_width = "wrap_content" |
095 | android:layout_marginLeft = "20dip" |
096 | android:layout_marginRight = "20dip" |
097 | android:textAppearance = "?android:attr/textAppearanceMedium" |
099 | android:gravity = "left" |
102 | android:id = "@+id/txt_nicename" |
103 | android:layout_height = "wrap_content" |
104 | android:layout_width = "fill_parent" |
105 | android:layout_marginLeft = "20dip" |
106 | android:layout_marginRight = "20dip" |
107 | android:autoText = "false" |
108 | android:capitalize = "none" |
109 | android:gravity = "fill_horizontal" |
110 | android:textAppearance = "?android:attr/textAppearanceMedium" |
后台业务逻辑:
02 | private void CreateRegisterAlert() |
05 | AlertDialog.Builder ad =new AlertDialog.Builder(this); |
07 | ad.setView(ViewUtility.GetView(this,R.layout.sub_registerdialog)); |
08 | registerdialog= ad.create(); |
10 | registerdialog.setButton("注册", new OnClickListener(){ |
13 | public void onClick(DialogInterface arg0, int arg1) { |
15 | EditText password= (EditText)registerdialog.findViewById(R.id.txt_password); |
16 | EditText account =(EditText)registerdialog.findViewById(R.id.txt_username); |
17 | EditText nicename =(EditText)registerdialog.findViewById(R.id.txt_nicename); |
19 | PassWord=password.getText().toString(); |
20 | Account=account.getText().toString(); |
21 | NiceName=nicename.getText().toString(); |
23 | m_Dialog=ProgressDialog.show(Main.this, "请等待...", "正在为你注册...",true); |
25 | mRegsiterHandler.sleep(100); |
29 | registerdialog.setButton2("试 玩", new OnClickListener(){ |
32 | public void onClick(DialogInterface arg0, int arg1) { |
33 | ViewUtility.NavigateActivate(Main.this, SelectTheme.class); |
37 | registerdialog.show(); |
43 | private RegsiterHandler mRegsiterHandler = new RegsiterHandler(); |
45 | class RegsiterHandler extends Handler { |
48 | public void handleMessage(Message msg) { |
53 | Boolean flags= UserDataServiceHelper.Register(Account, PassWord,NiceName); |
57 | UserDataWriteHelper uw= new UserDataWriteHelper(Main. this ); |
58 | uw.SaveUserInfoInDB( "xuwenbing" , Account); |
60 | Toast.makeText(Main. this , "注册成功" , Toast.LENGTH_SHORT).show(); |
62 | ViewUtility.NavigateActivate(Main. this , SelectTheme. class ); |
66 | Toast.makeText(Main. this , "注册失败" , Toast.LENGTH_SHORT).show(); |
67 | registerdialog.show(); |
68 | registerdialog.findViewById(R.id.txt_loginerror).setVisibility(View.VISIBLE); |
79 | public void sleep( long delayMillis) { |
80 | this .removeMessages( 0 ); |
81 | sendMessageDelayed(obtainMessage( 0 ), delayMillis); |
两个网络接口功能:
2 | Boolean flags= UserDataServiceHelper.Login(Account, PassWord); |
4 | Boolean flags= UserDataServiceHelper.Register(Account, PassWord,NiceName); |