Java 测试是否返回空值

Java 测试是否返回空值,java,android,Java,Android,在我的应用程序中,我正在解析XML文件- Document doc = XMLfunctions.XMLfromString(xml); 使用以下函数 public final static Document XMLfromString(String xml){ Document doc = null; DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); try {

在我的应用程序中,我正在解析XML文件-

        Document doc = XMLfunctions.XMLfromString(xml);
使用以下函数

public final static Document XMLfromString(String xml){

    Document doc = null;

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    try {

        DocumentBuilder db = dbf.newDocumentBuilder();

        InputSource is = new InputSource();
        is.setCharacterStream(new StringReader(xml));
        doc = db.parse(is); 

    } catch (ParserConfigurationException e) {
        System.out.println("XML parse error: " + e.getMessage());
        return null;
    } catch (SAXException e) {
        System.out.println("Wrong XML file structure: " + e.getMessage());
         return null;
    } catch (IOException e) {
        System.out.println("I/O exeption: " + e.getMessage());
        return null;
    }

    return doc;
}
如果一切正常,程序将检查结果的数量。当我遇到格式错误的xml文件时,我的问题就出现了。例如,当WordPress文件中有标签时。发生的是我的应用程序崩溃,当我查看日志时,程序捕获到异常

   } catch (SAXException e) {
System.out.println("Wrong XML file structure: " + e.getMessage());
         return null;
这很好。现在我要做的是测试null,然后调用finish()返回菜单,而不是面对强制关闭

我用过

if (null==doc){
    Toast.makeText(this, "Sorry The XML File " + target +" is Misformed", Toast.LENGTH_SHORT).show();
       finish();
   }

无济于事。处理这类情况的最佳方法是什么

还在寻找 我试过这个

if(XMLfunctions.XMLfromString(xml)==null){
    Toast.makeText(this, "Badly Formed File", Toast.LENGTH_LONG).show();  
    finish();
}

同样的问题-调用后的代码行是

int numResults = XMLfunctions.numResults(doc);
函数代码本身是

public static int numResults(Document doc){
        int res = -1;
        Node results = doc.getDocumentElement();
        try{
        res = Integer.valueOf(results.getAttributes().getNamedItem("count").getNodeValue());
        }catch(Exception e){
            res = -1;
        }
        return res;
    }
返回的初始异常消息是为函数getXML is返回的消息

03-27 12:46:26.917:I/System.out(10311):错误的XML文件结构:预期名称>(位置:java.io中的START_TAG@29:27)。StringReader@405a3d30)


在这一点上,它开始抛出致命的异常

如果您将上面发布的代码包装在一个函数中,那么您只需在If循环中调用整个代码即可

if(parseDoc(xml)==null){ Toast.makeText(这个“对不起,XML文件”+target+“格式不正确”,Toast.LENGTH_SHORT.show(); }


如果你的应用程序正确地捕获了异常,它不应该强制关闭,除非你的应用程序中有东西试图访问doc并且得到了空指针。在这种情况下,异常日志将非常有用。

如果您将上面发布的代码包装在一个函数中,您可以在If循环中调用整个过程,即

if(parseDoc(xml)==null){ Toast.makeText(这个“对不起,XML文件”+target+“格式不正确”,Toast.LENGTH_SHORT.show(); }


如果你的应用程序正确地捕获了异常,它不应该强制关闭,除非你的应用程序中有东西试图访问doc并且得到了空指针。在这种情况下,异常日志将非常有用。

我建议向上抛出异常,让调用方处理它们。捕获异常并返回null有点不干净。

我建议向上抛出异常,让调用方处理它们。捕获异常并返回null有点不干净。

会发生什么?
Toast
是否出现?如果您在这一行前后提供更多的代码,我想回答您的问题会更容易。我的想法是,在你的
if(doc==null)
检查之后的某个时候,有东西试图在
doc
上调用一个方法。不,应用程序force closesPeter,下一行代码是int-numResults=XMLfunctions.numResults(doc);会发生什么?
Toast
是否出现?如果您在这一行前后提供更多的代码,我想回答您的问题会更容易。我的想法是,在你的
if(doc==null)
检查之后的某个时候,有东西试图在
doc
上调用一个方法。不,应用程序force closesPeter,下一行代码是int-numResults=XMLfunctions.numResults(doc);下一行代码试图访问doc,该行是int numResults=XMLfunctions.numResults(doc);如果您对我的回答满意,请接受我的建议,这样我就可以得到代表=),因为下一行试图对返回的文档执行某些操作,我敢打赌,您在该调用中实际得到的异常是一个空指针;如果您对我的答案感到满意,请接受我的建议,这样我就可以得到代表=)鉴于下一行试图对返回的文档执行某些操作,我敢打赌您实际得到的异常是该调用中的空指针。
public static int numResults(Document doc){
        int res = -1;
        Node results = doc.getDocumentElement();
        try{
        res = Integer.valueOf(results.getAttributes().getNamedItem("count").getNodeValue());
        }catch(Exception e){
            res = -1;
        }
        return res;
    }