從本課開始后面只總結一些經常會用的知識點,其他就一筆帶過.
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