最近开始看视频学习Android,学习视频为黑马的Android视频教程。
学习到保存数据到设备中的方法,认为比较重要,所以记下来。
保存数据到手机目前看到视频里面讲了两种方法(除去直接写输出流的方法),一种是使用XmlSerializer ,另外一种是使用SharedPreference。
个人感觉如果保存少量配置信息的话,使用SharedPreference比较方便,如果数据量比较大的话,那么使用XmlSerializer 更好一点。
下面是代码。
XML:
<RelativeLayout 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: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"
>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="24dp"
android:onClick="saveXS"
android:text="XmlSerializer" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/button1"
android:layout_centerHorizontal="true"
android:layout_marginTop="49dp"
android:onClick="saveSP"
android:text="SharedPreference" />
</RelativeLayout>
Java:
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import org.xmlpull.v1.XmlSerializer;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.util.Xml;
import android.view.Menu;
import android.view.View;
import android.widget.Toast;
import com.yrsoft.domain.SmsInfo;
public class MainActivity extends Activity {
List<SmsInfo> smss;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//这里是假设已经获取到短信内容,并且将其放入一个集合中。
smss = new ArrayList<SmsInfo>();
Random r = new Random();
long number = 13500000000l;
for (int i = 0; i < 10; i++) {
smss.add(new SmsInfo("短信内容"+i, i, System.currentTimeMillis(), r.nextInt(2)+1, Long.toString(number+i)));
}
}
/**
* 使用XmlSerializer 保存xml数据
* @param view
*/
public void saveXS(View view){
Toast.makeText(this, "开始备份...", Toast.LENGTH_LONG).show();
//获取XML的序列化器
XmlSerializer serializer = Xml.newSerializer();
File file = new File("/data/data/com.yrsoft.seri/","backup.xml");
FileOutputStream fos;
try {
fos = new FileOutputStream(file);
//指定XML的输出流
serializer.setOutput(fos, "UTF-8");
//文档开始 参数:编码,是否独立文件
serializer.startDocument("UTF-8", true);
//开始节点,参数:命名空间,标签名
serializer.startTag(null, "smss");
for (SmsInfo info : smss) {
serializer.startTag(null, "sms");
//为sms节点添加id属性。参数:命名空间,参数名,参数值
serializer.attribute(null, "id", info.getId()+"");
serializer.startTag(null, "content");
serializer.text(info.getContent());
serializer.endTag(null, "content");
serializer.startTag(null, "date");
serializer.text(info.getDate()+"");
serializer.endTag(null, "date");
serializer.startTag(null, "type");
serializer.text(info.getType()+"");
serializer.endTag(null, "type");
serializer.startTag(null, "address");
serializer.text(info.getAddress());
serializer.endTag(null, "address");
serializer.endTag(null, "sms");
}
//结束节点
serializer.endTag(null, "smss");
//文档结束
serializer.endDocument();
fos.close();
Toast.makeText(this, "备份成功", Toast.LENGTH_LONG).show();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this, "备份失败", Toast.LENGTH_LONG).show();
}
}
/**
* 使用SharedPerference保存XML数据
* @param view
*/
public void saveSP(View view){
saveUserInfo(this, "zhangsan", "123");
Toast.makeText(this, "保存信息成功", Toast.LENGTH_LONG).show();
}
private void saveUserInfo(Context ctx ,String userName,String password){
//获取SharedPreference。参数:保存的文件名,模式。
SharedPreferences sp = ctx.getSharedPreferences("config", Context.MODE_PRIVATE);
//获取sp的编辑器
Editor editor = sp.edit();
//使用编辑器存数据。
editor.putString("username",userName);
editor.putString("password", password);
//提交事务。一定要记得提交,否则数据不会写到设备中
editor.commit();
}
}