1、本应用主要实现首次输入五个密码后记住再输入一次然后登陆进去。
详细可下载代码,下载地址:http://download.csdn.net/detail/u011324501/9482383
2、SharedPreferences介绍:
SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置参数,它是采用xml文件存放数据的,文件存放在"/data/data<package name>/shared_prefs"目录下。
SharedPreferences的用法:
由于SharedPreferences是一个接口,而且在这个接口里没有提供写入数据和读取数据的能力。但它是通过其Editor接口中的一些方法来操作SharedPreference的,用法见下面代码:
Context.getSharedPreferences(String name,int mode)来得到一个SharedPreferences实例
name:是指文件名称,不需要加后缀.xml,系统会自动为我们添加上。
mode:是指定读写方式,其值有三种,分别为:Context.MODE_PRIVATE:指定该SharedPreferences数据只能被本应用程序读、写
Context.MODE_WORLD_READABLE:指定该SharedPreferences数据能被其他应用程序读,但不能写
Context.MODE_WORLD_WRITEABLE:指定该SharedPreferences数据能被其他应用程序读写。
3、代码实现MainActivity.java
package com.example.login;
import java.util.regex.Pattern;
import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
/**
* login
* @author xing
*
*/
public class MainActivity extends Activity implements OnClickListener {
Boolean flag;
@SuppressWarnings("unused")
private TextView display;
private Button c,clear,cancel,helplogin;
private Button[] btnNum = new Button[10];// 数值按钮
private EditText[] editNum = new EditText[5];// 数值按钮
int number = 0;
int number1 = 0;
int editnumber = 0;
String num="",num1="",num2="",num3="",num4="";//定义5个输入密码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initUi();
}
private void initUi() {
// TODO Auto-generated method stub
helplogin = (Button)findViewById(R.id.helplogin);
helplogin.setOnClickListener(new helploginListener());
c = (Button)findViewById(R.id.c);
c.setOnClickListener(new cListener());
clear = (Button)findViewById(R.id.clear);
clear.setOnClickListener(new clearListener());
cancel = (Button)findViewById(R.id.cancel);
cancel.setOnClickListener(new cancelListener());
display = (TextView)findViewById(R.id.display);
editNum[0] = (EditText)findViewById(R.id.editone);
editNum[1] = (EditText)findViewById(R.id.edittwo);
editNum[2] = (EditText)findViewById(R.id.editthree);
editNum[3] = (EditText)findViewById(R.id.editfour);
editNum[4] = (EditText)findViewById(R.id.editfive);
// TODO Auto-generated method stub
btnNum[0] = (Button)findViewById(R.id.one);
btnNum[1] = (Button)findViewById(R.id.two);
btnNum[2] = (Button)findViewById(R.id.three);
btnNum[3] = (Button)findViewById(R.id.four);
btnNum[4] = (Button)findViewById(R.id.five);
btnNum[5] = (Button)findViewById(R.id.six);
btnNum[6] = (Button)findViewById(R.id.seven);
btnNum[7] = (Button)findViewById(R.id.eight);
btnNum[8] = (Button)findViewById(R.id.nine);
btnNum[9] = (Button)findViewById(R.id.zero);
read();
//给全部按钮添加监听器
for(int i=0;i<10;i++){
btnNum[i].setOnClickListener(this);
}
}
//刷新线程,没用,输入一个密码就会不能再输入
private Handler handler = new Handler();
private Runnable runnable = new Runnable() {
public void run () {
read();
handler.postDelayed(this,1000);
}
};
/**
* 读取sharedpreference数据
*/
public void read(){
SharedPreferences ferences=getSharedPreferences("softinfo",0);
num=ferences.getString("editNum[0]", "");
num1=ferences.getString("editNum[1]", "");
num2=ferences.getString("editNum[2]", "");
num3=ferences.getString("editNum[3]", "");
num4=ferences.getString("editNum[4]", "");
}
/**
* 所有数字控件的监听器
*/
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//对密码进行判断如果任意一个为空就继续执行
if((num.equals(""))||(num.equals(""))||(num.equals(""))||(num.equals(""))||(num.equals(""))){
SharedPreferences preferences=getSharedPreferences("softinfo",Context.MODE_WORLD_READABLE);
Editor edit=preferences.edit();
Button btn1 = (Button) v;
String input1 = btn1.getText().toString();
editNum[number1].setText(input1);
number1++;
if(number1>4){
number1 = 0;
for(int i=0;i<10;i++){
btnNum[i].setEnabled(false);
}
}
//第一次输入数据保存到sharedpreference
edit.putString("editNum[0]", editNum[0].getText().toString());
edit.putString("editNum[1]", editNum[1].getText().toString());
edit.putString("editNum[2]", editNum[2].getText().toString());
edit.putString("editNum[3]", editNum[3].getText().toString());
edit.putString("editNum[4]", editNum[4].getText().toString());
edit.commit();
if(number1 ==3){
Toast.makeText(getApplication(), "输完后请再输入一次密码", Toast.LENGTH_SHORT).show();
}
}
//判断输入的密码是否被记录了,如果都有了就执行匹配,匹配对了就跳转到firstpage页面
if(isNumeric(num)&&isNumeric(num1)&&isNumeric(num2)&&isNumeric(num3)&&isNumeric(num4)){
Button btn = (Button) v;
String input = btn.getText().toString();
editNum[number].setText(input);
//判断如果输入密码与首次输入密码相同则跳转到firstFage
// display.setText(input);
if((num.equals(editNum[0].getText().toString()))&&(num1.equals(editNum[1].getText().toString()))&&(num2.equals(editNum[2].getText().toString()))
&&(num3.equals(editNum[3].getText().toString()))&&(num4.equals(editNum[4].getText().toString()))){
Intent intent = new Intent(MainActivity.this,TextActivity.class);
startActivity(intent);
}
editnumber++;
if(editnumber>4){
editnumber=4;
}
number++;
if(number>4){
number = 0;
//输完密码后设置控件为不可操作状态
for(int i=0;i<10;i++){
btnNum[i].setEnabled(false);
}
}
}
}
/**
* 判断是否是0-9数字
* @param str
* @return pattern.matcher(str).matches()
*/
public static boolean isNumeric(String str){
Pattern pattern = Pattern.compile("[0-9]*");
return pattern.matcher(str).matches();
}
/**
* 帮助
* @author xing
*
*/
public class helploginListener implements OnClickListener{
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
dialog();
}
}
/**
* 帮助对话框
*/
protected void dialog() {
AlertDialog.Builder builder = new Builder(this);
builder.setMessage(R.string.helpcontent);
builder.setIcon(R.drawable.ic_launcher);
builder.setTitle("温馨提示");
builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
builder.create().show();
}
public class cListener implements OnClickListener{
@Override
public void onClick(View arg0) {
read();
btnsetEnabled();
number--;
if(number<0){
number=0;
}
editNum[editnumber].setText("");
editnumber--;
if(editnumber<0){
editnumber=0;
}
}
}
/**
* 清空数据监听器
* @author aeon
*
*/
public class clearListener implements OnClickListener{
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
for(int i=0;i<5;i++){
editNum[i].setText("");
}
btnsetEnabled();
read();
}
}
/**
* 退出监听器
* @author aeon
*
*/
public class cancelListener implements OnClickListener{
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
finish();
}
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
for(int i=0;i<10;i++){
btnNum[i].setEnabled(true);
}
handler.removeCallbacks(runnable);//停止定时器
super.onDestroy();
}
/**
* 设置控件可操作
*/
public void btnsetEnabled(){
for(int i=0;i<10;i++){
btnNum[i].setEnabled(true);
}
}
/**
* onRestart时控件变为可操作状态,并清空密码显示
*/
@Override
protected void onRestart() {
// TODO Auto-generated method stub
super.onRestart();
btnsetEnabled();//设置控件可操作
//清空密码
for(int i=0;i<5;i++){
editNum[i].setText("");
}
}
}
布局代码实现:main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000"
android:orientation="vertical" >
<LinearLayout
android:layout_marginTop="20dip"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_marginLeft="10dip"
android:text="@string/chengxu"
android:layout_width="wrap_content"
android:textSize="20sp"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/helplogin"
android:layout_marginLeft="180dip"
android:textColor="#ffffff"
android:background="#00000000"
android:text="@string/helplogin"
android:layout_width="wrap_content"
android:textSize="20sp"
android:layout_height="wrap_content"/>
</LinearLayout>
<LinearLayout
android:layout_marginTop="50dip"
android:layout_marginLeft="35dip"
android:layout_width="fill_parent"
android:layout_height="50dip"
android:orientation="horizontal">
<EditText
android:background="#ffffff"
android:padding="10sp"
android:inputType="textPassword"
android:id="@+id/editone"
android:maxLength="1"
android:layout_width="50dip"
android:layout_height="50dip"
android:layout_marginLeft="5dip"
/>
<EditText
android:background="#ffffff"
android:inputType="textPassword"
android:id="@+id/edittwo"
android:maxLength="1"
android:layout_width="50dip"
android:layout_height="50dip"
android:layout_marginLeft="5dip"
/>
<EditText
android:background="#ffffff"
android:inputType="textPassword"
android:id="@+id/editthree"
android:maxLength="1"
android:layout_width="50dip"
android:layout_height="50dip"
android:layout_marginLeft="5dip"
/>
<EditText
android:background="#ffffff"
android:inputType="textPassword"
android:id="@+id/editfour"
android:maxLength="1"
android:layout_width="50dip"
android:layout_height="50dip"
android:layout_marginLeft="5dip"
/>
<EditText
android:background="#ffffff"
android:inputType="textPassword"
android:id="@+id/editfive"
android:maxLength="1"
android:layout_width="50dip"
android:layout_height="50dip"
android:layout_marginLeft="5dip"
/>
</LinearLayout>
<LinearLayout
android:layout_marginTop="100dip"
android:layout_marginLeft="20dip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/one"
android:text="@string/one"
android:layout_width="105dip"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/two"
android:text="@string/two"
android:layout_width="105dip"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/three"
android:text="@string/three"
android:layout_width="105dip"
android:layout_height="wrap_content"/>
</LinearLayout>
<LinearLayout
android:layout_marginLeft="20dip"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/four"
android:text="@string/four"
android:layout_width="105dip"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/five"
android:text="@string/five"
android:layout_width="105dip"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/six"
android:text="@string/six"
android:layout_width="105dip"
android:layout_height="wrap_content"/>
</LinearLayout>
<LinearLayout
android:layout_marginLeft="20dip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/seven"
android:text="@string/seven"
android:layout_width="105dip"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/eight"
android:text="@string/eight"
android:layout_width="105dip"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/nine"
android:text="@string/nine"
android:layout_width="105dip"
android:layout_height="wrap_content"/>
</LinearLayout>
<LinearLayout
android:layout_marginLeft="20dip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/c"
android:text="@string/c"
android:layout_width="105dip"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/zero"
android:text="@string/zero"
android:layout_width="105dip"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/clear"
android:text="@string/clear"
android:layout_width="105dip"
android:layout_height="wrap_content"/>
</LinearLayout>
<Button
android:layout_marginLeft="20dip"
android:layout_marginRight="10dip"
android:id="@+id/cancel"
android:text="@string/cancel"
android:layout_width="315dip"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/display"
android:layout_marginTop="20dip"
android:layout_width="fill_parent"
android:textSize="20sp"
android:layout_height="wrap_content"/>
</LinearLayout>
strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Login</string>
<string name="action_settings">Settings</string>
<string name="hello_world">Hello world!</string>
<!-- login -->
<string name="one">1</string>
<string name="two">2</string>
<string name="three">3</string>
<string name="four">4</string>
<string name="five">5</string>
<string name="six">6</string>
<string name="seven">7</string>
<string name="eight">8</string>
<string name="nine">9</string>
<string name="zero">0</string>
<string name="cancel">退出</string>
<string name="c">c</string>
<string name="clear">clear</string>
<string name="helplogin">帮助</string>
<string name="chengxu">程序加密</string>
<string name="helpcontent">主要实现密码登陆。第一次输完后请点击clear,再输入第二次。</string>
<string name="otehr">另一个界面</string>
</resources>
详细可下载代码,下载地址:http://download.csdn.net/detail/u011324501/9482383