Appcelerator Titanium でアプリを開発しています。私が直面している問題は、ボタンのクリックで初めて特定の XML を解析するときに問題なく動作するが、ボタンを再度クリックすると、XML を再度解析する必要があるということです。ログでは、再形成された 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ファイルで宣言されています。
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>ad@ad.com</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は、ボタンのクリック時に間隔を置いて解析する必要があるタグです。
問題は、パーサーを再呼び出しした後でも、この変数がその値を保持していることです。