package siwi.map.android;
import java.io.DataInputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.Toast;
import android.widget.CompoundButton.OnCheckedChangeListener;
public class Login extends Activity {
/** Called when the activity is first created. */
// 1.远程登录(用户名和密码超过3位长度则成功,在服务器可以自己设置代码)
// 2.含有loading效果(多线程处理,时事返回数据)
// 3.登录不成功能够提示出错原因
// 4.保存登錄后的信息(如用戶名和密碼,可以自己設置)
// 注意:
// 1.需要设置androidManifest文件
// <activity android:name=".IndexPage" android:label="登陆后的页面"
// />
// <activity android:name=".Register" android:label="注册"
// />
// </application>
// <uses-permission android:name="android.permission.INTERNET" />
// 2.需要编写一个服务器servlet代码
// String userName = request.getParameter("userName");
// String password = request.getParameter("password");
// System.out.println(userName+"-"+password);
// DataOutputStream dos = new DataOutputStream(response.getOutputStream());
// if (userName != null && password != null) {
// if (userName.length() > 3 && password.length() > 3) {
// dos.writeInt(16);
// }else{
// dos.writeInt(0);
// }
// } else {
// dos.writeInt(0);
// }
// dos.flush();
// dos.close();
// 3.别望了配置web.xml(如果是jsp则可以不用配置)
// 4.需要在Login.class中的内部类LoginFailureHandler的run方法中的validateURL
private String userName;
private String password;
/** 以下是UI */
private EditText view_userName;
private EditText view_password;
private CheckBox view_rememberMe;
private Button view_loginSubmit;
private Button view_loginRegister;
private static final int MENU_EXIT = Menu.FIRST - 1;
private static final int MENU_ABOUT = Menu.FIRST;
/** 用来操作SharePreferences的标识 */
private final String SHARE_LOGIN_TAG = "MAP_SHARE_LOGIN_TAG";
/** 如果登录成功后,用于保存用户名到SharedPreferences,以便下次不再输入 */
private String SHARE_LOGIN_USERNAME = "MAP_LOGIN_USERNAME";
/** 如果登录成功后,用于保存PASSWORD到SharedPreferences,以便下次不再输入 */
private String SHARE_LOGIN_PASSWORD = "MAP_LOGIN_PASSWORD";
/** 如果登陆失败,这个可以给用户确切的消息显示,true是网络连接失败,false是用户名和密码错误 */
private boolean isNetError;
/** 登录loading提示框 */
private ProgressDialog proDialog;
/** 登录后台通知更新UI线程,主要用于登录失败,通知UI线程更新界面 */
Handler loginHandler = new Handler() {
public void handleMessage(Message msg) {
isNetError = msg.getData().getBoolean("isNetError");
if (proDialog != null) {
proDialog.dismiss();
}
if (isNetError) {
Toast.makeText(Login.this, "登陆失败:\n1.请检查您网络连接.\n2.请联系我们.!", Toast.LENGTH_SHORT).show();
}
// 用户名和密码错误
else {
Toast.makeText(Login.this, "登陆失败,请输入正确的用户名和密码!", Toast.LENGTH_SHORT).show();
// 清除以前的SharePreferences密码
clearSharePassword();
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
findViewsById();
initView(false);
// 需要去submitListener里面设置URL
setListener();
}
/** 初始化注册View组件 */
private void findViewsById() {
view_userName = (EditText) findViewById(R.id.loginUserNameEdit);
view_password = (EditText) findViewById(R.id.loginPasswordEdit);
view_rememberMe = (CheckBox) findViewById(R.id.loginRememberMeCheckBox);
view_loginSubmit = (Button) findViewById(R.id.loginSubmit);
view_loginRegister = (Button) findViewById(R.id.loginRegister);
}
/**
* 初始化界面
*
* @param isRememberMe
* 如果当时点击了RememberMe,并且登陆成功过一次,则saveSharePreferences(true,ture)后,
* 则直接进入
* */
private void initView(boolean isRememberMe) {
SharedPreferences share = getSharedPreferences(SHARE_LOGIN_TAG, 0);
String userName = share.getString(SHARE_LOGIN_USERNAME, "");
String password = share.getString(SHARE_LOGIN_PASSWORD, "");
Log.d(this.toString(), "userName=" + userName + " password=" + password);
if (!"".equals(userName)) {
view_userName.setText(userName);
}
if (!"".equals(password)) {
view_password.setText(password);
view_rememberMe.setChecked(true);
}
// 如果密码也保存了,则直接让登陆按钮获取焦点
if (view_password.getText().toString().length() > 0) {
// view_loginSubmit.requestFocus();
// view_password.requestFocus();
}
share = null;
}
/**
* 检查用户登陆,服务器通过DataOutputStream的dos.writeInt(int);来判断是否登录成功(
* 服务器返回int>0登陆成功,否则失败),登陆成功后根据isRememberMe来判断是否保留密码(用户名是会保留的),
* 如果连接服务器超过5秒,也算连接失败.
*
* @param userName
* 用户名
* @param password
* 密码
* @param validateUrl
* 检查登陆的地址
* */
private boolean validateLocalLogin(String userName, String password, String validateUrl) {
// 用于标记登陆状态
boolean loginState = false;
HttpURLConnection conn = null;
DataInputStream dis = null;
try {
URL url = new URL(validateUrl);
conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
conn.setRequestMethod("GET");
conn.connect();
dis = new DataInputStream(conn.getInputStream());
if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
Log.d(this.toString(), "getResponseCode() not HttpURLConnection.HTTP_OK");
isNetError = true;
return false;
}
// 读取服务器的登录状态码
int loginStateInt = dis.readInt();
if (loginStateInt > 0) {
loginState = true;
}
} catch (Exception e) {
e.printStackTrace();
isNetError = true;
Log.d(this.toString(), e.getMessage() + " 127 line");
} finally {
if (conn != null) {
conn.disconnect();
}
}
// 登陆成功
if (loginState) {
if (isRememberMe()) {
saveSharePreferences(true, true);
} else {
saveSharePreferences(true, false);
}
} else {
// 如果不是网络错误
if (!isNetError) {
clearSharePassword();
}
}
if (!view_rememberMe.isChecked()) {
clearSharePassword();
}
return loginState;
}
/**
* 如果登录成功过,则将登陆用户名和密码记录在SharePreferences
*
* @param saveUserName
* 是否将用户名保存到SharePreferences
* @param savePassword
* 是否将密码保存到SharePreferences
* */
private void saveSharePreferences(boolean saveUserName, boolean savePassword) {
SharedPreferences share = getSharedPreferences(SHARE_LOGIN_TAG, 0);
if (saveUserName) {
Log.d(this.toString(), "saveUserName=" + view_userName.getText().toString());
share.edit().putString(SHARE_LOGIN_USERNAME, view_userName.getText().toString()).commit();
}
if (savePassword) {
share.edit().putString(SHARE_LOGIN_PASSWORD, view_password.getText().toString()).commit();
}
share = null;
}
/** 记住我的选项是否勾选 */
private boolean isRememberMe() {
if (view_rememberMe.isChec
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
学习android的好例子-登录注册 通过例子可以学习到: 控件使用:Button,TextView,EditText,CheckBox 布局:LinearLayout 类:Handler,Toast,ProgressDialog 远程登录,与服务器交互 基本事件的使用等等 很全面,很实用的一个例子哦!
资源推荐
资源详情
资源评论
收起资源包目录
2013-07-13android-登录注册.rar (46个子文件)
2013-07-13android-登录注册
.project 839B
project.properties 562B
src
fank
android
utils
HttpUtils.java 930B
siwi
map
android
IndexPage.java 1KB
Register.java 4KB
Login.java 11KB
AndroidManifest.xml 958B
res
drawable
icon.png 3KB
layout
login.xml 2KB
indexpage.xml 488B
main.xml 382B
register.xml 1KB
values
login.xml 633B
indexpage.xml 113B
strings.xml 159B
register.xml 468B
assets
gen
siwi
map
android
BuildConfig.java 158B
R.java 3KB
.classpath 380B
bin
resources.ap_ 10KB
classes
fank
android
utils
HttpUtils.class 1KB
siwi
map
android
R$layout.class 482B
IndexPage$1.class 730B
BuildConfig.class 341B
R$drawable.class 394B
R$attr.class 334B
Login$LoginFailureHandler.class 3KB
Login.class 9KB
Register$2.class 726B
Register.class 5KB
Register$3.class 801B
Login$5.class 783B
Login$1.class 1KB
R$id.class 816B
IndexPage.class 2KB
Login$2.class 1KB
R.class 517B
Register$1.class 1KB
R$string.class 1KB
Login$4.class 973B
Login$3.class 1KB
AndroidManifest.xml 958B
dexedLibs
annotations-a6573716ecac64baf1cc001f2fe21932.jar 943B
jarlist.cache 119B
res
drawable
icon.png 3KB
classes.dex 21KB
共 46 条
- 1
资源评论
- Hash1112015-09-23支持支持,非常好的资源!
- qq_226105912015-03-17很实用,帮助很大
- 点孤2013-11-07非常全面!很好!谢谢分享
habby2010
- 粉丝: 0
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功