2012-03-27 4 views
2

В моем приложении, я разбор 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, а затем вызвать финиш(), чтобы вернуться в меню, вместо того чтобы столкнуться с принудительным закрытием.

Я использовал

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

и

if (doc==null){ 
     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 является

03-27 12: 46: 26,917: I/System.out (10311): Wrong структура XML-файл: Предположительное имя> (позиция: START_TAG @ 29: 27 в [email protected])

в этот момент он начинает бросать фатальные исключения

+0

Что происходит? Появляется ли «Тост»? –

+0

Я думаю, было бы легче ответить на ваш вопрос, если бы вы предоставили немного больше кода вокруг/после этой строки 'Document doc = XMLfunctions.XMLfromString (xml);'. Я думаю, что когда-нибудь после вашего 'if (doc == null)' check есть что-то, что пытается вызвать метод на 'doc'. – Peter

+0

Нет, сила приложения закрывается – Hank

ответ

0

Если у вас есть код размещен выше, завернутый в функции вы можете просто сделать все это называется в цикле if, т.е.

if (parseDoc (xml) == null) { Toast.makeText (это, «Извините XML-файл» + target + «Misformed», Toast.LENGTH_SHORT) .show(); }

Если ваше приложение правильно улавливает исключение, оно не должно быть принудительным закрытием, если что-то в вашем приложении не пытается получить доступ к документу и получает нулевой указатель. Журнал этого исключения был бы полезен в этом случае.

+0

Следующая строка кода пытается получить доступ к doc Линия int numResults = XMLfunctions.numResults (doc); Я сообщу вам об обертывании вызова в цикле if спасибо – Hank

+0

Если вы удовлетворены моим ответом, пожалуйста, примите его, чтобы я мог получить репутацию. =) Учитывая, что следующая строка пытается выполнить что-то на возвращаемом документе, я бы поставил на то, что исключение, которое вы на самом деле получаете, является нулевым указателем в этом вызове. – Kevin

0

Я бы предложил исключить исключения и позволить вызывающему обращаться с ними. Улавливание исключения и возврат null бит нечисто.

+0

Не могли бы вы объяснить это немного больше? – Hank

Смежные вопросы