保存數據到Android設備中

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章