作为一名程序员,应该懂得分享

工作中项目Login分为联网登陆和离线登陆两种方式,这种模块估计以后还会用到,特意从项目中抽取出来(部分模块,根据以后具体需求填写就行),仅供参考。

android 设备忙 android设备登陆什么意思_android

第一次登陆必须联网,访问服务器获得响应,验证用户名和密码是否正确,此外还从服务器获得一个经过Md5加密后的password密文。登陆成功后将用户名和服务器返回的password密文通过SharedPreferences 保存,注意此处保存的是加密后密文,因为直接保存密码是不安全,SharedPreferences 本质上就是一个xml文件以键值对的形式存储在Sdcard上,只有稍微懂点android的人导出这个文件那么密码就轻易泄露了。  离线登陆是,在没有网络的情况下,根据用户输入的用户名密码(经过Md5加密后的密文)和SharedPreferences 中的用户名,密文进行字符串比较,相同则跳转到主页面,否则弹出错误提示。

package com.example.login;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {

	private Button btnLogin;
	private Context context;
	private EditText etCorpName;
	private EditText etUserName;
	private EditText etPassWord;

	private String corpName;
	private String userName;
	private String pwd;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		findViews();
	}

	private void findViews() {
		context = MainActivity.this;
		btnLogin = (Button) findViewById(R.id.buttonLogin);
		etCorpName = (EditText) findViewById(R.id.editTextCorpName);
		etUserName = (EditText) findViewById(R.id.editTextUserName);
		etPassWord = (EditText) findViewById(R.id.editTextPassWord);

		// 点击登录
		btnLogin.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// 如果用户名密码为空 则弹出提示
				if (isCheckNull()) {
					Toast.makeText(context, "用户名密码不能为空 ", Toast.LENGTH_SHORT)
							.show();
					return;
				}
				if (IsHaveInternet(context)) {
					// TODO 联网登陆 异步操作
					// 开启线程,通过post方式将将用户名密码为提交到服务器,将获得结果在Handler中处理
					// 登陆成功,保存用户名,密码密文到SharedPreferences
					login();
					// saveInfo(); //保存信息这一步应该在Handler中完成
				} else {
					// 离线登陆
					localLogin();
				}
			}
		});
	}

	/**
	 * 联网登陆
	 */
	private void login() {

	}

	/**
	 * 登陆成功,保存登陆信息
	 */
	private void saveInfo() {
		// TODO
	}

	/**
	 * 离线登陆
	 */
	private void localLogin() {
		SharedPreferences spf = context.getSharedPreferences("loginInfo",
				MODE_PRIVATE);
		String spsCorpName = spf.getString("corpName", "");
		String spsName = spf.getString("username", "");
		String spsPwd = spf.getString("pwd", "");
		if (TextUtils.isEmpty(spsCorpName) && TextUtils.isEmpty(spsName)
				&& TextUtils.isEmpty(spsPwd)) {
			// SharedPreferences中数据为空:首次登陆,必须访问网络
			Toast.makeText(context, "首次登陆,必须访问网络 ", Toast.LENGTH_SHORT).show();
			return;
		}
		if (spsCorpName.equals(corpName) && spsName.equals(spsName)
				&& spsPwd.equals(pwd)) {
			// 密码校验正确,跳转到主页面
			Intent intent = new Intent(this, MenuActivity.class);
			startActivity(intent);
		} else {
			Toast.makeText(context, "用户名密码错误 ", Toast.LENGTH_SHORT).show();
		}

	}

	/**
	 * 提交空校验
	 * 
	 * @return
	 */
	private Boolean isCheckNull() {
		corpName = etCorpName.getText().toString();
		userName = etUserName.getText().toString();
		pwd = etPassWord.getText().toString();
		return !(TextUtils.isEmpty(corpName) || TextUtils.isEmpty(userName)
				|| TextUtils.isEmpty(corpName) || TextUtils.isEmpty(pwd));
	}

	/**
	 * 是否联网网络
	 * 
	 * @param context
	 * @return
	 */
	public boolean IsHaveInternet(Context context) {
		try {
			ConnectivityManager manger = (ConnectivityManager) context
					.getSystemService(Context.CONNECTIVITY_SERVICE);

			NetworkInfo info = manger.getActiveNetworkInfo();
			return (info != null && info.isConnected());
		} catch (Exception e) {
			return false;
		}
	}
}






MD5加密的工具类,Md5加密是一种单向不可逆的加密

/**
	 * Md5加密工具
	 * 
	 * @param s
	 * @return
	 */
	public static String md5One(String s) {
		MessageDigest md = null;
		try {
			md = MessageDigest.getInstance("MD5");
		} catch (NoSuchAlgorithmException e) {
			throw new RuntimeException(e.getMessage());
		}
		md.update(s.getBytes());
		// 之前的登陆密码
		// return byteArrayToHexString(md.digest());
		return byteArrayToHexString(md.digest()).toUpperCase();
	}



大小写转换

public static String byteArrayToHexString(byte[] b) {
		String result = "";
		for (int i = 0; i < b.length; i++) {
			result = result + byteToHexString(b[i]);
		}
		return result;
	}