2012-10-19 34 views
0

我正在Appcelerator Titanium中開發一個應用程序。我面臨的問題是,當我第一次按下按鈕時解析特定的XML時,它的工作正常,但是如果我重新單擊該按鈕,則應該再次解析XML,這不會發生。在日誌中,我可以在重新構建的XML中看到更新的值,但是當我試圖解析它時,解析器中使用的變量正在保留它們的值。他們沒有得到更新。如何更新Parser的變量值?XML在第二次嘗試時沒有正確解析

解析代碼:

if(xml.getElementsByTagName("d:user_id").length>0) 
{ 
     Ti.App.information.user_id = xml.getElementsByTagName("d:user_id").item(0).text; 
     Ti.App.information.organization_id=xml.getElementsByTagName("d:organization_id").item(0).text; 
     Ti.App.information.uname=xml.getElementsByTagName("d:name").item(0).text; 
     Ti.App.information.Lpassword=xml.getElementsByTagName("d:password").item(0).text; 
     Ti.App.information.Lemail_id=xml.getElementsByTagName("d:email_id").item(0).text; 
     Ti.App.information.is_valid=xml.getElementsByTagName("d:is_valid").item(0).text; 
} 

這是我使用的Ti.App.information.is_valid變量的函數:

function checkCredential() 
{ 
    if(Ti.Utils.md5HexDigest(txtPasswordLogin.value)==Ti.App.information.Lpassword && txtEmailLogin.value == Ti.App.information.Lemail_id) 
    { 
     activityIndicator.hide(); 
     //alert("welcome"); 
     //Login.close(); 
     if(Ti.App.information.is_valid == 'true') 
     { 
      //Ti.API.info("..........Login Success........Getting Approved Forms.........."); 
      Ti.App.information.is_valid=''; 
      //alert(Ti.App.is_valid); 

      // Titanium.include('Login.js'); 
      // Login.open(); 
      Ti.App.information.is_valid = ''; 
      Titanium.include('Home.js'); 
      Home.open(); 

     } 
     else 
     { 
      // var a = Titanium.UI.createAlertdialogScreen({title:'Access Denied!'}); 
      Ti.App.information.is_valid=''; 
      //alert(Ti.App.is_valid); 
      myAlert.title = 'Access Denied!'; 
      myAlert.setMessage('You are not authorized. Please contact Administrator.'); 
      myAlert.addEventListener('click', function(e){ 
       // Titanium.include('Login.js'); 
      // Login.open(); 
       Login.close(); 
     }); 



     myAlert.show();  
    }  
} 
else 
{ 
    Ti.App.information.is_valid=''; 
    //alert(Ti.App.is_valid); 
    activityIndicator.hide(); 
    myAlert.title = 'Invalid Login!'; 
    myAlert.setMessage('The email address or password you entered is incorrect.'); 

    myAlert.show(); 
    // Titanium.include('Login.js'); 
    // Login.open(); 
    // alert("Please enter a correct password."); 
} 

} 

的變量是在app.js聲明 file:

Ti.App.information={base_url:'',uid:'',password:'',EmailId:'',pass:'',user_id:'',organization_id:'',uname:'',Lpassword:'',Lemail_id:'',is_valid:''}; 
Ti.App.authentication=false; 
Ti.App.formid; 
Ti.App.guid; 
Ti.App.mydata={_guid:'',status:true,networkStatus:true}; 
Ti.App.formurl={burl:''}; 
Ti.App.glocation={longitude:'',latitude:'',gloc:''}; 
Ti.App.gloc; 

這是要解析的示例XML文件:

<feed xml:base="http://webdevhost.servehttp.com/iPhoneDataEntryService/iPhoneDataEntryDataService.svc/" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://www.w3.org/2005/Atom"> 
    <title type="text">users</title> 
    <id>http://webdevhost.servehttp.com/iPhoneDataEntryService/iPhoneDataEntryDataService.svc/users</id> 
    <updated>2012-10-26T04:05:48Z</updated> 
    <link rel="self" title="users" href="users" /> 
    <entry> 
    <id>http://webdevhost.servehttp.com/iPhoneDataEntryService/iPhoneDataEntryDataService.svc/users(34L)</id> 
    <title type="text"></title> 
    <updated>2012-10-26T04:05:48Z</updated> 
    <author> 
     <name /> 
    </author> 
    <link rel="edit" title="user" href="users(34L)" /> 
    <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/user_type" type="application/atom+xml;type=entry" title="user_type" href="users(34L)/user_type" /> 
    <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/organization" type="application/atom+xml;type=entry" title="organization" href="users(34L)/organization" /> 
    <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/form_data" type="application/atom+xml;type=feed" title="form_data" href="users(34L)/form_data" /> 
    <category term="iPhoneDataEntryModel.user" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" /> 
    <content type="application/xml"> 
     <m:properties> 
     <d:user_id m:type="Edm.Int64">34</d:user_id> 
     <d:organization_id m:type="Edm.Int64">1</d:organization_id> 
     <d:name>test</d:name> 
     <d:password>16690502e26791e97c6c4743d2d4cb9a</d:password> 
     <d:email_id>[email protected]</d:email_id> 
     <d:user_type_id m:type="Edm.Int32">3</d:user_type_id> 
     <d:is_valid m:type="Edm.Boolean">true</d:is_valid> 
     <d:registration_date m:type="Edm.DateTime">2012-10-18T10:33:13</d:registration_date> 
     </m:properties> 
    </content> 
    </entry> 
</feed> 

d:is_valid是我在間隔解析,按鈕上的點擊標籤。

問題是即使在重新調用解析器之後,該變量仍然保留其值。

+0

您正在運行的是什麼版本的Titanium SDK?我沒有在SDK中看到「信息」名稱空間。你是否試圖設置Ti.App.Properties?您是否在Ti.App命名空間內創建了特定於應用程序的變量? – Martin

+0

我正在運行Titanium SDK版本2.1.3。變量在app.js文件中聲明。 – kittu88

+0

你能發佈一個XML文件的例子嗎?我會在一個測試項目中嘗試一下。我沒有看到任何理由應該保留「信息」對象中的值。你有沒有試過將'information'對象設置爲null,然後設置值? – Ronnie

回答

0

好的改變對象值,這樣做。我刪除了一些未被使用的對象,因此請記住,如果您想將它們添加回來。我會將此代碼複製到一個新項目中,以便對其進行測試並對其進行測試。

Ti.App.information = { 
    user_id:'existing username val', 
    organization_id:'existing org val', 
    uname:'existing uname val', 
    Lpassword:'existing Lpassword val', 
    Lemail_id:'existing Lemail_id val', 
    is_valid:'existing is_valid val' 
}; 

function parseXML(xml) 
{ 
    if (xml.getElementsByTagName("d:user_id").length > 0) 
    { 
     for (key in Ti.App.information) 
     { 
      //outputs the key => value pairs for some existing data 
      Ti.API.info(key + ': ' + Ti.App.information[key]); 
     } 
     Ti.API.warn('------------------------'); 
     Ti.App.information = { 
      user_id:   xml.getElementsByTagName("d:user_id").item(0).text, 
      organization_id: xml.getElementsByTagName("d:organization_id").item(0).text, 
      uname:    xml.getElementsByTagName("d:name").item(0).text, 
      Lpassword:   xml.getElementsByTagName("d:password").item(0).text, 
      Lemail_id:   xml.getElementsByTagName("d:email_id").item(0).text, 
      is_valid:   xml.getElementsByTagName("d:is_valid").item(0).text 
     } 

     for (key in Ti.App.information) 
     { 
      //outputs the key => value pairs for the new data you set above 
      Ti.API.info(key + ': ' + Ti.App.information[key]); 
     } 
    } 
} 

function loadXML() 
{ 
    var xhr = Ti.Network.createHTTPClient({ 
     onload: function(event) 
     { 
      Ti.API.info('loaded'); 
      parseXML(this.responseXML); 
     }, 
     onerror: function(event) 
     { 
      alert('Error. Code: ' + this.status); 
     }, 
     timeout: 5000 
    }); 
    xhr.open('GET','http://ronnieswietek.com/feed.xml'); 
    xhr.send(); 
} 
loadXML(); 
+0

案件未解決! – kittu88

+0

我也在問題本身中發佈了完整的源代碼。這裏是鏈接:http://justpaste.it/1gwc – kittu88

相關問題