所以我正在编写一个Android应用程序,我有一个xml解析器类来解析我的xml文件并为我构建一个树
我想重用我的xml解析器代码用于不同的xml文件
但是,遇到getXml(resourceID)无法正常工作的问题:
public class myactivity extends Activity {
public void someMethod() {
Xmlparser myparser = new Xmlparser();
myparser.parseXML(this.context, R.xml.somedata);
}
public void someOtherMethod(){
Xmlparser adifferentparser = new Xmlparser();
adifferentparser.parseXML(this.context, R.xml.differentdata);
}
}
public class Xmlparser{
import java.io.IOException;
import java.util.Vector;
import org.xmlpull.v1.XmlPullParserException;
import android.content.Context;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
private XmlResourceParser xrp;
public String parseXML(Context cont, int resourceID){
xrp = cont.getResources().getXml(resourceID);
//xrp = cont.getResources().getXml(R.xml.differentdata); // this works, but isn't any good for code reuse!
}
}
当我使用资源ID对其进行硬编码时,它可以工作(例如getXml(R.xml.differentdata)),但是当我将资源ID作为int传递给类中我知道xml文件的方法时我想使用(如上面的代码片段)
我可以在activity类中创建XmlResourceParser对象,获取xml文件,然后将该XmlResourceParser对象传递给我的Xmlparser,但这样就解决了错误的问题,即如何传递资源ID
答案 0 :(得分:0)
public class XMLParser {
private Resources _resources;
public XMLParser(Resources resources){
this._resources = resources;
}
public void parse(int resID) {
SAXParserFactory factory = SAXParserFactory.newInstance();
try {
SAXParser parser = factory.newSAXParser();
CardListHandler handler = new CardListHandler();
parser.parse(this._resources.openRawResource(resID), handler);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}