安卓第二天笔记-数据保存
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓第二天笔记-数据保存相关的知识,希望对你有一定的参考价值。
安卓第二天笔记--数据保存
1.保存数据私有文件
<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:orientation="vertical" tools:context=".MainActivity" > <ImageView android:background="#0090CA" android:layout_width="match_parent" android:layout_height="wrap_content" android:src="@drawable/qq"/> <!--号码 --> <EditText android:id="@+id/et_qqNumber" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="number" android:hint="请输入qq号码"/> <!--密码 --> <EditText android:id="@+id/et_qqPwd" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textPassword" android:hint="请输入qq密码"/> <!--记住密码复选框 --> <CheckBox android:id="@+id/cb_remember" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="记住密码"/> <!--登录按键 --> <Button android:id="@+id/btn_login" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#09A3DC" android:textSize="20sp" android:textColor="#fff" android:text="登录"/> </LinearLayout>
Activity
/** * QQ 登录 保存密码到私有文件 * 步骤 * 1.获取输入的用户名与密码 * 2.判断是否 为空,为空就给用户提示Toast * 3.保存用户名与密码到文件 * 4.数据回显 * * @author 刘楠 * * 2016-2-18下午12:39:54 */ public class MainActivity extends Activity implements OnClickListener { private static final String TAG = "MainActivity"; /* * QQ号码 */ private EditText et_qqNumber; /* * QQ密码 */ private EditText et_qqPwd; /* * 记住密码,复选框 */ private CheckBox cb_remember; /* * 登录按键 */ private Button btn_login; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /* * 初始化 */ et_qqNumber = (EditText) findViewById(R.id.et_qqNumber); et_qqPwd = (EditText) findViewById(R.id.et_qqPwd); cb_remember = (CheckBox) findViewById(R.id.cb_remember); btn_login = (Button) findViewById(R.id.btn_login); /* * 为登录按键设置单击事件 */ btn_login.setOnClickListener(this); /* * 回显示数据 */ Map<String, String> map=QQLoginUtils.getUser(this); if(map!=null){ et_qqNumber.setText(map.get("username")); et_qqPwd.setText(map.get("password")); String isChecked = map.get("isChecked"); if("true".equals(isChecked)){ cb_remember.setChecked(true); }else{ cb_remember.setChecked(false); } } } /** * 单击事件,监听器 */ @Override public void onClick(View v) { // 判断ID switch (v.getId()) { case R.id.btn_login: // 执行相应的方法 qqLogin(); break; default: break; } } /** * 登录方法 */ public void qqLogin() { /* * 获取用户名与密码 */ String qq = et_qqNumber.getText().toString().trim(); String pwd = et_qqPwd.getText().toString().trim(); // 判断是否为空 if (TextUtils.isEmpty(qq) || TextUtils.isEmpty(pwd)) { Toast.makeText(this, "亲,qq号码 与密码不能为空!", Toast.LENGTH_SHORT).show(); return; } /* * 判断 是否要保存 */ if (cb_remember.isChecked()) { Log.i(TAG, "保存用户名与密码"); // 要保存 boolean flag = QQLoginUtils.saveUser(this, qq, pwd,cb_remember.isChecked()); // 判断 是否保存成功 if (flag) { Toast.makeText(this, "保存成功", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(this, "保存失败", Toast.LENGTH_SHORT).show(); } } else { //不要保存 Log.i(TAG, "不保存用户名与密码"); boolean flag = QQLoginUtils.saveUser(this, "", "",cb_remember.isChecked()); // 判断 是否保存成功 if (flag) { Toast.makeText(this, "保存成功", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(this, "保存失败", Toast.LENGTH_SHORT).show(); } } } }
Utils
/** * 保存用户名密码工具类 * @author 刘楠 * * 2016-2-18下午12:50:55 */ public class QQLoginUtils { /** * * @param context 上下文 * @param name 用户名 * @param password 密码 * @param isChecked 记录密码状态 * @return 是否保存成功 */ public static boolean saveUser(Context context, String name, String password, boolean isChecked) { OutputStream out=null; try { File file = new File(context.getFilesDir(), "user.txt"); out = new FileOutputStream(file); String data = name +"#"+password+"#"+isChecked; out.write(data.getBytes()); return true; } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return false; } public static Map<String, String> getUser(Context context) { File file = new File(context.getFilesDir(), "user.txt"); /* * 判断文件是否存在 */ if(!file.exists()){ return null; } /* * 获取文件 */ Map<String,String> map= new HashMap<String, String>(); BufferedReader br=null; try { br = new BufferedReader(new InputStreamReader(new FileInputStream(file))); String data = br.readLine(); String[] split = data.split("#"); map.put("username", split[0]); map.put("password", split[1]); map.put("isChecked", split[2]); //返回结果 br.close(); return map; } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // return null; } }
2.保存数据要SD卡
更改工具类
/** * 保存用户名密码工具类 * @author 刘楠 * * 2016-2-18下午12:50:55 */ public class QQLoginUtils { /** * * @param context 上下文 * @param name 用户名 * @param password 密码 * @param isChecked * @return 是否保存成功 */ public static boolean saveUser(Context context, String name, String password, boolean isChecked) { /* * 判断SD卡是否正常 */ String state = Environment.getExternalStorageState(); if(!Environment.MEDIA_MOUNTED.equals(state)){ Toast.makeText(context, "SD卡没有插入", Toast.LENGTH_SHORT).show(); return false; } OutputStream out=null; try { File file = new File(Environment.getExternalStorageDirectory(), "user.txt"); out = new FileOutputStream(file); String data = name +"#"+password+"#"+isChecked; out.write(data.getBytes()); return true; } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return false; } public static Map<String, String> getUser(Context context) { /* * 判断SD卡是否正常 */ String state = Environment.getExternalStorageState(); if(!Environment.MEDIA_MOUNTED.equals(state)){ Toast.makeText(context, "SD卡没有插入", Toast.LENGTH_SHORT).show(); return null; } File file = new File(Environment.getExternalStorageDirectory(), "user.txt"); /* * 判断文件是否存在 */ if(!file.exists()){ return null; } /* * 获取文件 */ Map<String,String> map= new HashMap<String, String>(); BufferedReader br=null; try { br = new BufferedReader(new InputStreamReader(new FileInputStream(file))); String data = br.readLine(); String[] split = data.split("#"); map.put("username", split[0]); map.put("password", split[1]); map.put("isChecked", split[2]); //返回结果 br.close(); return map; } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // return null; } }
添加写入SD卡的权限
在Manifest.xml中
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
3.保存数据到SharedPreferences
布局文件不变
/** * QQ 登录 保存密码到SharedPreferences * 步骤 1.获取输入的用户名与密码 * 2.判断是否 为空,为空就给用户提示Toast * 3.保存用户名与密码到文件 * * @author 刘楠 * * 2016-2-18下午12:39:54 */ public class MainActivity extends Activity implements OnClickListener { private static final String TAG = "MainActivity"; /* * QQ号码 */ private EditText et_qqNumber; /* * QQ密码 */ private EditText et_qqPwd; /* * 记住密码,复选框 */ private CheckBox cb_remember; /* * 登录按键 */ private Button btn_login; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /* * 初始化 */ et_qqNumber = (EditText) findViewById(R.id.et_qqNumber); et_qqPwd = (EditText) findViewById(R.id.et_qqPwd); cb_remember = (CheckBox) findViewById(R.id.cb_remember); btn_login = (Button) findViewById(R.id.btn_login); /* * 为登录按键设置单击事件 */ btn_login.setOnClickListener(this); /* * 回显示数据 */ Map<String, Object> map=QQLoginUtils.getUser(this); if(map!=null){ et_qqNumber.setText(map.get("username").toString()); et_qqPwd.setText(map.get("password").toString()); boolean isChecked = (Boolean) map.get("isChecked"); cb_remember.setChecked(isChecked); } } /** * 单击事件,监听器 */ @Override public void onClick(View v) { // 判断ID switch (v.getId()) { case R.id.btn_login: // 执行相应的方法 qqLogin(); break; } } /** * 登录方法 */ public void qqLogin() { /* * 获取用户名与密码 */ String qq = et_qqNumber.getText().toString().trim(); String pwd = et_qqPwd.getText().toString().trim(); // 判断是否为空 if (TextUtils.isEmpty(qq) || TextUtils.isEmpty(pwd)) { Toast.makeText(this, "亲,qq号码 与密码不能为空!", Toast.LENGTH_SHORT).show(); return; } /* * 判断 是否要保存 */ if (cb_remember.isChecked()) { Log.i(TAG, "保存用户名与密码"); // 要保存 boolean flag = QQLoginUtils.saveUser(this, qq, pwd,cb_remember.isChecked()); // 判断 是否保存成功 if (flag) { Toast.makeText(this, "保存成功", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(this, "保存失败", Toast.LENGTH_SHORT).show(); } } else { //不要保存 Log.i(TAG, "不保存用户名与密码"); boolean flag = QQLoginUtils.saveUser(this, null, null,cb_remember.isChecked()); // 判断 是否保存成功 if (flag) { Toast.makeText(this, "保存成功", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(this, "保存失败", Toast.LENGTH_SHORT).show(); } } } }
工具类
/** * 保存用户名密码工具类 * @author 刘楠 * * 2016-2-18下午12:50:55 */ public class QQLoginUtils { /** * * @param context 上下文 * @param name 用户名 * @param password 密码 * @param isChecked * @return 是否保存成功 */ public static boolean saveUser(Context context, String name, String password, boolean isChecked) { SharedPreferences preferences = context.getSharedPreferences("config", Context.MODE_PRIVATE); Editor editor = preferences.edit(); editor.putString("username", name); editor.putString("password", password); editor.putBoolean("isChecked", isChecked); editor.commit(); return true; } /** * 取出数据 * @param context * @return */ public static Map<String, Object> getUser(Context context) { Map<String, Object> map= new HashMap<String, Object>(); SharedPreferences preferences = context.getSharedPreferences("config", Context.MODE_PRIVATE); String username = preferences.getString("username", ""); String password = preferences.getString("password", ""); boolean isChecked = preferences.getBoolean("isChecked", false); map.put("username", username); map.put("password", password); map.put("isChecked", isChecked); return map; } }
4.保存数据到XML文件
<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:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:text="学生信息管理系统" android:textColor="#ff0000" android:textSize="28sp" /> <!-- 学生姓名 --> <EditText android:id="@+id/et_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入学生姓名" /> <!-- 性别 --> <RadioGroup android:id="@+id/rg_gender" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <RadioButton android:id="@+id/rb_man" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:checked="true" android:text="男" /> <RadioButton android:id="@+id/rb_felman" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="女" /> </RadioGroup> <Button android:id="@+id/btn_save" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#09A3DC" android:text="保存" android:textColor="#fff" /> <Button android:id="@+id/btn_query" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:background="#09A3DC" android:text="查询" android:textColor="#fff" /> <TextView android:id="@+id/tv_result" android:layout_width="match_parent" android:layout_height="wrap_content"/> </LinearLayout>
/** * 学生信息管理系统 保存学生信息到XML文件 serializer 步骤: 1.获取用户输入的用户名 2.判断输入是否为空, 为空给用户提示,Toast 3.使用 serializer,生成XML保存 查询 1.获取用户输入的姓名 2.查找文件是否存在 3.存在就解析pull解析,并显示,不存在就提示 * @author 刘楠 * * 2016-2-18下午7:50:09 */ public class MainActivity extends Activity implements OnClickListener{ /* * 学生姓名 */ private EditText et_name; /* * 学生性别 */ private RadioGroup rg_gender; /* * 保存 */ private Button btn_save; /* * 查询 */ private Button btn_query; /* * 显示查询结果 */ private TextView tv_result; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et_name = (EditText) findViewById(R.id.et_name); rg_gender = (RadioGroup) findViewById(R.id.rg_gender); btn_save = (Button) findViewById(R.id.btn_save); btn_query = (Button) findViewById(R.id.btn_query); tv_result = (TextView) findViewById(R.id.tv_result); /* * 设置单击事件 */ btn_save.setOnClickListener(this); btn_query.setOnClickListener(this); } /** * 单击事件监听器 */ @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_save: //保存 save(); break; case R.id.btn_query: //查询 query(); break; } } /** * 查询 */ private void query() { //获取用户输入的用户名 String name = et_name.getText().toString().trim(); //判断 if(TextUtils.isEmpty(name)){ Toast.makeText(this, "学生姓名不能为空", Toast.LENGTH_SHORT).show(); return ; } Map<String, String> map = StudentUtils.getStudent(this,name); //tv_result; if(map!=null){ String data="姓名:"+map.get("name")+",性别:"+map.get("gender"); tv_result.setText(data); } } /** * 保存 */ private void save() { //获取用户输入的用户名 String name = et_name.getText().toString().trim(); //判断 if(TextUtils.isEmpty(name)){ Toast.makeText(this, "学生姓名不能为空", Toast.LENGTH_SHORT).show(); return ; } //判断性别 String gender="男"; switch (rg_gender.getCheckedRadioButtonId()) { case R.id.rb_man: RadioButton rb_man = (RadioButton) findViewById(R.id.rb_man); gender=rb_man.getText().toString().trim(); break; case R.id.rb_felman: RadioButton rb_felman = (RadioButton) findViewById(R.id.rb_felman); gender=rb_felman.getText().toString().trim(); break; } /* * 开始保存文件 serializer */ boolean flag =StudentUtils.save(this,name,gender); if(flag){ Toast.makeText(this, "保存成功", Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(this, "保存失败", Toast.LENGTH_SHORT).show(); } } }
工具类
/** * 学生保存,查询的工具类 * * @author 刘楠 * * 2016-2-18下午8:09:29 */ public class StudentUtils { public static boolean save(Context context, String name, String gender) { File file = new File(context.getFilesDir(), name + ".xml"); try { OutputStream out = new FileOutputStream(file); // 获取XML生成工具serializer XmlSerializer serializer = Xml.newSerializer(); // 调置输出编码 serializer.setOutput(out, "UTF-8"); // 设置XML头 serializer.startDocument("UTF-8", true); serializer.startTag(null, "student"); serializer.startTag(null, "name"); serializer.text(name); serializer.endTag(null, "name"); serializer.startTag(null, "gender"); serializer.text(gender); serializer.endTag(null, "gender"); serializer.endTag(null, "student"); serializer.endDocument(); // 关闭流 out.close(); return true; } catch (Exception e) { e.printStackTrace(); } return false; } /* * 查询 */ public static Map<String, String> getStudent(Context context, String name) { File file = new File(context.getFilesDir(), name + ".xml"); if (!file.exists()) { Toast.makeText(context, "学生信息不存在", Toast.LENGTH_SHORT).show(); return null; } Map<String, String> map = new HashMap<String, String>(); try { InputStream in = new FileInputStream(file); // 使用pull解析 XmlPullParser pullParser = Xml.newPullParser(); // 读取编码 pullParser.setInput(in, "UTF-8"); // 事件 int eventType = pullParser.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) { // 判断是不是开始标签 if (eventType == XmlPullParser.START_TAG) { if ("name".equals(pullParser.getName())) { String stuName = pullParser.nextText(); map.put("name", stuName); } else if ("gender".equals(pullParser.getName())) { String gender = pullParser.nextText(); map.put("gender", gender); } } // 向下移动指针 eventType = pullParser.next(); } in.close(); return map; } catch (Exception e) { e.printStackTrace(); } return null; } }
5.保存各种权限的文件
<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:orientation="vertical" tools:context=".MainActivity" > <ImageView android:background="#0090CA" android:layout_width="match_parent" android:layou
以上是关于安卓第二天笔记-数据保存的主要内容,如果未能解决你的问题,请参考以下文章