2012-07-14 50 views
0

解析黑莓應用程序中的XML結果,該應用程序返回表單中的節點;在黑莓xml解析中的空節點處顯示消息

<searches> 
<search id ='1234'> 
<name> somename </name> 
<address> some address </address> 
<sector> some sector </sector> 
<contacts> 12345, [email protected] </contacts> 
<searches>  

當搜索沒有任何匹配時返回空結果,也就是說;

<name></name> 
<address></address> 
<sector></sector> 
<contacts></contacts> 

不返回結果。它看起來就像<searches></searches>。在搜索結果返回時,如何指定對話框警報<searches></searches>

這裏是我的Http連接附帶的解析器。

try{ 
     HttpConnection connection = (HttpConnection)Connector.open("http://someurl.xml",Connector.READ_WRITE); 
     URLEncodedPostData postData = new URLEncodedPostData(URLEncodedPostData.DEFAULT_CHARSET, false); 
     postData.append("username", "someusername"); 
     postData.append("password", "somepassword"); 
     postData.append("term", word); 
     connection.setRequestMethod(HttpConnection.POST); 
     connection.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); 
     connection.setRequestProperty("User-Agent","Profile/MIDP-2.0 Configuration/CLDC-1.0"); 
     OutputStream requestOut = connection.openOutputStream(); 
     requestOut.write(postData.getBytes()); 
     connection.getHeaderField("Content-type"); 
     DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); 
     docBuilder.isValidating(); 
     InputStream detailIn = connection.openInputStream(); 
     doc = docBuilder.parse(detailIn); 
     requestOut.close(); 
     connection.close(); 
     NodeList list = doc.getElementsByTagName("name"); 
     NodeList list1 = doc.getElementsByTagName("address"); 
     NodeList list2 = doc.getElementsByTagName("sector"); 
     NodeList list3 = doc.getElementsByTagName("contacts"); 
     callback(list,list1,list2,list3); 
     requestOut.close(); 
     connection.close(); 
    } 
    catch(Exception ex){ 
     System.out.println(ex.toString()); 
    } 

是否使用if或for?

回答

1

我沒有在我面前(所以我不能對此進行測試代碼)的Eclipse插件,但這樣的事情應該工作:

doc = docBuilder.parse(detailIn); 
requestOut.close(); 
connection.close(); 
NodeList list = doc.getElementsByTagName("name"); 
NodeList list1 = doc.getElementsByTagName("address"); 
NodeList list2 = doc.getElementsByTagName("sector"); 
NodeList list3 = doc.getElementsByTagName("contacts"); 
if (list == null || list.getLength() == 0) { 
    // no results, so post an alert on the UI thread 
    UiApplication.getUiApplication().invokeLater(new Runnable() { 
     public void run() { 
      Dialog.alert("No results found!"); 
     } 
    }); 
} 

這只是測試存在name元素,假設如果name丟失,其他人(地址,扇區和聯繫人)也將丟失。如果這不適用於您的應用程序,則可以選擇使if語句也檢查list1list2list3

+0

我在'else'子句中放了'callback(list,list1,list2,list3);'。它按照我輸入的方法工作,也就是說,如果找到結果,它會打開一個新頁面。但是'Dialog.alert(「找不到結果!」);'如果找不到結果,不會出現。但幸運的是,它並沒有像以前那樣打開一個空白頁面,只是對話框沒有打開,這非常重要。 – michael92 2012-07-15 22:14:39

+0

@ michael92,對不起。即使您沒有明確地發佈此代碼,我可能應該假設您正在後臺線程上運行您的HTTP連接代碼。是對的嗎?如果是這樣,你應該確保在UI線程上發佈你的'Dialog.alert()'調用。我已經更新了我的答案以證明這一點。上面的代碼現在應該適合在後臺/工作線程上運行。 – Nate 2012-07-16 06:57:39

+0

你是一個救星。希望我能給你10分:) – michael92 2012-07-16 08:29:35