assets下存储key-value数据

有一些固定数据,比如地理位置等,不能存在数据库中,则可以存在assets下的xml中。

格式:


<root>
  <province name="安徽省">
    <city name="安庆市">
      <district name="枞阳县" zipcode="246000" />
      <district name="大观区" zipcode="246000" />
      <district name="怀宁县" zipcode="246000" />
      <district name="潜山县" zipcode="246000" />
      <district name="宿松县" zipcode="246000" />
      <district name="太湖县" zipcode="246000" />
      <district name="桐城市" zipcode="246000" />
      <district name="望江县" zipcode="246000" />
      <district name="宜秀区" zipcode="246000" />
      <district name="迎江区" zipcode="246000" />
      <district name="岳西县" zipcode="246000" />
      <district name="其他" zipcode="246000" />
    </city>
    </province>
  </root>

解析:

List<ProvinceModel> provinceList = null;
AssetManager asset = getAssets();
try {
   InputStream input = asset.open("province_data.xml");
   // 创建一个解析xml的工厂对象
   SAXParserFactory spf = SAXParserFactory.newInstance();
   // 解析xml
   SAXParser parser = spf.newSAXParser();
   XmlParserHandler handler = new XmlParserHandler();
   parser.parse(input, handler);
   input.close();
   // 获取解析出来的数据
   provinceList = handler.getDataList();
} catch (Throwable e) {
   e.printStackTrace();
}

package com.launcher.utils;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import java.util.ArrayList;
import java.util.List;

public class XmlParserHandler extends DefaultHandler {

   /**
    * 存储所有的解析对象
    */
   private List<CityModel> cityList = new ArrayList<>();
   private CityModel cityModel;
        
   public XmlParserHandler() {}

   public List<CityModel> getDataList() {
      return cityList;
   }

   @Override
   public void startDocument() throws SAXException {
      // 当读到第一个开始标签的时候,会触发这个方法
   }
   
   @Override
   public void startElement(String uri, String localName, String qName,
         Attributes attributes) throws SAXException {
      // 当遇到开始标记的时候,调用这个方法
      if (qName.equals("city")) {
         cityModel = new CityModel();
         cityModel.setName(attributes.getValue(0));
         cityModel.setId(attributes.getValue(1));
      }
   }

   @Override
   public void endElement(String uri, String localName, String qName)
         throws SAXException {
      // 遇到结束标记的时候,会调用这个方法
      if (qName.equals("city")) {
         cityList.add(cityModel);
        }
   }
   
   @Override
   public void characters(char[] ch, int start, int length)
         throws SAXException {
   }
}




猜你喜欢

转载自blog.csdn.net/qq_24800377/article/details/79608722