Apache flex Flex中数据库标记的绘图和绑定结果
我在学习Flex方面取得了巨大的进步,我非常喜欢它,但是,有一件事我找不到太多帮助,那就是如何在Flex中绑定查询结果。我已经设法创建了列表等,没有问题,但当我试图将一个特定的值绑定到一个变量时,它不起作用 首先,这里是我的PHP函数:Apache flex Flex中数据库标记的绘图和绑定结果,apache-flex,flex4,flex4.5,flex4.6,Apache Flex,Flex4,Flex4.5,Flex4.6,我在学习Flex方面取得了巨大的进步,我非常喜欢它,但是,有一件事我找不到太多帮助,那就是如何在Flex中绑定查询结果。我已经设法创建了列表等,没有问题,但当我试图将一个特定的值绑定到一个变量时,它不起作用 首先,这里是我的PHP函数: public function getRepnameByUsername($itemID) { $stmt = mysqli_prepare($this->connection, "SELECT * FROM $this->tabl
public function getRepnameByUsername($itemID) {
$stmt = mysqli_prepare($this->connection, "SELECT * FROM $this->tablename where Username=?");
$this->throwExceptionOnError();
mysqli_stmt_bind_param($stmt, 'i', $itemID);
$this->throwExceptionOnError();
mysqli_stmt_execute($stmt);
$this->throwExceptionOnError();
mysqli_stmt_bind_result($stmt, $row->RepID, $row->Username, $row->FirstName, $row->Surname, $row->SerialKey);
if(mysqli_stmt_fetch($stmt)) {
return $row;
} else {
return null;
}
}
当然,我在Flex中的函数我没有包含所有的变量,因为它们非常明显,我唯一遇到问题的是在这个函数中声明的repServ
protected function btnSubmitUser_clickHandler(event:MouseEvent):void
{
username = txtUsername.text;
password = txtPassword.text;
serialno = txtSerialNo.text;
userName.writeUTFBytes(username);
passWord.writeUTFBytes(password);
serialNo.writeUTFBytes(serialno);
EncryptedLocalStore.setItem("Username", userName);
EncryptedLocalStore.setItem("Password", passWord);
EncryptedLocalStore.setItem("Serial", serialNo);
var repServ:Repname = new Repname();
getRepnameByUsernameResult.token = repnameService.getRepnameByUsername(username);
repServ = getRepnameByUsernameResult.lastResult;
repid = repServ.RepID;
RepID.writeInt(repid);
EncryptedLocalStore.setItem("Rep", RepID);
}
抛出错误的行是repid=repServ.repid,我认为这与我如何通过上面的行绑定它有关。这样做的最佳方式是什么
谢谢
我发现你的代码有一些地方不对劲。首先,远程调用是异步的。这意味着它们在不同的线程中运行。因此,如果我们看一下这段代码:
getRepnameByUsernameResult.token = repnameService.getRepnameByUsername(username);
repServ = getRepnameByUsernameResult.lastResult;
在您尝试访问结果时,getRepnameByUsername服务很可能尚未完成执行或返回任何内容。相反,您应该侦听服务上的结果事件。概念上是这样的:
getRepnameByUsernameResult.addEventListener(ResultEvent.RESULT, onMyResult);
getRepnameByUsernameResult.token = repnameService.getRepnameByUsername(username);
getRepnameByUsernameResult.lastResult['repid']
然后在结果处理程序中,您可以处理结果:
protected function onMyResult(event:ResultEvent):void{
repServ = getRepnameByUsernameResult.lastResult as Repname;
repid = repServ.RepID;
RepID.writeInt(repid);
EncryptedLocalStore.setItem("Rep", RepID);
}
我看到的第二个错误是,您没有将lastResult强制转换为实际的对象类型。我本以为这会引发运行时错误。我在上面的代码中添加了转换
你没有告诉我们你使用的是哪种服务。(HTTPService、RemoteObject或WebService)
看起来您从未使用结果数据创建过名为Repname的对象。如果您使用的是AMF(RemoteObject),则可以自动将服务器端对象转换为客户端对象。但是,您可能必须在服务器上将查询转换为该对象,以便能够自动转换。如果您使用的是WebService或HTTPService,则必须解析客户端中的数据以将其转换为Repname对象
lastResults的结果很可能是泛型对象。您可以使用以下语法访问特定属性:
getRepnameByUsernameResult.addEventListener(ResultEvent.RESULT, onMyResult);
getRepnameByUsernameResult.token = repnameService.getRepnameByUsername(username);
getRepnameByUsernameResult.lastResult['repid']
您可以将其用作通用对象,也可以手动转换。您所说的很有道理。然而,我仍然没有得到任何通过不幸:(我相信我会得到它的权利,因为你已经明确引导我进入正确的轨道。对不起,我再次犯了一个错误,我在我的代码中,因为我试图键入它,当我复制粘贴,它工作得很好。非常感谢你