安卓实训第十天:利用SharedPreferences来实现数据的保存和读取,以及实现手机电话备份,XMLserializer
时间:2014-06-01 09:51:36
收藏:0
阅读:331
一、利用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();
}
}
}
安卓实训第十天:利用SharedPreferences来实现数据的保存和读取,以及实现手机电话备份,XMLserializer,布布扣,bubuko.com
评论(0)