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 (vi
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
Android远程登录含有loading登录效果.zip (42个子文件)
map
bin
classes.dex 17KB
map.apk 19KB
resources.ap_ 10KB
fank
android
utils
HttpUtils.class 1KB
siwi
map
android
Login$LoginFailureHandler.class 3KB
Register$2.class 726B
Login$3.class 1KB
R$layout.class 482B
R$id.class 816B
R$drawable.class 394B
Register$3.class 801B
IndexPage$1.class 730B
IndexPage.class 2KB
R$attr.class 334B
R.class 517B
Login$2.class 1KB
Login$1.class 1KB
R$string.class 1KB
Register$1.class 1KB
Login$4.class 973B
Register.class 5KB
Login.class 9KB
Login$5.class 783B
res
drawable
icon.png 3KB
values
register.xml 468B
login.xml 633B
strings.xml 159B
indexpage.xml 113B
layout
register.xml 1KB
login.xml 2KB
main.xml 382B
indexpage.xml 488B
assets
default.properties 364B
gen
siwi
map
android
R.java 3KB
src
fank
android
utils
HttpUtils.java 930B
siwi
map
android
IndexPage.java 1KB
Login.java 11KB
Register.java 4KB
RequestThread.java 2KB
.project 839B
.classpath 280B
AndroidManifest.xml 958B
共 42 条
- 1
资源评论
seion
- 粉丝: 1
- 资源: 35
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 论文(最终)_20240430235101.pdf
- 基于python编写的Keras深度学习框架开发,利用卷积神经网络CNN,快速识别图片并进行分类
- 最全空间计量实证方法(空间杜宾模型和检验以及结果解释文档).txt
- 5uonly.apk
- 蓝桥杯Python组的历年真题
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 前端开发技术实验报告:内含4四实验&实验报告
- Highlight Plus v20.0.1
- 林周瑜-论文.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功