2010-06-11 195 views
1

我有兩個包,一個是com.firstBooks.series.db.parser,它們有一個java文件XMLParser.java,另一個包com.firstBooks.series79,它有一個包名爲AppMain.NW的類我想將一個名爲_xmlFileName frm AppMain類的變量的值發送到XMLParser類中的xmlFile變量,我發佈了這兩個類的代碼,請幫助我。如何將變量值從一個類傳遞到另一個類

package com.firstBooks.series.db.parser; 

import java.io.IOException; 
import java.io.InputStream; 
import java.util.Vector; 

import net.rim.device.api.xml.parsers.DocumentBuilder; 
import net.rim.device.api.xml.parsers.DocumentBuilderFactory; 
import net.rim.device.api.xml.parsers.ParserConfigurationException; 

import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.NodeList; 
import org.xml.sax.SAXException; 

import com.firstBooks.series.db.Question; 

public class XMLParser { 

private Document document; 
public static Vector questionList; 
public static String xmlFile; 

public XMLParser() {  
    questionList = new Vector(); 
} 


public void parseXMl() throws SAXException, IOException, 
    ParserConfigurationException { 

    // Build a document based on the XML file. 
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder builder = factory.newDocumentBuilder(); 
    InputStream inputStream = getClass().getResourceAsStream(xmlFile); 

    document = builder.parse(inputStream); 
} 

public void parseDocument() { 
    Element element = document.getDocumentElement(); 

    NodeList nl = element.getElementsByTagName("question"); 

    if (nl != null && nl.getLength() > 0) { 
    for (int i = 0; i < nl.getLength(); i++) { 
    Element ele = (Element) nl.item(i); 
    Question question = getQuestions(ele); 
    questionList.addElement(question); 
    } 
    } 
} 

private Question getQuestions(Element element) { 

    String title = getTextValue(element, "title"); 
    String choice1 = getTextValue(element, "choice1"); 
    String choice2 = getTextValue(element, "choice2"); 
    String choice3 = getTextValue(element, "choice3"); 
    String choice4 = getTextValue(element, "choice4"); 
    String answer = getTextValue(element, "answer"); 
    String rationale = getTextValue(element, "rationale"); 

    Question Questions = new Question(title, choice1, 
    choice2, choice3, choice4, answer, rationale); 

    return Questions; 
} 

private String getTextValue(Element ele, String tagName) { 
    String textVal = null; 
    NodeList nl = ele.getElementsByTagName(tagName); 
    if (nl != null && nl.getLength() > 0) { 
    Element el = (Element) nl.item(0); 
    textVal = el.getFirstChild().getNodeValue(); 
    } 

    return textVal; 
} 
} 

NW爲AppMain類的代碼

//#preprocess 
package com.firstBooks.series79; 

import net.rim.device.api.ui.UiApplication; 

import com.firstBooks.series.ui.screens.HomeScreen; 

public class AppMain extends UiApplication { 

public static String _xmlFileName; 
public static boolean _Lite; 
public static int _totalNumofQuestions; 

public static void initialize(){ 
    //#ifndef FULL 
    /* 
    //#endif 
     _xmlFileName = "/res/Series79_FULL.xml"; 
     _totalNumofQuestions = 50; 
     _Lite = false; 
    //#ifndef FULL 
    */ 
    //#endif 

    //#ifndef LITE 
    /* 
    //#endif 
     _xmlFileName = "/res/Series79_LITE.xml"; 
     _totalNumofQuestions = 10; 
     _Lite = true; 
    //#ifndef LITE 
    */ 
    //#endif 
    } 


private AppMain() { 
    initialize(); 
    pushScreen(new HomeScreen()); 
} 

public static void main(String args[]) { 
    new AppMain().enterEventDispatcher(); 
} 
} 
+1

格式代碼時間。 – 2010-06-11 23:30:29

回答

0

你只需要輸入:

XMLParser.xmlFile = AppMain._xmlFileName; 

例如這裏:

public static void main(String args[]) { 
    new AppMain().enterEventDispatcher(); 
    XMLParser.xmlFile = AppMain._xmlFileName; 
} 

我不知道,如果這是最好的設計,但解決你的問題。

0

好了,你把它設置方式,一條線:

XmlParser.xmlFile = _xmlFileName; 
在AppMain某處

,說initialize方法,應該做的伎倆。也許我不理解你的問題。您可能不希望xmlFile成爲公共靜態,但這是您的選擇。

0

其他答案是正確的,但使用這樣的靜態變量是一個相當嚴格的設計。如果您稍後想要使用第二個XMLParser對象來解析不同的文件,則會導致問題。

相反,XMLParser的構造可以採取的文件名作爲參數:

public class XMLParser { 

    private Document document; 
    public static Vector questionList; 
    private static String xmlFile; // this can be private 

    public XMLParser(String xmlFile) { 
    this.xmlFile = xmlFile; 
    questionList = new Vector(); 
    } 

然後在應用程序的其它部分,當您創建XMLParser的:未來

XMLParser xmlParser = new XMLParser(AppMain._xmlFileName); 
相關問題