数据保存(Rom,SdCard)
来源:互联网 发布:顾比均线源码带买卖点 编辑:程序博客网 时间:2024/04/30 07:28
内部存储Rom,外部存储SdCard,数据的保存。当“记住密码”的状态为选择的时候,第二次进入界面直接显示已经保存好的用户名和密码,如下图所示:
在布局文件中写好界面的显示,然后根据控件的id开始进行数据保存的判断和设置。
在initView方法中找到控件,并将控件对象设置为全局变量:
package com.mzx.savedata;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import android.os.Bundle;import android.os.Environment;import android.provider.ContactsContract.DeletedContacts;import android.app.Activity;import android.content.Context;import android.text.TextUtils;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.CheckBox;import android.widget.EditText;import android.widget.Toast;public class MainActivity extends Activity {private EditText et_username;private EditText et_password;private CheckBox cb_save;private Button bt_login;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();initData();initListener();}private void initView() {et_username = (EditText) this.findViewById(R.id.et_username);et_password = (EditText) this.findViewById(R.id.et_pasword);cb_save = (CheckBox) this.findViewById(R.id.cb_save);bt_login = (Button) this.findViewById(R.id.bt_login);}
在initListener方法中,设置登录的点击按钮的监听事件,获取用户名和密码对象转换为String类型,点击事件发生后判断用户名和密码是否为空,为空时弹出提示,不为空时继续执行下面的操作。代码如下所示:
private void initListener() {bt_login.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {String username=et_username.getText().toString().trim();String password=et_password.getText().toString().trim();if(TextUtils.isEmpty(username) || TextUtils.isEmpty(password)){Toast.makeText(MainActivity.this, "用户名或密码不能为空!", Toast.LENGTH_SHORT).show();return;}if(cb_save.isChecked()){//savaToRom(username, password);saveToSDCard(username, password);}else{delete(null);}Toast.makeText(MainActivity.this, "直接登录", Toast.LENGTH_SHORT).show();}});}
当用户名和密码不为空的时候,并且选择了记住密码的状态,则写入一个方法savaToRom(username, password);
设置FileOutputStream,写入对象,("config.txt", Context.MODE_PRIVATE):创建一个txt文件,mode设置为私有,将用户名和密码存入Config.txt文件中
用分号“:”将用户名和密码分割,存入流中,然后进行刷流,关流,保存成功则提示,文件没有创建时也进行提示。
代码如下所示:
private void savaToRom(String username, String password) {try {FileOutputStream fileOutput = MainActivity.this.openFileOutput("config.txt", Context.MODE_PRIVATE);String saveStr=username+":"+password;fileOutput.write(saveStr.getBytes());fileOutput.flush();fileOutput.close();Toast.makeText(MainActivity.this, "密码保存成功,直接登录", Toast.LENGTH_SHORT).show();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();Toast.makeText(MainActivity.this, "文件没有找到,直接登录", Toast.LENGTH_SHORT).show();}}
当第一次登陆保存数据时,第二次登陆直接显示用户名和密码,当把“记住密码”的状态删掉时,第三次登陆则不再显示用户名和密码,这个功能就是在判断记住密码状态为true的时候,再写一个else判断,在里面写入一个delete方法,不需要传参数,再在下面生成一个protecd的方法,写具体操作,就是将config.txt文件变为一个空文件:
protected void delete(Object object) {// TODO Auto-generated method stubtry {FileOutputStream fileOutput = MainActivity.this.openFileOutput("config.txt", Context.MODE_PRIVATE);fileOutput.flush();fileOutput.close();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}
在initData方法中写读入数据的操作,这个操作可以将已经保存好的数据直接显示在登录界面,不用再次输入用户名和密码。
设置流FileInputStream,参数中写数据所保存的文件的名字,穿件一个byte数组,循环读这个文件中的数据,当数组的长度不为-1的时候,则不断的循环读取
将读入的数据保存,设置编码格式为utf-8,然后将数据用分号进行分割,记住关流。
设置对象的值,用户名为值就取下标为0时的数据,密码的值就取下标为1的数据,最后要记住将记住密码的状态设置为true。
private void initData() {try {FileInputStream fileInput = this.openFileInput("config.txt");byte[] buffer=new byte[1024];ByteArrayOutputStream baos=new ByteArrayOutputStream();int len=0;while((len=fileInput.read(buffer))!=-1){baos.write(buffer, 0, len);}byte[] array = baos.toByteArray();String configStr=new String(array, "utf-8");String[] strings=configStr.split(":");baos.close();fileInput.close();et_username.setText(strings[0]);et_password.setText(strings[1]);cb_save.setChecked(true);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}
上面所说的是内部存储ROM的数据保存方式,外部存储SDCard的方法如下:
protected void saveToSDCard(String username, String password) {// TODO Auto-generated method stub//判断SDCard是否存在if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){Toast.makeText(MainActivity.this, "SDCard不可用!", Toast.LENGTH_SHORT).show();}File file=new File(Environment.getExternalStorageDirectory(), "config.txt");try {FileOutputStream fos=new FileOutputStream(file);String configStr=username +":"+ password;fos.write(configStr.getBytes());fos.flush();fos.close();Toast.makeText(MainActivity.this, "密码保存成功,直接登录", Toast.LENGTH_SHORT).show();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}先判断是否存在SDCard,不存在则弹出提示,存在则将获取的用户名和密码对象用分号分割,方法与ROM存储基本相同,不过SDCard的存储需要权限,在清单文件中加入权限:
android.permission.WRITE_EXTERNAL_STORAGE
android.permission.READ_EXTERNAL_STORAGE
读入的方法与ROM读入的方法相同。
这个程序就基本完成了。
- 数据保存(Rom,SdCard)
- Android-保存文件到ROM/SDCARD
- 保存数据到SDcard
- 保存数据到SDcard
- 将数据保存的SDCard
- Android之sdcard保存数据
- Android--将数据保存到SDCard中
- Android--将数据保存到SDCard中
- android: ram rom sdcard
- 保存数据到android的rom空间
- 保存数据到android的rom空间
- android中实现内存中数据保存到sdcard
- Android中数据保存到ROM文件和sd卡
- 数据库保存到SDcard
- android 文件保存!Sdcard !
- Sp+sdcard+RAM+ROM+DB的区别
- Android02_02喜爱的数据持久化,保存数据到rom文件
- 1 android下的数据持久化,保存数据到rom文件
- jboss-eap-6.3集成OracleDS和MySqlDS配置
- 第十五周项目三 在OJ上玩指针(2)
- linux SIGBUS 总线错误
- memcached内存管理机制详解
- iOS中的屏幕旋转
- 数据保存(Rom,SdCard)
- 利用LocationManager获取经度,纬度等地理信息完整示例
- WinPcap学习(六)过滤数据包
- VS2010中嵌入Python的方法
- iOS开发--使用cocoapods更新工程报错
- 一位ACMer过来人的心得
- xcode小技巧
- GitHub 优秀的 Android 开源项目
- 日志开写了!!