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 说 ...
随机推荐
- xmlplus 组件设计系列之五 - 选项卡
这一章将设计一个选项卡组件,选项卡组件在手持设备上用的比较多,下面是一个示意图: 选项卡组件的分解 在具体实现之前,想像一下目标组件是如何使用的,对于设计会有莫大的帮助.通过观察,可以将选项卡组件分为 ...
- 一个只有99行代码的JS流程框架(二)
欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 张镇圳,腾讯Web前端高级工程师,对内部系统前端建设有多年经验,喜欢钻研捣鼓各种前端组件和框架. 导语 前面写 ...
- Windows系统操作指令汇总
CMD命令:开始->运行->键入cmd或command(在命令行里可以看到系统版本.文件系统版本) 1. appwiz.cpl:程序和功能 2. calc:启动计算器 3. certmgr ...
- apache配置多个站点
序:这次项目主要是为了给微信客户端添加一个地址,在微信公众号里面添加一个可以访问的app下载页面,说起来很简单,但总不能为了这么小的一个网站新建一个web服务器吧! 现在开始配置,首先必须确认已经在L ...
- 如果非的让我引起大家的狂拍,那我说一句PHP是世界上最好的语言?
如果你进来了,那就达到了我的目的. 不知不觉.net已经用了3年之久,从最初的的小白到现在的大白,总有一种要骂娘的冲动,.net这一路走来现在越走越迷茫,不知道微软的重心在哪里,一直发现不了他的亮点所 ...
- Spring框架 jar包下载
Spring框架下载 打开网址https://repo.spring.io 点击左侧边栏第二个按钮 点击 在输入框输入spring-framework点击Search 找到你需要的版本下载就好 教程到 ...
- POJ2524并查集水题
Description There are so many different religions in the world today that it is difficult to keep tr ...
- Response.AddHeader
Response.AddHeader使用实例 1.文件下载,指定默认名 Response.AddHeader("content-type","application/x- ...
- UILabel图文混排显示图片和文字
//传入文字 自动图片放在左边文字紧接着后排排布 -(void)setAttrDetailLabelWithTitle:(NSString *)title { NSMutableAttributedS ...
- javaWeb学习总结(8)- JSP标签(6)
一.JSP标签介绍 JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护. 二.JSP常用标签 ...