android登录实现,存储数据到/data/data/包名/info.txt
1.一个简单登录界面布局代码如下:
@1采用线性布局加相对布局方式
@2线性布局采用垂直排列
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.market.login.MainActivity"> <EditText
android:id="@+id/et_name"
android:layout_marginTop="150dp"
android:layout_width="match_parent"
android:layout_height="wrap_content" /> <EditText
android:id="@+id/et_pwd"
android:layout_marginTop="20dp"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_marginTop="20dp"
android:layout_height="wrap_content">
<CheckBox
android:id="@+id/cb"
android:layout_width="wrap_content"
android:layout_marginLeft="10dp"
android:layout_centerVertical="true"
android:layout_height="wrap_content"
android:text="是否记住密码"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="登录"
android:layout_marginRight="50dp"
android:layout_centerHorizontal="true"
android:layout_alignParentRight="true"/>
</RelativeLayout>
</LinearLayout>
界面效果如下:

2.代码逻辑,分为MainActivity类和SaveUserInfo 工具类
分三步:初始化UI,初始化数据(加载),初始化控制器
@1主代码如下
package com.market.login; import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast; import java.util.Map; import static com.market.login.R.id.cb; public class MainActivity extends Activity { private Button btn;
private EditText et_name;
private EditText et_pwd;
private CheckBox cb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
loadData(); } public void login(View v){
String name = et_name.getText().toString().trim();
String password = et_pwd.getText().toString().trim();
if(TextUtils.isEmpty(name) || TextUtils.isEmpty(password)){
Toast.makeText(this,"用户名和密码不能为空",Toast.LENGTH_SHORT).show();
}else{
if(cb.isChecked()) {//如果保存密码和名
//开始保存,保存到文件,下次进来先读取这个文件
SaveUserInfo.saveInfo(name,password,true);
//提交用户名和密码给服务器
Log.v("Maintivity","提交用户名和密码给服务器"); }else{
SaveUserInfo.saveInfo("","",false);
//直接提交用户名和密码给服务器
Log.v("Maintivity","直接提交用户名和密码给服务器");
} } } public void initView(){
btn = (Button)findViewById(R.id.btn);
et_name = (EditText)findViewById(R.id.et_name);
et_pwd = (EditText)findViewById(R.id.et_pwd);
cb = (CheckBox)findViewById(R.id.cb); } public void loadData(){
Map<String, String> info = SaveUserInfo.readInfo();
if(info != null){
et_name.setText(info.get("name"));
et_pwd.setText(info.get("password"));
cb.setChecked(info.get("isChecked").equals("true"));//如果保存了信息,那他上次就是勾选的
} }
}
@2保存数据到/data/data/包名/下文件的工具类
package com.market.login; import android.util.Log; import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map; /**
* 保存用户信息的类,实现保存用户信息到文件
* Created by Administrator on 2017/6/14.
*/ public class SaveUserInfo { /*保存用户信息
* name:用户名
* password:密码
* isChecked:是否勾选保存密码
*
* */
public static boolean saveInfo(String name,String pwd,boolean isChecked){
String info = name+"#"+pwd+"#"+isChecked;
File file = new File("/data/data/com.market.login/info.txt");
FileOutputStream fos = null;
try {
fos = new FileOutputStream(file);
fos.write(info.getBytes());
return true;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally { if(fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return false;
}
} /*读取用户信息*/
public static Map<String,String> readInfo(){
Map<String,String> map = null;
File file = new File("/data/data/com.market.login/info.txt");
if(!file.exists()){
return map;
}
FileInputStream fis = null;
BufferedReader br = null;
try {
fis = new FileInputStream(file);
br = new BufferedReader(new InputStreamReader(fis));
String info = br.readLine();
Log.e("SaveUserInfo",info);
String[] split = info.split("#");
map = new HashMap<String,String>();
map.put("name",split[0]);//保存读取的用户名和密码到map中
map.put("password",split[1]);
map.put("isChecked",split[2]); } catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally { if(fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
} if(br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return map;
}
}
}
3.运行效果,分三种情况
@1用户名和密码填写有空

@2没有勾选checkbox效果和退出后重新登入效果

@3勾选后效果和退出重新登入效果

android登录实现,存储数据到/data/data/包名/info.txt的更多相关文章
- Android使用SharedPreference存储数据
SharedPreference存储数据和文件存储更加方便的一点是可以按照一定的数据类型进行存储,同时取数据时也能够获取到相应的数据类型.它是按照map的方式来存储和读取数据的. MainActivi ...
- Android使用文件存储数据
Android上最基本的存储数据的方式即为使用文件存储数据,使用基本的Java的FileOutStream,BufferedWriter,FileInputStream和BufferedReader即 ...
- Android四个存储数据的SharedPreferences
除了SQLite外部数据库.SharedPreferences它是一个轻量级的数据存储,其本质是基于XML文件存储key-value键值数据,通过定期用它来存储一些简单的配置信息.它的存储位置/dat ...
- 【Android】SharedPreference存储数据
SharedPreference存储数据 使用SharedPreference保存数据 putString(key,value) 使用SharedPreference读取数据 getString( ...
- Android - 采用 SharedPreferences 存储数据
SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息.其存储位置在/data/data/<包名& ...
- Android之SharedPreference存储数据
*路径: /data/data/包名/shared_prefs/ * 以Xml文件存储数据 * 编写步骤 // 1. 获取sp SharedPreferences sp = this.getShare ...
- android开发之存储数据
android数据存储之SharedPreferences 一:SharedPreferences SharedPreferences是Android平台上一个轻量级的存储类,用来保存应用的一些常用配 ...
- android 使用SQLite存储数据
创建一个类继承SQLiteOpenHelper,重写他的构造方法.onCreate().onUpgrade() 构建出SQLiteOpenHelper实例后,再调用他的getReadableDatab ...
- android 自动化压力测试-monkey 2 获取程序包名
monkey 1 中我们写到: C:\Users\chenshan>adb shell shell@hwG750-T20:/ $ monkey -p cn.emoney.acg -v 500 说 ...
随机推荐
- commitProperties方法
自定义的组件,如果重写commitProperties方法,那么在该方法内部一定要注意super.commitProperties()的调用.
- 通过向日葵(或者TeamViewer)创建VPN
1.向日葵软件的安装比较简单.主要要开启VPN服务. 2.向日葵管理界面,添加机器. 3.组网. 4.作为VPN服务端机器(内网机器)安装传入的连接 5.外网客户端机器 一.登录向日葵客户端 一般使用 ...
- linux编译安装php7
1.首先下载php7 使用wget命令下载 wget http://cn2.php.net/distributions/php-7.0.12.tar.bz2 2.然后解压 tar -xvf php-7 ...
- SQL注入详细介绍及如何防范SQL注入式攻击
一. SQL注入攻击的简单示例. statement := "SELECT * FROM Users WHERE Value= " + a_variable + " 上面 ...
- 如何自建appender扩展Log4j框架
1.log4j 概述 log4j 环境包括三个主要组件: logger(日志记录器):控制要启用或禁用哪些日志记录语句.可以对日志记录器指定如下级别: ALL . DEBUG . INFO . WAR ...
- iOS开发tips-UINavigationBar的切换
概述 在iOS系统中,如果控制器是以push方式进行管理的话,那么事实上多个控制器是共享的同一个导航栏.当然iOS系统的设计无可厚非,但是国内的应用经常会遇到很多个性的设计,就比如说A push到 B ...
- ScheduledFuture和RunnableScheduledFuture详解
ScheduledFuture java.util.concurrent 接口 ScheduledFuture<V> 类型参数: V - 此 Future 返回的结果类型. 所 ...
- 【WPF】三维模型中的“照相机”
WPF 部分支持三维模型,为啥说是部分支持?毕竟 WPF 的侧重点还是在应用开发上,虽然也有些游戏是用 WPF 开发的,不过,老周想啊,如果真要开发游戏,最好用专门的框架,WPF 应当用于开发应用功能 ...
- Spring MVC和Struts2的比较
Spring MVC PK Struts2 我们用struts2时采用的传统的配置文件的方式,并没有使用传说中的0配置.spring3 mvc可以认为已经100%零配置了(除了配置spring mvc ...
- [原创]安全系列之端口敲门服务(Port Knocking for Ubuntu 14.04 Server)
Port Knocking for Ubuntu 14.04 Server OS:ubuntu 14.04 server 原理简单分析: 端口敲门服务,即:knockd服务.该服务通过动态的添加ipt ...