Android: передача идентификатора ресурса как int - PullRequest
0 голосов
/ 19 октября 2010

Итак, я пишу приложение для 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!
  }

}

Когда я жестко кодирую его с помощью идентификатора ресурса, он работает (например, getXml (R.xml.differentdata)), но некогда я передаю идентификатор ресурса как int в метод в классе, где я знаю, какой XML-файл я хочу использовать (как в приведенном выше фрагменте кода)

, я могу создать объект XmlResourceParser в классе действия,получите файл xml и затем передайте этот объект XmlResourceParser в мой Xmlparser, но это решило бы неправильную проблему, а именно, как передать идентификатор ресурса

1 Ответ

0 голосов
/ 19 октября 2010
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);
        } 
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...