首页 > 代码库 > 安卓实训第十天:利用SharedPreferences来实现数据的保存和读取,以及实现手机电话备份,XMLserializer
安卓实训第十天:利用SharedPreferences来实现数据的保存和读取,以及实现手机电话备份,XMLserializer
一、利用SharedPreferences来实现数据的保存和读取:
1、Mainactivity:
package com.example.sharedpreferencesdemo; import com.example.sharedpreferencesdemo.util.SharedPreferencesUtil; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.CheckBox; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { private EditText et_name, et_pass; private CheckBox chbx_rem; private String fileName = "csdn"; private SharedPreferencesUtil spUtil; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et_name = (EditText) findViewById(R.id.et_name); et_pass = (EditText) findViewById(R.id.et_pass); chbx_rem = (CheckBox) findViewById(R.id.chbx_rem); // 实例化参数设置的工具类 spUtil = new SharedPreferencesUtil(this); // 操作 initEditTextData(); } /** * 初始化控件的默认值 */ private void initEditTextData() { // 获取参数设置对象 SharedPreferences sp = this.getSharedPreferences(fileName, Context.MODE_PRIVATE); // 根据key值获取对应的value值 String userName = sp.getString("name", "缺省值"); String userPass = sp.getString("pass", "缺省值"); // 设置控件的默认值 et_name.setText(userName); et_pass.setText(userPass); } public void login(View v) { final String userName = et_name.getText().toString(); final String userPass = et_pass.getText().toString(); if (TextUtils.isEmpty(userName) || TextUtils.isEmpty(userPass)) { Toast.makeText(this, "用户名和密码不能为空", Toast.LENGTH_LONG).show(); } else { if (chbx_rem.isChecked()) { // 保存操作 spUtil.save(fileName, Context.MODE_PRIVATE, userName, userPass); // 登陆验证 // 登陆成功 Intent intent = new Intent(); intent.setClass(this, SuccessActivity.class); startActivity(intent); } else { new AlertDialog.Builder(this) .setMessage("请勾选上记住密码,方便下次登陆") .setNegativeButton("否", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //登陆验证 // 登陆成功 Intent intent = new Intent(); intent.setClass(MainActivity.this, SuccessActivity.class); startActivity(intent); } }) .setPositiveButton("是", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { chbx_rem.setChecked(true);// 设置勾选密码 // 保存操作 spUtil.save(fileName, Context.MODE_PRIVATE, userName, userPass); } }).create().show(); } } } }
package com.example.sharedpreferencesdemo.util; import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import com.example.sharedpreferencesdemo.MainActivity; public class SharedPreferencesUtil { private Context context; /** * 构造函数 * * @param context * :传递过来上下文对象 */ public SharedPreferencesUtil(Context context) { this.context = context; } /** * 保存操作 * * @param fileName * :文件名称 * @param mode * :文件模式 * @param userName * :用户名 * @param userPass * :密码 */ public void save(String fileName, int mode, String userName, String userPass) { SharedPreferences sp = context.getSharedPreferences(fileName, mode); Editor editor = sp.edit(); editor.putString("name", userName); editor.putString("pass", userPass); editor.commit(); } /** * 保存操作 * * @param mode * :文件模式 * @param userName * :用户名 * @param userPass * :密码 */ public void save(int mode, String userName, String userPass) { MainActivity activity = (MainActivity) context; // 上下文对象,造型为MainActivity的对象、 //默认是采用的类名进行保存文件的 SharedPreferences sp = activity.getPreferences(mode); Editor editor = sp.edit(); editor.putString("name", userName); editor.putString("pass", userPass); editor.commit(); } }
思考:
//Java中 方法的重载与方法的重写(覆盖)有什么区别
方法重载是指方法名和方法的返回类型都相同,但方法参数不一样. 参数不一样体现在参数个数和参数类型不一样.
方法重写: 方法重写是相对继承而言的. 重写的方法名.返回类型,参数类型和参数个数都要求和父类中的一样.这是重载和重写形式上的区别. 当类继承某个类的时候 .一些属性和方法也被继承过来了.这样就可以用子类对象调用父类中的某个方法.但如果你对父类中的方法不满意,便可以对父类中的方法进行重写.实现你想要的功能!!!
二、利用XMLserializer实现手机电话备份,包括生成XML文件人,然后并读取出来
首先创建一个User类,封装一些实体信息:
package www.example.domain; import java.io.Serializable; /** * <users> <user> <name>陈红均1</name> <phone>15631293221</phone> * <email>redarmy.chen@qq.com</email> <address>保定市职大路,东风东路991</addres> </user> * </users> * * @author jun * */ public class User implements Serializable { private String name;// 姓名 private String phone;// 电话 private String email;// 邮箱 private String address;// 住址 public User() { super(); // TODO Auto-generated constructor stub } public User(String name, String phone, String email, String address) { super(); this.name = name; this.phone = phone; this.email = email; this.address = address; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
再来一个UserService来创建联系人的信息:
package com.example.service; import java.util.ArrayList; import java.util.List; import www.example.domain.User; public class UserService { public List<User> findAll(){ //声明返回对象 List<User> users = new ArrayList<User>(); //模拟9个人信息 for(int i=1;i<=9;i++){ User user = new User("陈红均"+i, "1563129322"+i, "redarmy.chen@qq.com", "保定市职大路1号,东风东路99"+i); users.add(user); } //记得修改返回值 return users; } }
然后主要操作在MainActivity上进行:
package com.example.activityf; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.List; import www.example.domain.User; import android.app.Activity; import android.os.Bundle; import android.os.Environment; import android.view.View; import android.widget.Toast; import com.example.service.UserService; public class MainActivity extends Activity { private UserService userService; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); userService = new UserService(); } /** * 检测你的外部存储设备是否安装,并且是否可读和可写 * * @return */ public boolean isExternalStorageAvailable() { // 声明返回的变量 boolean flag = false; // 获取设备的状态 String state = Environment.getExternalStorageState(); // 判断设备是否安装,并且是否可读和可写 if (Environment.MEDIA_MOUNTED.equals(state)) { // 返回真 flag = true; } // 记得修改返回变量 return flag; } /** * 备份手机信息的操作 * * @param v */ public void copyPhoneInfo(View v) { // 获取所有的联系人信息 List<User> users = userService.findAll(); // 写成xml文件 StringBuffer sb = new StringBuffer(); // 把要写入的内容 用这个sb来封装 sb.append("<?xml version='1.0' encoding='utf-8' standalone='yes' ?>"); sb.append("<users>"); for (User u : users) { sb.append("<user>"); sb.append("<name>"); sb.append(u.getName()); sb.append("</name>"); sb.append("<phone>"); sb.append(u.getPhone()); sb.append("</phone>"); sb.append("<email>"); sb.append(u.getEmail()); sb.append("</email>"); sb.append("<address>"); sb.append(u.getAddress()); sb.append("</address>"); sb.append("</user>"); } sb.append("</users>"); // 检测sdcard状态 if (isExternalStorageAvailable()) { // 创建保存的文件对象 File file = new File(Environment.getExternalStorageDirectory(), "phone.xml"); try { // 根据保存的文件,创建文件的输出流对象 FileOutputStream fos = new FileOutputStream(file); // 写入数据 fos.write(sb.toString().getBytes()); // 立即写入 fos.flush(); // 关闭操作 fos.close(); Toast.makeText(this, "数据备份成功", Toast.LENGTH_LONG).show(); } catch (IOException e) { e.printStackTrace(); } } else { Toast.makeText(this, "数据无法备份(请检查你的SDCard)", Toast.LENGTH_LONG) .show(); } } }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。