最近開始看視頻學習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();
}
}