76.s1-模仿用户设置密码(对话框的逻辑)

首先有2个对话框,没有设置过密码,需要设置dialog_set_password.xml,用户设置过密码,不需要设置,直接输入密码dialog_input_password.xml,

设置对话框dialog_set_password.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:orientation="vertical" >
    
    
    <TextView 
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textColor="@color/black"
        android:textSize="20sp"
        android:background="#66ff00"
        android:text="设置密码"
        android:padding="10dp"
        />
    <EditText 
        android:id="@+id/et_password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textPassword"
        android:hint="请输入密码"
        />
    <EditText 
        android:id="@+id/et_password_confirm"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textPassword"
        android:hint="请再次输入密码"
        />
	<LinearLayout 
	    android:layout_width="match_parent"
        android:layout_height="wrap_content"
        
	    >

		<Button
		    android:id="@+id/btn_ok"
		    android:layout_width="0dp"
		    android:layout_height="wrap_content"
		    android:layout_weight="1"
		    android:text="确定" />

		<Button
		    android:id="@+id/btn_cancle"
		    android:layout_width="0dp"
		    android:layout_height="wrap_content"
		    android:layout_weight="1"
		    android:text="取消" />

	</LinearLayout>
</LinearLayout>

输入对话框dialog_input_password.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:orientation="vertical" >
    
    
    <TextView 
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textColor="@color/black"
        android:textSize="20sp"
        android:background="#66ff00"
        android:text="输入密码"
        android:padding="10dp"
        />
    <EditText 
        android:id="@+id/et_password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textPassword"
        android:hint="请输入密码"
        />
	<LinearLayout 
	    android:layout_width="match_parent"
        android:layout_height="wrap_content"
        
	    >

		<Button
		    android:id="@+id/btn_ok"
		    android:layout_width="0dp"
		    android:layout_height="wrap_content"
		    android:layout_weight="1"
		    android:text="确定" />

		<Button
		    android:id="@+id/btn_cancle"
		    android:layout_width="0dp"
		    android:layout_height="wrap_content"
		    android:layout_weight="1"
		    android:text="取消" />

	</LinearLayout>
</LinearLayout>

listView页面布局文件,布局主页面home_list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:orientation="vertical" >
    
    <ImageView 
        android:id="@+id/iv_item"
        android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:src="@drawable/app"
        />
    
    <TextView
        android:id="@+id/tv_item"
        android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:text="手机卫士"
    	android:textColor="@color/black"
    	android:layout_marginTop="5dp"
    	android:textSize="18sp"
        />

</LinearLayout>

主页面的布局文件,显示主页面,结合上面的lit_item_activity.mxl

<?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:orientation="vertical" >
    

    <TextView 
		style="@style/TitleStyle"
    	android:text="手机管家"
        />
    <com.ldw.safe.view.FocusedTextView 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColor="@color/black"
        android:text="简书是一个优质的创作社区,在这里,你可以任性地创作,一篇短文、一张照片、一首诗、一幅画……我们相信,每个人都是生活中的艺术家,有着无穷的创造力"
        android:singleLine="true"
        android:ellipsize="marquee"
        android:layout_marginTop="3dp"
        android:layout_marginBottom="3dp"
        android:textSize="18sp"
        />
    <GridView 
        android:id="@+id/gv_home"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:verticalSpacing="10dp"
        android:numColumns="3"
        ></GridView>
</LinearLayout>

业务逻辑并实现md5加密

package com.ldw.safe.Activity;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.ldw.safe.R;
import com.ldw.safe.utils.MD5Utils;

public class HomeActivity extends Activity{
	
	private GridView gv_home;
	
	private String[] mItems = new String[] {"手机防盗", "通讯卫士", "软件管理", "进程管理", "流量统计", "手机杀毒", "缓存清理", "高级工具", "设置中心"};
	private int[] mPics = new int[] {R.drawable.safe, R.drawable.callmsgsafe, R.drawable.app, 
			R.drawable.taskmanager, R.drawable.netmanager, R.drawable.sysoptimize, 
			R.drawable.trojan, R.drawable.atools, R.drawable.settings};

	private SharedPreferences mPref;
	
	@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
        
        mPref = getSharedPreferences("config", MODE_PRIVATE);
        
        gv_home = (GridView) findViewById(R.id.gv_home);
        gv_home.setAdapter(new HomeAdapter());
        //监听gridview点击事件
        gv_home.setOnItemClickListener(new OnItemClickListener(){

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				switch(position){
				case 0:
					//手机防盗
					showPasswordDialog();
					break;
				case 8:
					//设置中心
					startActivity(new Intent(HomeActivity.this, SettingActivity.class));
					break;
				default:
					break;
				}
			}
        	
        });
        
	}
	
	/*
	 * 显示密码的弹窗
	 */
	protected void showPasswordDialog(){
		//判断是否设置密码
		String savePassword = mPref.getString("password", null);
		if(!TextUtils.isEmpty(savePassword)){
			//输入密码的弹窗
			showPasswordInputDialog();
		}else{
			//如果没有设置过,弹出密码设置的弹窗
			showPasswordSetDialog();
		}

	}
	
	/*
	 * 输入密码框,设置过密码只需要登陆
	 */
	protected void showPasswordInputDialog(){
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		final AlertDialog dialog = builder.create();
		
		View view = View.inflate(this, R.layout.dialog_input_password, null);
		//dialog.setView(view);//自定义的view设置到dialog
		dialog.setView(view, 0, 0, 0, 0);//设置边距为0,兼容android2.3
		
		final EditText etPassword = (EditText) view.findViewById(R.id.et_password);
		
		//获取2个按键
		Button btnOk = (Button)view.findViewById(R.id.btn_ok);
		Button btnCancle = (Button)view.findViewById(R.id.btn_cancle);
		//监听ok按键
		btnOk.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View v) {
				String password = etPassword.getText().toString();
				
				if(!TextUtils.isEmpty(password)){
					String savePassword = mPref.getString("password", null);
					if(MD5Utils.encode(password).equals(savePassword)){
						Toast.makeText(HomeActivity.this, "登陆成功", Toast.LENGTH_SHORT).show();
						//对话框消失
						dialog.dismiss();
						
						//跳转到手机防盗界面
						startActivity(new Intent(HomeActivity.this, LostAndFind.class));
					}else{
						Toast.makeText(HomeActivity.this, "登陆失败", Toast.LENGTH_SHORT).show();
					}
				}else{
					Toast.makeText(HomeActivity.this, "输入框不能是空的", Toast.LENGTH_SHORT).show();
				}
				
			}
			
		});
		//监听取消按键
		btnCancle.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View v) {
				dialog.dismiss();
				
			}
			
		});
		
		dialog.show();
	}
	
	/*
	 * 设置密码的弹窗,以前没有设置密码
	 */
	protected void showPasswordSetDialog(){
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		final AlertDialog dialog = builder.create();
		
		View view = View.inflate(this, R.layout.dialog_set_password, null);
		//dialog.setView(view);//自定义的view设置到dialog
		dialog.setView(view, 0, 0, 0, 0);//设置边距为0,兼容android2.3
		
		final EditText etPassword = (EditText) view.findViewById(R.id.et_password);
		final EditText etPasswordConfirm = (EditText) view.findViewById(R.id.et_password_confirm);
		
		//获取2个按键
		Button btnOk = (Button)view.findViewById(R.id.btn_ok);
		Button btnCancle = (Button)view.findViewById(R.id.btn_cancle);
		//监听ok按键
		btnOk.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View v) {
				String password = etPassword.getText().toString();
				String passwordConfirm = etPasswordConfirm.getText().toString();
				//TextUtils.isEmpty(password)判断password是不是空,可以避免都是空格
				if(!TextUtils.isEmpty(password) && !passwordConfirm.isEmpty()){
					if(password.equals(passwordConfirm)){
						Toast.makeText(HomeActivity.this, "登陆成功", Toast.LENGTH_SHORT).show();
						//保存密码到mPref
						mPref.edit().putString("password", MD5Utils.encode(password)).commit();
						//对话框消失
						dialog.dismiss();
						
						//跳转到手机防盗界面
						startActivity(new Intent(HomeActivity.this, LostAndFind.class));
					}else{
						Toast.makeText(HomeActivity.this, "两次密码不一致", Toast.LENGTH_SHORT).show();
					}
				}else{
					Toast.makeText(HomeActivity.this, "输入框不能是空的", Toast.LENGTH_SHORT).show();
				}
				
			}
			
		});
		//监听取消按键
		btnCancle.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View v) {
				dialog.dismiss();
				
			}
			
		});
		
		dialog.show();
	}
	
	class HomeAdapter extends BaseAdapter{

		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return mItems.length;
		}

		@Override
		public Object getItem(int position) {
			// TODO Auto-generated method stub
			return mItems[position];
		}

		@Override
		public long getItemId(int position) {
			// TODO Auto-generated method stub
			return position;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			
			View view = View.inflate(HomeActivity.this, R.layout.home_list_item, null);
			ImageView iv_item = (ImageView) view.findViewById(R.id.iv_item);
			TextView tv_item = (TextView) view.findViewById(R.id.tv_item);
			
			iv_item.setImageResource(mPics[position]);
			tv_item.setText(mItems[position]);
			
			return view;
		}
		
	}

}

MD5Utils.java

package com.ldw.mobilesafe.utils;

import java.io.File;
import java.io.FileInputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5Utils {

	/**
	 * md5加密,md5永远是32位
	 * 
	 * @param password
	 * @return
	 */
	public static String encode(String password) {
		try {
			MessageDigest instance = MessageDigest.getInstance("MD5");//获取MD5算法对象
			byte[] digest = instance.digest(password.getBytes());//对字符串加密,返回字符数组

			StringBuffer sb = new StringBuffer();
			for (byte b : digest) {
				int i = b & 0xff;//取字节的低8位有效值
				String hexString = Integer.toHexString(i);//将整数转为16进制

				if (hexString.length() < 2) {
					hexString = "0" + hexString;//如果只有1位就补零
				}

				sb.append(hexString);
			}

			return sb.toString();
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
			//没有该算法的时候,抛出异常
		}

		return "";
	}

	/*
	 * 获取到文件的MD5值,文件的特征码
	 */
	public static String getFileMd5(String sourceDir) {
		
		
		try {
			//创建一个流来读取文件
			File file = new File(sourceDir);
			FileInputStream fis = new FileInputStream(file);
			byte[] buffer = new byte[1024];
			int len = -1;
			
			MessageDigest messageDigest = MessageDigest.getInstance("md5");
			
			while((len = fis.read(buffer)) != -1){
				//获取到数字摘要
				messageDigest.update(buffer, 0, len);
			}
			byte[] result = messageDigest.digest();
			
			StringBuffer sb = new StringBuffer();
			for (byte b : result) {
				int i = b & 0xff;//取字节的低8位有效值
				String hexString = Integer.toHexString(i);//将整数转为16进制

				if (hexString.length() < 2) {
					hexString = "0" + hexString;//如果只有1位就补零
				}

				sb.append(hexString);
			}
			return sb.toString();
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
}


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值