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 说 ...
随机推荐
- Java中的WebService服务
一.在本地发布一个webservice服务 1.使用jdk中的 javax.xml.ws.Endpoint 类的 static Endpointpublish(Stringaddress,Object ...
- test back
python Mysql 下载地址 http://sourceforge.net/projects/mysql-python/
- java并发程序——并发容器
概述 java cocurrent包提供了很多并发容器,在提供并发控制的前提下,通过优化,提升性能.本文主要讨论常见的并发容器的实现机制和绝妙之处,但并不会对所有实现细节面面俱到. 为什么JUC需要提 ...
- 蓝桥杯-凑算式-java
/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...
- 写个神经网络,让她认得我`(๑•ᴗ•๑)(Tensorflow,opencv,dlib,cnn,人脸识别)
训练一个神经网络 能让她认得我 阅读原文 这段时间正在学习tensorflow的卷积神经网络部分,为了对卷积神经网络能够有一个更深的了解,自己动手实现一个例程是比较好的方式,所以就选了一个这样比较有点 ...
- ASP.NET Core开发之HttpContext
ASP.NET Core中的HttpContext开发,在ASP.NET开发中我们总是会经常用到HttpContext. 那么在ASP.NET Core中要如何使用HttpContext呢,下面就来具 ...
- unity静态批处理原理理解
今天主程给我好好讲了一下静态批处理的问题,记下来的笔记心得~ 1.静态批处理的时间点 1)在游戏导出的时候,在player setting中勾选static batching,这样在导出包的时候就进行 ...
- Oracle12c多租户CDB 与 PDB 参数文件位置探讨、查询 CDB 与 PDB 不同值的参数
一. Oracle12c多租户CDB 与 PDB 参数文件位置CDB的参数文件依然使用12c以前的SPIFLE,pdb的参数文件不会出现在SPFILE中,而是直接从CDB中继承,如果PDB中有priv ...
- iOS 伐码猿真爱—「偷懒 || 效率 工具类」
自检 代码不会可以多敲几次,学习的重点是思想:-- 认同. BUT 如果你把自己会的.熟知的.可以说写的似流水的代码,不管是在工作 或是 自学习中你还是一点一点的敲出来,是不是有点...,copy & ...
- elasticsearch系列(三)分表分库
首先ES没有库和表的概念,只有index,type,document(详细术语可以看ES的系列一 http://www.cnblogs.com/ulysses-you/p/6736926.html), ...