2011-09-28 3 views
0

안녕하세요. 최근 Flash Builder 4.5로 작업하기 시작 했으므로 모바일 응용 프로그램을 빌드하는 동안 특히 내 응용 프로그램을 백 엔드 서버에 연결할 때 많은 어리석은 문제가 있습니다.PHP 및 MySQL을 사용하여 flex 4.5 DataGrid 채우기

현재 작업중인 것은 DataGrid를 업데이트해야하며이 데이터는 MySQL 데이터베이스에서 검색됩니다.

이 코드는 브라우저에 데이터를 명확하게 표시하지만 데이터 그리드는 업데이트되지 않습니다. 대신 다음과 같은 오류가 발생합니다.

TypeError: Error #1034: Type Coercion failed: cannot convert mx.utils::[email protected] to mx.collections.IList. 
    at views::connectPHPHomeView/userRequest_resultHandler()[C:\Documents and Settings\s4710935\Adobe Flash Builder 4.5\connectPHP\src\views\connectPHPHomeView.mxml:17] 
    at views::connectPHPHomeView/__userRequest_result()[C:\Documents and Settings\s4710935\Adobe Flash Builder 4.5\connectPHP\src\views\connectPHPHomeView.mxml:29] 
    at flash.events::EventDispatcher/dispatchEventFunction() 
    at flash.events::EventDispatcher/dispatchEvent() 
    at HTTPOperation/http://www.adobe.com/2006/flex/mx/internal::dispatchRpcEvent()[E:\dev\4.5.1\frameworks\projects\rpc\src\mx\rpc\http\HTTPService.as:993] 
    at mx.rpc::AbstractInvoker/http://www.adobe.com/2006/flex/mx/internal::resultHandler()[E:\dev\4.5.1\frameworks\projects\rpc\src\mx\rpc\AbstractInvoker.as:318] 
    at mx.rpc::Responder/result()[E:\dev\4.5.1\frameworks\projects\rpc\src\mx\rpc\Responder.as:56] 
    at mx.rpc::AsyncRequest/acknowledge()[E:\dev\4.5.1\frameworks\projects\rpc\src\mx\rpc\AsyncRequest.as:84] 
    at DirectHTTPMessageResponder/completeHandler()[E:\dev\4.5.1\frameworks\projects\rpc\src\mx\messaging\channels\DirectHTTPChannel.as:451] 
    at flash.events::EventDispatcher/dispatchEventFunction() 
    at flash.events::EventDispatcher/dispatchEvent() 
    at flash.net::URLLoader/onComplete() 

누군가 나를 통해 이것을 안내 할 수 있습니까? 여기에 편집

는 PHP 코드 :

<?php 

    // ----------------------------------------------------------------------------- 
    // Initialization of the sql server 
    // ----------------------------------------------------------------------------- 


    // hostname or ip of server (for local testing, localhost should work) 
    $dbServer='localhost'; 

    // username and password to log onto db server 
    $dbUser='root'; 
    $dbPass='password'; 

    // name of database 
    $dbName='test'; 

    mysql_connect("$dbServer", "$dbUser", "$dbPass") or die(mysql_error()); 
    mysql_select_db("$dbName") or die(mysql_error()); 


    //Creating the table and inserting the values in it... 



    mysql_query("CREATE TABLE IF NOT EXISTS mariah_transaction_log(
    id INT NOT NULL AUTO_INCREMENT, 
     PRIMARY KEY(id), 
     date DATE, 
     details VARCHAR(150), 
     debit DOUBLE, 
     credit DOUBLE, 
     balance DOUBLE)") 
    or die(mysql_error()); 


    mysql_query("INSERT INTO mariah_transaction_log 
     (date, details, debit, credit, balance) VALUES('2011-08-08','Zellers','12.56','0.00','12343.54') ") 
    or die(mysql_error()); 


    $username = $_GET["username"]; 

    // $namedGreeting = mysql_query("SELECT * FROM customer_list WHERE username='$username'") or die(mysql_error()); 
    // $row = mysql_fetch_array($namedGreeting); 

    // echo "Hello ".$row['name']."!"; 


    $Query = "SELECT * from mariah_transaction_log"; 
    $Result = mysql_query($Query); 

    $Return = "<users>"; 

    while ($User = mysql_fetch_object($Result)) 
    { 
    $Return .= "<user><date>".$User->date."</date><details>". 
       $User->details."</details><debit>". 
       $User->debit."</debit><credit>". 
       $User->credit."</credit><balance>". 
       $User->balance."</balance></user>"; 
    } 
    $Return .= "</users>"; 
    mysql_free_result($Result); 
    print ($Return) 



    ?> 

그리고 여기 내 코드에 MXML 및 AS3 일부입니다 샘플 XML 결과가 방금 추가 된 참고 단순화를 위해

<?xml version="1.0" encoding="utf-8"?> 
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark" title="HomeView"> 

    <fx:Script> 
     <![CDATA[ 
      import mx.collections.IList; 
      import mx.collections.XMLListCollection; 
      import mx.rpc.events.ResultEvent; 






      protected function callService(event:ResultEvent):void 
      { 
       var results:XML = sampleResult; 
       var resultsList:XMLListCollection = results.users as XMLListCollection; 
       showTransactions_dg.dataProvider = resultsList; 


      } 

     ]]> 
    </fx:Script> 


    <fx:Declarations> 


     <fx:XML id="sampleResult" xmlns=""> 
      <users> 
       <user> 
        <date>2011-08-07</date> 
        <details>Camello Shop</details> 
        <debit>67.32</debit> 
        <credit>0.00</credit> 
        <balance>1233.42</balance> 
       </user> 

       <user> 
        <date>2011-08-07</date> 
        <details>Deposit</details> 
        <debit>0.00</debit> 
        <credit>600.00</credit> 
        <balance>1833.42</balance> 
       </user> 

      </users> 



     </fx:XML> 

     <s:HTTPService id="userRequest" url="{phpFile}" 
         method="GET" resultFormat="e4x" 
         result="callService(event)" useProxy="false"> 
      <s:request xmlns=""> 
       <username>{username_txt.text}</username> 
      </s:request> 
     </s:HTTPService> 


     <!-- The link to the php file --> 
     <fx:String id="phpFile">http://localhost:8080/connectPHP/phpFile.php </fx:String>  

    </fx:Declarations> 


    <s:TextInput id="username_txt" x="11" y="78"/> 
    <s:Label x="11" y="55" text="Username"/> 
    <s:Button id="getData_button" x="10" y="122" label="Done?" 
       click="userRequest.send()"/> 
    <s:Label id="showName_lbl" x="13" y="173" text="show name here"/> 


    <s:DataGrid id="showTransactions_dg" x="10" y="218" width="300" height="86"> 
     <s:columns> 
      <s:ArrayCollection> 
       <s:GridColumn dataField="date" headerText="Date" /> 
       <s:GridColumn dataField="details" headerText="Details"/> 
       <s:GridColumn dataField="debit" headerText="Debit"/> 
       <s:GridColumn dataField="credit" headerText="Credit"/> 
       <s:GridColumn dataField="balance" headerText="Balance"/> 

      </s:ArrayCollection> 
     </s:columns> 
    </s:DataGrid> 
    <s:Label id="testLbl" x="13" y="334" width="266" height="90" text="Label"/> 




</s:View> 
+0

오류가 Flex에서 발생하므로 MXML/ActionScript 코드를 질문에 포함해야합니다. –

+0

@ LarsBlåsjö 미안하지만 완전히 내 마음을 스킵! 이제 MXML 구성 요소를 추가했습니다 ... – BurninatorDor

답변

1

spark DataGrid에서 dataProvideriList 인터페이스를 구현해야합니다. XML을 반환하고 일반 객체에 저장하는 것처럼 보입니다. 일반 객체는 IList 인터페이스를 지원하지 않습니다.

대신 데이터 그리드의 dataProvider에 원격 호출의 결과를 결합, 당신은 HTTPService를에 결과 처리기를 추가해야합니다

<s:HTTPService id="userRequest" url="{phpFile}" 
       method="GET" resultFormat="object" useProxy="false" result="onResult(event)"> 

그런 다음은 IList를 구현하는 일에 결과 핸들러에 데이터를 캐스팅. 이 경우에는 XMLListCollection을 사용하는 것이 좋습니다.

protected function onResult(event:ResultEvent):void{ 
var resultsXML : XML = event.results as XML 
showTransactions_dg.dataProvider = new XMLListCollection(resultsXML); 
} 

이 코드는 브라우저로 작성되었으며 완전하지 않을 수 있습니다.

+0

이 onResult 함수가 오류를 표시하고 있습니다 .... " 1067 : 형식 XML 값과 관련없는 XMLList 형식의 암시 적 강제 변환"이 표시됩니다. 이유를 설명해 주시겠습니까? – BurninatorDor

+0

나는 그 오류가 꽤 자명하다고 생각한다. XML과 XMLList는 같은 것이 아닙니다. XML을 XMLList로 변환 한 다음 해당 XMLList 변수를 XMLListCollection의 소스로 사용해야합니다. – JeffryHouser

+0

그래서 위의 줄 대신이 줄을 사용했습니다 : "var results : XMLList = event.result as XMLList;" 다행히도 더 이상 오류를 표시하지 않습니다. 그러나 불행히도 DataGrid는 어떤 값도 표시하지 않습니다. XML을 XMLList로 변환하는 방법을 설명하는 것이 좋을까요? – BurninatorDor