;

PDA

Click to See Complete Forum and Search --> : Class to populate vars from URLLoader Problem


chemcnabb
03-09-2007, 02:11 PM
I'm trying to build a class that maps to a php class. The trouble is - I can trace() the variables i need, but if i instantiate the object within flash, the object methods dont return the values retrieved. I imagine this is an asynchronous issue - but i am totally stuck. Here's an example:


package {
import flash.net.URLLoader;
import flash.net.URLRequest ;
import flash.net.URLRequestMethod;
import flash.net.URLVariables;
import flash.net.URLLoaderDataFormat;
import flash.display.Sprite;
import flash.events.*;
import flash.net.*;
import flash.utils.*;



//import flash.xml;


public class User extends Sprite {

private var _user_id:uint;
private var _user_name:String;
private var _password:String;
//temp
private var _textfield:TextField;



public function User(cvalue=0) {
_user_id = cvalue;
readfromdb();
}

public function setuserid(xvalue:uint):void {
_user_id = xvalue;
}

public function getuserid():uint {
return _user_id;
}

public function setusername(xvalue:String):void {
_user_name = xvalue;
}

public function getusername():String {
if(_user_name == null){
_user_name = "";
}
return _user_name;
}

public function setuserpassword(xvalue:String):void {
_password = xvalue;
}

public function getuserpassword():String {
if(_password == null){
_password = "";
}
return _password;
}





public function readfromdb():void{


var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, xmlLoaded);



var srequest:URLRequest = new URLRequest();
srequest.method = URLRequestMethod.POST;
srequest.url = "http://localhost/flash_php_class_test/test.php";

var variables:URLVariables = new URLVariables("userid="+_user_id);
srequest.data = variables;
loader.load(srequest);




}

public function xmlLoaded(e:Event) {
_user_name = e.target.data;

}


}
}



I really hope someone can help me...

chemcnabb
03-09-2007, 02:33 PM
Wow am I a n00b.

I had to check the event listener on the flash side for the call to be completed before trying to use the class methods.

here's the changed code:


package {
import flash.net.URLLoader;
import flash.net.URLRequest ;
import flash.net.URLRequestMethod;
import flash.net.URLVariables;
import flash.net.URLLoaderDataFormat;
import flash.display.Sprite;
import flash.events.*;
import flash.net.*;
import flash.utils.*;



//import flash.xml;


public class User extends Sprite {

private var _user_id:uint;
private var _user_name:String;
private var _password:String;
//temp
private var dataWritten:Event;



public function User(cvalue=0) {
_user_id = cvalue;
readfromdb();
}

public function setuserid(xvalue:uint):void {
_user_id = xvalue;
}

public function getuserid():uint {
return _user_id;
}

public function setusername(xvalue:String):void {
_user_name = xvalue;
}

public function getusername():String {
if(_user_name == null){
_user_name = "";
}
return _user_name;
}

public function setuserpassword(xvalue:String):void {
_password = xvalue;
}

public function getuserpassword():String {
if(_password == null){
_password = "";
}
return _password;
}





public function readfromdb():void{


var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, xmlLoaded);



var srequest:URLRequest = new URLRequest();
srequest.method = URLRequestMethod.POST;
srequest.url = "http://localhost/flash_php_class_test/test.php";

var variables:URLVariables = new URLVariables("userid="+_user_id);
srequest.data = variables;
loader.load(srequest);




}

public function xmlLoaded(e:Event) {
_user_name = e.target.data;
dataWritten = new Event("dataWritten", true);
dispatchEvent(dataWritten);

}


}
}



then in the flash file:

var tt:User = new User(10000);
tt.addEventListener("dataWritten", onDataReceived);
function onDataReceived(e:Event):void {

debugger.text = tt.getusername();
}


and that is all.