界面效果如下:
布局文件如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="5dip"
android:orientation="vertical" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@drawable/ic_launcher" />
<EditText
android:id="@+id/et_yy_number"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/yy_number"
android:inputType="number" />
<EditText
android:id="@+id/et_yy_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/yy_password"
android:inputType="textPassword" />
<CheckBox
android:id="@+id/cb_rember_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="@string/yy_rember_password" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/bt_zhuce"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/yy_zhuce" />
<Button
android:id="@+id/bt_login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/yy_login" />
</LinearLayout>
</LinearLayout>
Activity业务类如下:
package com.example.yy;
import java.util.Map;
import com.example.yy.utils.SaveUserInfoUtils;
import android.os.Bundle;
import android.app.Activity;
import android.text.TextUtils;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;
/**
* @author zdliue
*
* QQ 2622596982
*
* 微信 zdliue
*
* 喜欢我的话,就支持我一下!
*/
public class MainActivity extends Activity implements OnClickListener {
/**
* YY 号码
*/
private EditText etYYNumber;
/**
* YY 密码
*/
private EditText etYYPassword;
/**
* 记住密码
*/
private CheckBox cbRMPassword;
/**
* 注册按钮
*/
private Button btZhuCe;
/**
* 登录按钮
*/
private Button btLogin;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 去掉标题
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
initView();
initEvent();
// 回显数据
if (cbRMPassword.isChecked()) {
Map<String, String> userInfoMap = SaveUserInfoUtils
.getUserInfoMap(this);
String number = userInfoMap.get("number");
String password = userInfoMap.get("password");
etYYNumber.setText(number);
etYYPassword.setText(password);
} else {
etYYNumber.setText("");
etYYPassword.setText("");
}
}
/**
* 初始化控件
*/
private void initView() {
etYYNumber = (EditText) this.findViewById(R.id.et_yy_number);
etYYPassword = (EditText) this.findViewById(R.id.et_yy_password);
cbRMPassword = (CheckBox) this.findViewById(R.id.cb_rember_password);
btZhuCe = (Button) this.findViewById(R.id.bt_zhuce);
btLogin = (Button) this.findViewById(R.id.bt_login);
}
/**
* 初始化事件
*/
private void initEvent() {
btZhuCe.setOnClickListener(this);
btLogin.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt_zhuce:
Toast.makeText(this, "此功能尚未实现", Toast.LENGTH_SHORT).show();
break;
case R.id.bt_login:
login();
break;
default:
break;
}
}
/**
* 登录逻辑
*/
private void login() {
String yyNumber = etYYNumber.getText().toString().trim();
String yyPassword = etYYPassword.getText().toString().trim();
if (!TextUtils.isEmpty(yyNumber) && !TextUtils.isEmpty(yyPassword)) {
Toast.makeText(this, "登录成功", Toast.LENGTH_SHORT).show();
if (cbRMPassword.isChecked()) {
Toast.makeText(this, "您选择记住密码", Toast.LENGTH_SHORT).show();
// 将用户的数据写入到文件中
boolean isSaveUserInfo = SaveUserInfoUtils.isSaveUserInfo(this,
yyNumber, yyPassword);
if (isSaveUserInfo) {
Toast.makeText(this, "数据保存成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "数据保存失败", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(this, "未选择记住密码", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(this, "用户名密码不能为空", Toast.LENGTH_SHORT).show();
}
}
}
用户数据操作类:
package com.example.yy.utils;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import android.content.Context;
import android.os.Environment;
import android.widget.Toast;
/**
* 操作用户数据的工具类
*
* @author zdliue
*
* QQ 2622596982
*
* 微信 zdliue
*
* 喜欢我的话,就支持我一下!
*/
public class SaveUserInfoUtils {
/**
* 保存用户的数据
*
* @param context
* 上下文
* @param yyNumber
* YY号码
* @param yyPassword
* YY密码
* @return true 保存成功
*/
public static boolean isSaveUserInfo(Context context, String yyNumber,
String yyPassword) {
if (isExistSDCard()) {
Toast.makeText(context, "您的手机存在sdcard卡,数据将保存在sdcard上",
Toast.LENGTH_SHORT).show();
// 往sdcard卡上保存数据
File sdCardFilePath = getSDCardFilePath();
try {
FileOutputStream fos = new FileOutputStream(new File(
sdCardFilePath, "user.txt"));
String newUserInfoText = yyNumber + "##" + yyPassword;
// 将字符流转换成字节流
fos.write(newUserInfoText.getBytes());
fos.flush();
fos.close();
return true;
} catch (Exception e) {
e.printStackTrace();
}
} else {
Toast.makeText(context, "您的手机没有sdcard卡,数据将保存在手机内存上",
Toast.LENGTH_SHORT).show();
// 往手机内存保存数据
File mobileDataFilePath = getMobileDataFilePath(context);
try {
FileOutputStream fos = new FileOutputStream(new File(
mobileDataFilePath, "user.txt"));
String newUserInfoText = yyNumber + "##" + yyPassword;
// 将字符流转换成字节流
fos.write(newUserInfoText.getBytes());
fos.flush();
fos.close();
return true;
} catch (Exception e) {
e.printStackTrace();
}
}
return false;
}
/**
* 判断是否存在sdcard卡
*
* @return true sdcard卡存在
*/
private static boolean isExistSDCard() {
String sdCardState = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(sdCardState)) {
return true;
}
return false;
}
/**
* 获取sdcard卡file存储路径
*
* @return sdcard卡file存储路径
*/
private static File getSDCardFilePath() {
File sdCardFilePath = Environment.getExternalStorageDirectory();
if (sdCardFilePath != null) {
return sdCardFilePath;
}
return null;
}
/**
* 获取手机内部数据存储File路径
*
* @return 手机内部数据存储File路径
*/
private static File getMobileDataFilePath(Context context) {
File filesDir = context.getFilesDir();
if (filesDir != null) {
return filesDir;
}
return null;
}
/**
* 保存用户数据的集合
*/
private static Map<String, String> userInfoMap = new HashMap<String, String>();
/**
* 获取用户的信息
*
* @param context
* 上下文
* @return 存储用户信息的Map集合
*/
public static Map<String, String> getUserInfoMap(Context context) {
if (isExistSDCard()) {
Toast.makeText(context, "您的手机有sdcard卡,数据从sdcard卡上面读取",
Toast.LENGTH_SHORT).show();
File sdCardFilePath = getSDCardFilePath();
// 将字节流转换成字符流
try {
BufferedReader reader = new BufferedReader(
new InputStreamReader(new FileInputStream(new File(
sdCardFilePath, "user.txt"))));
String userInfoText = reader.readLine();
reader.close();
// 分割用户数据,将数据保存在集合中
String[] userInfos = userInfoText.split("##");
userInfoMap.put("number", userInfos[0]);
userInfoMap.put("password", userInfos[1]);
return userInfoMap;
} catch (Exception e) {
e.printStackTrace();
}
} else {
Toast.makeText(context, "您的手机没有sdcard卡,数据从手机内存中读取",
Toast.LENGTH_SHORT).show();
File mobileDataFilePath = getMobileDataFilePath(context);
try {
BufferedReader reader = new BufferedReader(
new InputStreamReader(new FileInputStream(new File(
mobileDataFilePath, "user.txt"))));
String userInfoText = reader.readLine();
reader.close();
// 分割用户数据,将数据保存在集合中
String[] userInfos = userInfoText.split("##");
userInfoMap.put("number", userInfos[0]);
userInfoMap.put("password", userInfos[1]);
return userInfoMap;
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
}
资源下载通道:点我下载源码