Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> android---實現登錄用戶信息保存(XML)

android---實現登錄用戶信息保存(XML)

編輯:Android開發實例

前兩天用SharedPreference實現了保存用戶歷史信息,當用戶再次登錄的時候在AutoCompleteTextView(仿google搜索自動提示框)中顯示歷史用戶信息。

這次用戶信息是通過XML保存的,其中比較中要的包括了XML數據的生成和XML數據的解析,以及生成apk私有數據。

XML數據生成:在將用戶信息保存成XML數據前,我們應該先了解一個非常重要的類XmlSerializer,這個類幫助我們將需要保存成XML數據的信息進行序列化。

代碼
    public String writeToString(List<UserInfo> users){
//實現xml信息序列號的一個對象
XmlSerializer serializer=Xml.newSerializer();
StringWriter writer=new StringWriter();
try {
//xml數據經過序列化後保存到String中,然後將字串通過OutputStream保存為xml文件
serializer.setOutput(writer);

//文檔開始
serializer.startDocument("utf-8", true);

//開始一個節點
serializer.startTag("", "users");

//開始一個子節點
for(UserInfo user : users){
serializer.startTag("", "user");
serializer.attribute("", "id", String.valueOf(user.getId()));

serializer.startTag("", "name");
serializer.text(user.getName());
serializer.endTag("", "name");

serializer.startTag("", "pwd");
serializer.text(user.getPwd());
serializer.endTag("", "pwd");

serializer.startTag("", "isremember");
serializer.text(String.valueOf(user.getIsRemember()));
serializer.endTag("", "isremember");

serializer.endTag("", "user");
}

serializer.endTag("", "users");
//關閉文檔
serializer.endDocument();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return writer.toString();
}

將字串保存為apk的私有文件

代碼
    public boolean writeToXml(Context context,String str){
try {
OutputStream out=context.openFileOutput("users.xml", Context.MODE_PRIVATE);
OutputStreamWriter outw=new OutputStreamWriter(out);
try {
outw.write(str);
outw.close();
out.close();
return true;
} catch (IOException e) {
// TODO Auto-generated catch block
return false;
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
return false;
}
}

 XML數據解析

由於使用DOM方法需要將整個XML文檔加載內存中,對系統資源占用比較多,這對內存比較緊張的Android系統來說,使用DOM方法讀取XML文檔會有很大的限制。 所以使用SAX方法讀取XML,以減少對內存資源的占用。

使用SAX解析xml數據其實很簡單,無非就是幾個過程,startDocument——startElement——character——endElement——endDocument

startDocument:開始解析xml數據,如果處理的數據很多,在這裡實例化一個list對象。

startElement:節點元素數據的處理,獲取節點元素的屬性值,往往在這裡對抽象化的對象進行實例化如一個用戶的信息UserInfo user

character:獲得傑點元素的內容,在這裡專門獲得沒有屬性節點的內容,如<name>cbin</name>

endElement:一個節點的結束,也就相當於一個用戶信息的解析完畢,在這裡將user添加到list中

endDocument:XML數據解析結束

代碼
public class UsersHandler extends DefaultHandler {

private List<UserInfo> list=null;
private UserInfo user=null;
private String tagname;

//開始解析XML文檔
@Override
public void startDocument() throws SAXException{
list=new ArrayList<UserInfo>();
super.startDocument();
}

//開始處理節點,在這裡獲得節點屬性值的(節點屬性)
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes)
throws SAXException{
if(localName.equals("user")){
user=new UserInfo();
user.setId(Integer.parseInt(attributes.getValue("id")));
}
this.tagname=localName;
super.startElement(uri, localName, qName, attributes);
}

//處理沒有屬性的節點(節點內容)
@Override
public void characters(char[] ch, int start, int length) throws SAXException{
if(this.tagname!=""){
if(this.tagname.equals("name")){
String str=new String(ch, start, length);
user.setName(str);
}else if(this.tagname.equals("pwd")){
String str=new String(ch, start, length);
user.setPwd(str);
}else if(this.tagname.endsWith("isremember")){
String str=new String(ch, start, length);
user.setIsRemember(Integer.parseInt(str));
}
}
super.characters(ch, start, length);
}

@Override
public void endElement(String uri, String localName, String qName) throws SAXException{
if(localName.equals("user")){
list.add(user);
}
super.endElement(uri, localName, qName);
}

@Override
public void endDocument() throws SAXException{
super.endDocument();
}

public List<UserInfo> getUserList(){
return list;
}
}

表示層與SharedPreferences中實現用戶登錄大同小異,無非是一個登錄的邏輯處理

 

1、加載頁面時,加載xml中數據,將用戶名列表綁定AutoCompleteTextView

2、假若從act中選定數據,根據用戶名查找密碼等信息綁定et、ck;

3、登錄成功,是新用戶直接添加,老用戶刪除原有記錄,重新記錄用戶信息。

貼個效果圖:

選定之後自動填充數據

參考:http://www.moandroid.com/?p=821   Android讀寫XML(中)

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved