2012-11-01 42 views
0

不知道爲什麼RPCDataServiceAdapter會彈出錯誤。有一部分腳本與錯誤有關。DataAdapter錯誤

 public function normalusercontactdatagrid_creationCompleteHandler(event:FlexEvent):void 
     { 
      getAllNormaluserResult.token = normaluserService.getAllNormaluser(); 
     } 


     protected function addUSER(event:MouseEvent):void 
     { 
      var win:IFlexDisplayObject =PopUpManager.createPopUp(this, addUser, true) as IFlexDisplayObject; 

      PopUpManager.centerPopUp(win); 

      var e:FlexEvent; 
      normalusercontactdatagrid_creationCompleteHandler(e); 
     } 

但被示出

TypeError: Error #1009: Cannot access a property or method of a null object reference. 
    at mx.data::RPCDataServiceAdapter/processDataMessage()[C:\depot\DataServices\branches\milestone\lcds45_fb45\frameworks\projects\data\src\mx\data\RPCDataServiceAdapter.as:987] 
    at RPCDataServiceRequest/invoke()[C:\depot\DataServices\branches\milestone\lcds45_fb45\frameworks\projects\data\src\mx\data\RPCDataServiceAdapter.as:1786] 
    at mx.data::DataStore/http://www.adobe.com/2006/flex/mx/internal::invoke()[C:\depot\DataServices\branches\milestone\lcds45_fb45\frameworks\projects\data\src\mx\data\DataStore.as:3497] 
    at Function/<anonymous>()[C:\depot\DataServices\branches\milestone\lcds45_fb45\frameworks\projects\data\src\mx\data\DataStore.as:1716] 
    at Function/<anonymous>()[C:\depot\DataServices\branches\milestone\lcds45_fb45\frameworks\projects\data\src\mx\data\DataStore.as:1584] 
    at mx.data::DataStore/http://www.adobe.com/2006/flex/mx/internal::fill()[C:\depot\DataServices\branches\milestone\lcds45_fb45\frameworks\projects\data\src\mx\data\DataStore.as:1771] 
    at mx.data::ConcreteDataService/internalFill()[C:\depot\DataServices\branches\milestone\lcds45_fb45\frameworks\projects\data\src\mx\data\ConcreteDataService.as:7504] 
    at Function/<anonymous>()[C:\depot\DataServices\branches\milestone\lcds45_fb45\frameworks\projects\data\src\mx\data\ConcreteDataService.as:1306] 
    at mx.data::ConcreteDataService/fill()[C:\depot\DataServices\branches\milestone\lcds45_fb45\frameworks\projects\data\src\mx\data\ConcreteDataService.as:1325] 
    at mx.data::ConcreteDataService/executeQuery()[C:\depot\DataServices\branches\milestone\lcds45_fb45\frameworks\projects\data\src\mx\data\ConcreteDataService.as:1607] 
    at mx.data::DataManager/executeQuery()[C:\depot\DataServices\branches\milestone\lcds45_fb45\frameworks\projects\data\src\mx\data\DataManager.as:1493] 
    at Function/http://adobe.com/AS3/2006/builtin::apply() 
    at mx.data::ManagedOperation/queryProxy()[C:\depot\DataServices\branches\milestone\lcds45_fb45\frameworks\projects\data\src\mx\data\ManagedOperation.as:519] 
    at mx.rpc.remoting::Operation/send()[E:\dev\4.y\frameworks\projects\rpc\src\mx\rpc\remoting\Operation.as:212] 
    at _Super_NormaluserService/getAllNormaluser()[C:\Users\School\Adobe Flash Builder 4.6\FYPadminSideV3\src\services\normaluserservice\_Super_NormaluserService.as:244] 
    at normalUserDetailComp/normalusercontactdatagrid_creationCompleteHandler()[C:\Users\School\Adobe Flash Builder 4.6\FYPadminSideV3\src\normalUserDetailComp.mxml:80] 
    at normalUserDetailComp/addUSER()[C:\Users\School\Adobe Flash Builder 4.6\FYPadminSideV3\src\normalUserDetailComp.mxml:93] 
    at normalUserDetailComp/___normalUserDetailComp_LinkButton1_click()[C:\Users\School\Adobe Flash Builder 4.6\FYPadminSideV3\src\normalUserDetailComp.mxml:172] 

以下DataAdapter的錯誤的錯誤上的線80和93和172

line 80 getAllNormaluserResult.token = normaluserService.getAllNormaluser(); 
line 93 normalusercontactdatagrid_creationCompleteHandler(e); 
line 172 <mx:LinkButton label="Add" click="addUSER(event);"/> 

如果我正確理解該錯誤樁,我認爲這些行會觸發dataService的錯誤,它是

at _Super_NormaluserService/getAllNormaluser()[C:\Users\School\Adobe Flash Builder 4.6\FYPadminSideV3\src\services\normaluserservice\_Super_NormaluserService.as:244] 

這是怎麼發生的?我該怎麼辦?

我發現如果我在彈出的窗口中沒有調用adduser.mxml,錯誤將不會再顯示。和adduser.mxml如下所示

<?xml version="1.0" encoding="utf-8"?> 
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark" 
     xmlns:mx="library://ns.adobe.com/flex/mx" 
     xmlns:valueObjects="valueObjects.*" 
     xmlns:userservice="services.userservice.*" 
     xmlns:normaluserservice="services.normaluserservice.*" 
     xmlns:specialcareuserservice="services.specialcareuserservice.*" 
     width="522" height="732"> 
    <fx:Script> 
     <![CDATA[ 
      import mx.controls.Alert; 
      import services.*; 

      protected function button_clickHandler(event:MouseEvent):void 
      { 
       var userService:UserService = new UserService(); 
       var user2:User = new User(); 
       user2.idUser = parseInt(idUserTextInput.text); 
       user2.userName = userNameTextInput.text; 
       user2.password = passwordTextInput.text; 

       createUserResult.token = userService.createUser(user2); 
       userService.commit(); 

       var normaluserService:NormaluserService = new NormaluserService(); 
       var normaluser2:Normaluser = new Normaluser(); 
       normaluser2.user_idUser = parseInt(idUserTextInput.text); 
       normaluser2.userFristName = userFristNameTextInput.text; 
       normaluser2.userSecondName = userSecondNameTextInput.text; 
       normaluser2.userAddress_Flat = userAddress_FlatTextInput.text; 
       normaluser2.userAddress_Floor = userAddress_FloorTextInput.text; 
       normaluser2.userAddress_Bulding = userAddress_BuldingTextInput.text; 
       normaluser2.userAddress_Street = userAddress_StreetTextInput.text; 
       normaluser2.userAddress_Dist = userAddress_DistTextInput.text; 
       normaluser2.userAddress_Country = userAddress_CountryTextInput.text; 

       createNormaluserResult.token = normaluserService.createNormaluser(normaluser2); 
       normaluserService.commit(); 

       var specialcareuserService:SpecialcareuserService = new SpecialcareuserService(); 
       var specialcareuser2:Specialcareuser = new Specialcareuser(); 
       specialcareuser2.specialCareRequirement_idspecialCareRequirement = parseInt(specialCareRequirement_idspecialCareRequirementTextInput.text); 
       specialcareuser2.user_idUser = parseInt(idUserTextInput.text); 

       createSpecialcareuserResult.token = specialcareuserService.createSpecialcareuser(specialcareuser2); 
       specialcareuserService.commit(); 
      } 

     ]]> 
    </fx:Script> 



    <fx:Declarations> 
     <valueObjects:User id="user"/> 
     <userservice:UserService id="userService" 
           fault="Alert.show(event.fault.faultString + '\n' + event.fault.faultDetail)" 
           showBusyCursor="true"/> 
     <s:CallResponder id="createUserResult"/> 
     <valueObjects:Normaluser id="normaluser"/> 
     <normaluserservice:NormaluserService id="normaluserService" 
              fault="Alert.show(event.fault.faultString + '\n' + event.fault.faultDetail)" 
              showBusyCursor="true"/> 
     <s:CallResponder id="createNormaluserResult"/> 
     <valueObjects:Specialcareuser id="specialcareuser"/> 
     <specialcareuserservice:SpecialcareuserService id="specialcareuserService" 
                 fault="Alert.show(event.fault.faultString + '\n' + event.fault.faultDetail)" 
                 showBusyCursor="true"/> 
     <s:CallResponder id="createSpecialcareuserResult"/> 


    </fx:Declarations> 




    <s:Form x="43" y="10" width="445" height="727" > 
     <s:FormItem label="IdUser"> 
      <s:TextInput id="idUserTextInput" text="{user.idUser}"/> 
     </s:FormItem> 
     <s:FormItem label="UserName"> 
      <s:TextInput id="userNameTextInput" text="{user.userName}"/> 
     </s:FormItem> 
     <s:FormItem label="Password"> 
      <s:TextInput id="passwordTextInput" text="{user.password}"/> 
     </s:FormItem> 
     <s:FormHeading width="266" label="User Detail (Name, address...)"/> 
     <s:FormItem label="Frist Name"> 
      <s:TextInput id="userFristNameTextInput" text="{normaluser.userFristName}"/> 
     </s:FormItem> 
     <s:FormItem label="Second Name"> 
      <s:TextInput id="userSecondNameTextInput" text="{normaluser.userSecondName}"/> 
     </s:FormItem> 
     <s:FormItem label="Flat"> 
      <s:TextInput id="userAddress_FlatTextInput" text="{normaluser.userAddress_Flat}"/> 
     </s:FormItem> 
     <s:FormItem label="Floor"> 
      <s:TextInput id="userAddress_FloorTextInput" text="{normaluser.userAddress_Floor}"/> 
     </s:FormItem> 
     <s:FormItem label="UserAddress_Bulding"> 
      <s:TextInput id="userAddress_BuldingTextInput" text="{normaluser.userAddress_Bulding}"/> 
     </s:FormItem> 
     <s:FormItem label="Street"> 
      <s:TextInput id="userAddress_StreetTextInput" text="{normaluser.userAddress_Street}"/> 
     </s:FormItem> 
     <s:FormItem label="Dist"> 
      <s:TextInput id="userAddress_DistTextInput" text="{normaluser.userAddress_Dist}"/> 
     </s:FormItem> 
     <s:FormItem label="Country"> 
      <s:TextInput id="userAddress_CountryTextInput" text="{normaluser.userAddress_Country}"/> 
     </s:FormItem> 
     <s:FormHeading label="Special Requirement"/> 

     <s:FormItem label="Care Requirement"> 
      <s:helpContent> 
       <s:VGroup> 
        <s:Label text="Special Requirement?"></s:Label> 
       </s:VGroup> 
      </s:helpContent> 
      <s:TextInput id="specialCareRequirement_idspecialCareRequirementTextInput" 
         text="{specialcareuser.specialCareRequirement_idspecialCareRequirement}"/> 
     </s:FormItem> 
      <s:Button id="button" label="CreateUser" click="button_clickHandler(event)"/> 
    </s:Form> 
</s:Group> 
+0

RPC請求的另一端是什麼?而且這種情況有時會發生 - 並非每次? – ethrbunny

+0

這隻發生在我調用adduser.mxml形式的addUSER函數時。而RPC請求的另一端是一個php腳本。 – Samuel

回答

0

無論什麼原因,當調用CreationComplete()時RPC連接不可用。您可以延遲調用它(一個短暫的定時器?),或者從CreationComplete中調用一些其他函數,直到建立RPC連接爲止。也許在此期間顯示「工作...」對話框。

無論哪種方式,你應該在這一點上測試null並捕獲錯誤。

+0

我猜Flex不會對Dataservices調用進行很好的排隊,所以當我調用單個數據服務多次=。='時,會出現很多dataservices錯誤。我會嘗試阻止dataservice調用。希望它的工作。謝謝。 – Samuel