Android_day03(含XStream用法)

從本課開始后面只總結一些經常會用的知識點,其他就一筆帶過.

SharedPrefrerences(參數)存儲 [本質就是一個xml文件]

1.聲明SharedPrefrerences(它是一個接口,用context.getSharedPreferences來實現)

private SharedPreferences sp; ? ? ? ? ?//成員變量

2.獲取到一個參數

sp = this.getSharedPreferences("config"(SharedPreferences文件名稱,不用加后綴,會自動生成.xml), 0(文件訪問模式,0表示私有,保證文件安全)); ? ? ? ? ? ? ? ? ?//onCreate方法中

3.得到sp文件的編輯器

Editor editor = sp.edit();? ? ?? ? ? ? ? ? ? ?//方法中

editor.putString("qq"(key), qq(value));

editor.putString("pwd", pwd);

4.保存數據完畢,一定要記得調用commit方法

editor.commit(); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //方法中

5.獲取qq,pwd

String qq = sp.getString("qq", ""(如果數據不存在的默認值));? //onCreate方法中

String pwd = sp.getString("pwd", "");

et_qq.setText(qq);

et_password.setText(pwd);


SharedPrefrerences存儲可以用于:一些設置需要打勾或者不打勾,下次進來可以看見之前所保存的狀態

例如可以給CheckBox(同理Seekbar一樣)先設置一個監聽器,然后調用Editor穿一個布爾參數,再回顯控件狀態,默認false

Xml的兩種生成方式(StringBuilder與xml文件的序列化器)

int id = rg_sex.getCheckedRadioButtonId(); 獲取哪個RadioButton被選中,R.id.rb_male就是一個Id值

用StringBuilder生成xml文件時候一定要對非法數據進行轉譯

由于StringBuilder生成xml不穩定因素所以采用Android的api面向對象的生成xml文件:

1.得到xml文件的序列化器

XmlSerializer serializer = Xml.newSerializer();

2.指定序列化器的一些初始參數

File file = new File(getFilesDir(), name + ".xml");

FileOutputStream os = new FileOutputStream(file);

serializer.setOutput(os, "utf-8");

3.寫xml文件

serializer.startDocument("utf-8", true);//寫開頭

serializer.startTag(null, "student");//開始標簽

serializer.startTag(null, "name");//開始標簽

serializer.text(name);//文本標簽

serializer.endTag(null, "name");//結束標簽

serializer.endTag(null, "student");//結束標簽

serializer.endDocument();//寫結尾

os.close();

Xml文件的解析:

DOM解析 SAX解析 PULL解析,一般只用pull解析

//學生信息的xml文件存在

//1.獲取到一個xml解析器

XmlPullParser parser = Xml.newPullParser();

//2.設置解析器的初始化參數

FileInputStream inputStream = new FileInputStream(file);

parser.setInput(inputStream, "utf-8");

//3.解析xml文件

int type = parser.getEventType(); //得到第一個事件的類型.

System.out.println("type:"+type);

StringBuilder sb = new StringBuilder();

//當事件類型不是文檔的結尾則一直遍歷每一個節點

while(type!=XmlPullParser.END_DOCUMENT){

if(type==XmlPullParser.START_TAG){

//開始節點

//判斷節點的名稱

if("name".equals(parser.getName())){

String nameStr = parser.nextText();

System.out.println("姓名:"+nameStr);

sb.append("姓名:"+nameStr+"\n");

}else if("number".equals(parser.getName())){

String numberStr = parser.nextText();

System.out.println("學號:"+numberStr);

sb.append("學號:"+numberStr+"\n");

}else if("sex".equals(parser.getName())){

String sexStr = parser.nextText();

System.out.println("性別:"+sexStr);

sb.append("性別:"+sexStr+"\n");

}

}

type = parser.next();//獲取下一個事件類型

System.out.println("type:"+type);

}

inputStream.close();//浪費資源 造成內存泄漏!

tv_result.setText(sb.toString());

//如何獲取工程目錄下assets里面的xml文件:

InputStream is =this.getAssets().open("result.xml");

xstream :xml序列化、解析框架

XStream 是一個開源項目,一套簡單實用的類庫,用于序列化對象與 XML 對象之間的相互轉換。將 XML 文件內容解析為一個對象或將一個對象序列化為 XML 文件。

XStream 中主要的類為 XStream ,它用于序列化對象與 XML 對象之間的相互轉換。簡單的使用它就可以解決很多問題。

XStream 中主要的方法也是我用的比較多的是 fromXML() 和 toXML() 。

fromXML 用于從 XML 中將對象解析出來。

toXML 用于將對象序列化為 XML 文件。

在 XStream 中我還使用 HierarchicalStreamWriter , HierarchicalStreamReader , createObjectInputStream() , createObjectOutputStream() ,主要是用于對象的輸入輸出。

下面我們來使用XStream來完成xml的序列化及解析

1.用xstream來完成xml的系列化

//創建 XStream 對象。

XStream xstream=new XStream();

//創建一個類(如學生類),將student定義為根節點

xstream.alias("student",Student.class(遇到Student類就將起根節點設為student));

//new一個創建好的類,傳入參數

Student student = new Student("張三",18);

//利用jar包內XStream的toXML()方法將其序列化

String xml = xStream.toXML(student);

2.用xstream來解析xml

//創建 XStream 對象。

XStream xstream=new XStream();

//創建一個類(如學生類),將student定義為根節點

xstream.alias("student",Student.class(遇到Student類就將起根節點設為student));

//利用jar包內XStream的fromXML()方法將xml文件解析

Object obj= xStream.fromXML(xml);

Sqlite數據庫

Sqlite是一個開源項目,用C代碼實現,嵌入式輕量級數據庫

創建Sqlite數據庫

1.開始新建一個數據庫創建的幫助類MyDataBaseOpenHelper來繼承SQLiteOpenHelper

寫出父類的構造方法:

super(context(上下文), "test.db"(數據庫名稱), null(游標工廠,null表示默認從頭開始), 1(版本));

2.然后在MainActivity類中創建數據庫

//這一句代碼執行完畢數據庫是不會被創建的.

MyDataBaseOpenHelper helper = new MyDataBaseOpenHelper(this);

//下面這一行代碼執行了 數據庫才會被創建

helper.getWritableDatabase();// helper.getReadbleDatabase();

對數據庫進行操作

1.在MyDataBaseOpenHelper類中的onCreate方法內可以往數據庫內寫入表格:

db.execSQL("create table student (_id integer primary key autoincrement, name varchar(20), phone varchar(30))");

2.在MyDataBaseOpenHelper類中onUpgrade方法是當數據庫需要被更新的時候調用的方法

例如數據庫的版本更新或者增刪改操作,需要注意的是數據庫只能升級不能降級

數據庫的增刪改查

增 (db.execSQL(sql,Object[]{}))

sql-->insert into tableName(columnName1,columnName2,...) values (?,?,...)

刪 (db.execSQL(sql,Object[]{}))

sql-->delete from tableName where columnName=?

改 (db.execSQL(sql,Object[]{}))

sql-->update tableName set columnName1 = ? where columnName2 = ?

查 (db.rawQuery(sql,Object[]{}))

sql-->select * from tableName where columnName = ?

表中增加列 (db.execSQL(sql))

sql-->alter table tableName columnName type

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容