开发者

Adobe Flex Error TypeError: Error #1009: Cannot access a property or method of a null object reference

I am trying to add a search field to an Adobe Flex project and when you type in the newly created search field, I get the following Error:

TypeError: Error #1009: Cannot access a property or method of a null object reference.
    at flextest/filterDecalMyArrayCollection()
    at mx.collections::ListCollectionView/internalRefresh()
    at mx.collections::ListCollectionView/refresh()
    at flextest/filterDecal()
    at flextest/__searchDecal_change()
    at flash.events::EventDispatcher/dispatchEventFunction()
    at flash.events::EventDispatcher/dispatchEvent()
    at mx.core::UIComponent/dispatchEvent()
    at mx.controls::TextInput/textField_changeHandler()

Any help would be greatly appreciated!

The following is my code from the Flex Project:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
                initialize="doSend()" 
                layout="absolute" width="1092" height="834">
    <mx:Style source="flextest.css"/>
    <mx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.events.ListEvent;
            import mx.rpc.events.FaultEvent;
            import mx.rpc.events.ResultEvent;
            import mx.rpc.http.HTTPService;

            [Bindable]
            private var datalist:ArrayCollection;
            private var rowcount;
            private var firstTimeID:Boolean = true;
            private var firstTimeName:Boolean = true;
            private var firstTimeDL:Boolean = true;
            private var firstTimeDecal:Boolean = true;
            private var firstTimeTag:Boolean = true;

            private function resultHandler(event:ResultEvent):void{                
                datalist = event.result.data.row;
                rowcount = event.result.data.numrows;
                /* if(rowcount == '1'){
                datalist.removeItemAt(1); */ 
            }
            public function doSend():void {
                xmlFromDatabase.url = "http://webprod.jsu.edu/pd/guestxml.php?t=" + new Date().getTime();
                xmlFromDatabase.send();

            }
            private function onItemClick( e:ListEve开发者_Go百科nt ):void {
                var dlAdjust;

                txtTuid.text = e.itemRenderer.data.TUID;
                txtStudentName.text = e.itemRenderer.data.STUDENTNAME;
                txtDecalYear.text = e.itemRenderer.data.DECALYEAR;
                txtDecalType.text = e.itemRenderer.data.DECALTYPE;
                txtConfNo.text = e.itemRenderer.data.DECALNUMBER;
                txtDecNo.text = e.itemRenderer.data.DECALNUMPERM;
                if (e.itemRenderer.data.DECALCAT == "WHIT") {
                    cmbCategory.selectedIndex = 0;
                }  else {
                    cmbCategory.selectedIndex = -1;
                }
                txtOriginalDate.text = e.itemRenderer.data.ORIGDATE;
                txtUpdateDate.text = e.itemRenderer.data.UPDTDATE;
                txtNote.text = e.itemRenderer.data.DECALNOTES;
                dlAdjust = e.itemRenderer.data.DLNUM;
                txtDLic.text = dlAdjust.slice(0, dlAdjust.length - 2); 
                txtDLState.text = e.itemRenderer.data.DLSTATE;
                txtVMake.text = e.itemRenderer.data.VMAKE;
                txtVModel.text = e.itemRenderer.data.VMODEL;
                txtVBody.text = e.itemRenderer.data.VBODY;
                txtVColor.text = e.itemRenderer.data.VCOLOR;
                txtVTag.text = e.itemRenderer.data.VTAG;
                txtVState.text = e.itemRenderer.data.VSTATE;
                txtVYear.text = e.itemRenderer.data.VYEAR;
                txtVCounty.text = e.itemRenderer.data.VCOUNTY;
                txtVIns.text = e.itemRenderer.data.VINS;
                if (e.itemRenderer.data.VPMT == "A") {
                    cmbPayment.selectedIndex = 0;
                } else if  (e.itemRenderer.data.VPMT == "T"){
                    cmbPayment.selectedIndex = 1;
                } else {
                    cmbPayment.selectedIndex = -1;
                }
                txtPhone.text = e.itemRenderer.data.PHONE;
                if (e.itemRenderer.data.DECALVOIDED == "V") {
                    chkVoid.selected = true;
                    lblVoidValue.label = "Void";
                } else {
                    chkVoid.selected = false;
                    lblVoidValue.label = null;
                }
                if (e.itemRenderer.data.ADDITIONAL == "A") {
                    chkAdditional.selected = true;
                    lblAdditional.label = "Additional";
                } else {
                    chkAdditional.selected = false;
                    lblAdditional.label = null;

                }
            }


            public function handleResult(event:ResultEvent):void {
                /*var urlRequest:URLRequest = new URLRequest('http://webprod.jsu.edu/pd-test/admin/flextest.html');
                navigateToURL(urlRequest,"_self");*/                
            }
            public   function handleFault(event:FaultEvent):void {
            }


            private function filterTag():void {
            datalist.filterFunction = filterTagMyArrayCollection;
            datalist.refresh();
            }           
            private function filterTagMyArrayCollection(item:Object):Boolean {
            var searchString:String = searchTag.text.toLowerCase();
            var itemName:String = (item.VTAG as String).toLowerCase();
            return itemName.indexOf(searchString) > -1;
            }
            private function filterDL():void {
            datalist.filterFunction = filterDLMyArrayCollection;
            datalist.refresh();
            }           
            private function filterDLMyArrayCollection(item:Object):Boolean {
            var searchString:String = searchDL.text;
            var itemName:String = (item.DLNUM as String);
            return itemName.indexOf(searchString) > -1;
            }

            private function filterDecal():void {
                datalist.filterFunction = filterDecalMyArrayCollection;
                datalist.refresh();
            }

            private function filterDecalMyArrayCollection(item:Object):Boolean {
                var searchString:String = searchDecal.text;
                var itemName:String = (item.DECALNUMPERM as String);
                return itemName.indexOf(searchString) > -1;
            }

            /*private function filterID():void {
                datalist.filterFunction = filterIDMyArrayCollection;
                datalist.refresh();
            }           
            private function filterIDMyArrayCollection(item:Object):Boolean {
                var searchString:String = searchID.text.toLowerCase();
                var itemName:String = (item.STUDENTPIDM as String).toLowerCase();
                return itemName.indexOf(searchString) > -1;
            }       */      
            private function filterName():void {
                datalist.filterFunction = filterNameMyArrayCollection;
                datalist.refresh();
            }           
            private function filterNameMyArrayCollection(item:Object):Boolean {
                var searchString:String = searchName.text.toLowerCase();
                var itemName:String = (item.STUDENTNAME as String).toLowerCase();
                return itemName.indexOf(searchString) > -1;
            }           

            private function clearNameTextInput():void {                
                if (firstTimeName == true )
                {
                    searchName.text = "";
                    firstTimeName = false;
                }
            }   


            /*  
            private function clearIDTextInput():void {              
            if (firstTimeID == true )
            {
            searchID.text = "";
            firstTimeID = false;
            }   
            }       */      
            private function clearDLTextInput():void {              
            if (firstTimeDL == true )
            {
            searchDL.text = "";
            firstTimeDL = false;
            }
            }           
            private function clearTagTextInput():void {             
            if (firstTimeTag == true )
            {
            searchTag.text = "";
            firstTimeTag = false;
            }
            }

            private function clearDecalTextInput():void {               
                if (firstTimeDecal == true )
                {
                    searchDecal.text = "";
                    firstTimeDecal = false;
                }
            } 


            protected function button1_clickHandler(event:MouseEvent):void
            {
                //What happens when we click the refresh button
                var urlRequest:URLRequest = new URLRequest('http://webprod.jsu.edu/pd-test/guest/whiteadmin.php');
                navigateToURL(urlRequest,"_self");
            }
            protected function btnSave_clickHandler(event:MouseEvent):void
            {
                //What happens when we click the save button
                form1.send();               
            }
            protected function chkVoid_clickHandler(event:MouseEvent):void
            {
                //What happens when we click Void Checkbox
                if (chkVoid.selected.valueOf() == true) {
                    lblVoidValue.label = "Void";
                } else {
                    lblVoidValue.label = null;
                }
            }
            protected function chkAdditional_clickHandler(event:MouseEvent):void
            {
                // What happens when we click Additional Checkbox
                if (chkAdditional.selected.valueOf() == true) {
                    lblAdditional.label = "Additional";
                } else {
                    lblAdditional.label = null;
                }
            }




            protected function button3_clickHandler(event:MouseEvent):void
            {
                //What happens when we click the register white button
                var urlRequest:URLRequest = new URLRequest('http://webprod.jsu.edu/pd-test/registerwhite.php');
                navigateToURL(urlRequest,"_self");
            }

            protected function button4_clickHandler(event:MouseEvent):void
            {
                // TODO Auto-generated method stub
                var urlRequest:URLRequest = new URLRequest('http://webprod.jsu.edu/pd-test/admin/dispatch.php');
                navigateToURL(urlRequest,"_self");
            }

            protected function dg_changeHandler(event:ListEvent):void
            {
                // TODO Auto-generated method stub
            }
        ]]>
    </mx:Script>


    <!-- Service Calls -->
    <mx:HTTPService url="http://webprod.jsu.edu/pd-test/guestxml.php"
                    id="xmlFromDatabase" 
                    showBusyCursor="true" 
                    result="resultHandler(event)"                   
                    method="POST" >
    </mx:HTTPService>

    <mx:HTTPService id="form1" 
                    url="http://webprod.jsu.edu/pd-test/guestupdate.php"                    
                    method="POST"
                    result="handleResult(event)"
                    resultFormat="text" >
        <mx:request>
            <txtTuid>
                {txtTuid.text}
            </txtTuid>
            <txtStudentName>
                {txtStudentName.text}
            </txtStudentName>
            <txtDecalYear>
                {txtDecalYear.text}
            </txtDecalYear>
            <txtDecalType>
                {txtDecalType.text}
            </txtDecalType>
            <txtConfNo>
                {txtConfNo.text}
            </txtConfNo>
            <txtDecNo>
                {txtDecNo.text}
            </txtDecNo>
            <txtCategory>
                {cmbCategory.selectedItem.data}
            </txtCategory>
            <dateOrigDate>
                {txtOriginalDate.text}
            </dateOrigDate>
            <txtNote>
                {txtNote.text}
            </txtNote>
            <txtDLic>
                {txtDLic.text}
            </txtDLic>
            <txtDLState>
                {txtDLState.text}
            </txtDLState>
            <txtVMake>
                {txtVMake.text}
            </txtVMake>
            <txtVModel>
                {txtVModel.text}
            </txtVModel>
            <txtVBody>
                {txtVBody.text}
            </txtVBody>
            <txtVColor>
                {txtVColor.text}
            </txtVColor>
            <txtVTag>
                {txtVTag.text}
            </txtVTag>
            <txtVState>
                {txtVState.text}
            </txtVState>
            <txtVYear>
                {txtVYear.text}
            </txtVYear>
            <txtVCounty>
                {txtVCounty.text}
            </txtVCounty>
            <txtVIns>
                {txtVIns.text}
            </txtVIns>
            <txtVPmt>
                {cmbPayment.selectedItem.data}
            </txtVPmt>
            <txtPhone>
                {txtPhone.text}
            </txtPhone>
            <lblVoidValue>
                {lblVoidValue.label}
            </lblVoidValue>
            <lblAdditional>
                {lblAdditional.label}
            </lblAdditional>
        </mx:request>
    </mx:HTTPService>

    <mx:Label x="6" y="4" text="White Decal Dispatch" fontWeight="bold" color="#CC3333" fontSize="30"/>

    <mx:DataGrid x="10" y="53" dataProvider="{datalist}" id="dg" itemClick="onItemClick( event );" height="255" width="1009" change="dg_changeHandler(event)">
        <mx:columns>
            <!--<mx:DataGridColumn width="50" headerText="uid" dataField="TUID"/>-->
            <mx:DataGridColumn width="30" headerText="Year" dataField="DECALYEAR"/>
            <mx:DataGridColumn width="80"  headerText="Name" dataField="STUDENTNAME"/>
            <mx:DataGridColumn width="23" headerText="Conf #." dataField="DECALNUMBER"/>
            <mx:DataGridColumn width="23" headerText="Decal #" dataField="DECALNUMPERM"/>
            <mx:DataGridColumn width="10" headerText="Typ" dataField="DECALTYPE"/>
            <mx:DataGridColumn width="20" headerText="Cat" dataField="DECALCAT"/>
            <mx:DataGridColumn width="30" headerText="dlnum" dataField="DLNUM"/>
            <mx:DataGridColumn width="12" headerText="dlstate" dataField="DLSTATE"/>
            <mx:DataGridColumn width="20" headerText="Make" dataField="VMAKE"/>
            <mx:DataGridColumn width="30" headerText="Model" dataField="VMODEL"/>
            <mx:DataGridColumn width="12" headerText="Body" dataField="VBODY"/>
            <mx:DataGridColumn width="15" headerText="Year" dataField="VYEAR"/>
            <mx:DataGridColumn width="10" headerText="Color" dataField="VCOLOR"/>
            <mx:DataGridColumn width="30" headerText="Tag" dataField="VTAG"/>
            <mx:DataGridColumn width="12" headerText="State" dataField="VSTATE"/>
            <mx:DataGridColumn width="30" headerText="County" dataField="VCOUNTY"/><!--
            <mx:DataGridColumn width="50" headerText="Ins" dataField="VINS"/>
            <mx:DataGridColumn width="20" headerText="Pmt" dataField="VPMT"/>-->
            <mx:DataGridColumn width="5" headerText="Rec" dataField="DECALPICKEDUP"/>
            <!--<mx:DataGridColumn width="20" headerText="decalvoided" dataField="DECALVOIDED"/>
            <mx:DataGridColumn width="50" headerText="origdate" dataField="ORIGDATE"/>
            <mx:DataGridColumn width="50" headerText="updtdate" dataField="UPDTDATE"/>
            <mx:DataGridColumn width="20" headerText="charged" dataField="CHARGED"/>
            <mx:DataGridColumn width="50" headerText="chargedate" dataField="CHARGEDATE"/>
            <mx:DataGridColumn width="50" headerText="decalnotes" dataField="DECALNOTES"/>-->
        </mx:columns>
    </mx:DataGrid>
    <mx:Form id= "frmUpdateDecal" x="710" y="336" width="309" height="363">
        <mx:FormItem label="DLic#">
            <mx:TextInput id="txtDLic" maxChars="20"/>
        </mx:FormItem>
        <mx:FormItem label="DLic State:">
            <mx:TextInput id="txtDLState" maxChars="2"/>
        </mx:FormItem>
        <mx:FormItem label="Vehicle Make:">
            <mx:TextInput id="txtVMake" maxChars="4"/>
        </mx:FormItem>
        <mx:FormItem label="Vehicle Model:">
            <mx:TextInput id="txtVModel" maxChars="20"/>
        </mx:FormItem>
        <mx:FormItem label="Vehicle Body:">
            <mx:TextInput id="txtVBody" maxChars="4"/>
        </mx:FormItem>
        <mx:FormItem label="Vehicle Color:">
            <mx:TextInput id="txtVColor" maxChars="3"/>
        </mx:FormItem>
        <mx:FormItem label="Vehicle Tag:">
            <mx:TextInput id="txtVTag" maxChars="20"/>
        </mx:FormItem>
        <mx:FormItem label="Tag State:">
            <mx:TextInput id="txtVState" maxChars="2"/>
        </mx:FormItem>
        <mx:FormItem label="Vehicle Year:">
            <mx:TextInput id="txtVYear" maxChars="4"/>
        </mx:FormItem>
        <mx:FormItem label="Tag County:">
            <mx:TextInput id="txtVCounty" maxChars="20"/>
        </mx:FormItem>
        <mx:FormItem label="Insurance:">
            <mx:TextInput id="txtVIns" maxChars="50"/>
        </mx:FormItem>
        <mx:FormItem label="Phone:">
            <mx:TextInput id="txtPhone" maxChars="11"/>
        </mx:FormItem>
    </mx:Form>
    <mx:Button x="539" y="725" label="Refresh" width="156" click="button1_clickHandler(event)"/>
    <mx:Button x="710" y="17" label="Add White Decal" width="117" click="button3_clickHandler(event)"/>
    <mx:ApplicationControlBar x="10" y="365" width="261" height="334">
        <mx:Form height="268" width="236" y="25">           
            <mx:FormItem>
                <mx:Label text="Name:" color="#CC3333" fontWeight="bold" fontStyle="italic" textDecoration="underline"/>
            </mx:FormItem>
            <mx:TextInput id="searchName" change="filterName()" 
                          enabled="true" 
                          focusIn="clearNameTextInput()" 
                          text="Filter/Search Name"
                          width="202" height="26" color="#2B4381"/>         
            <mx:FormItem>
                <mx:Label text="Tag:" color="#CC3333" fontWeight="bold" fontStyle="italic" textDecoration="underline"/>
            </mx:FormItem>
            <!--
            <mx:TextInput id="searchID" change="filterID()" 
            enabled="true" 
            focusIn="clearIDTextInput()" 
            text="Filter/Search JSU ID"
            width="204" height="26" color="#2B4381"/>   -->     

            <mx:TextInput id="searchTag" change="filterTag()" 
            enabled="true" 
            focusIn="clearTagTextInput()" 
            text="Filter/Search Tag"
            width="201" height="26" color="#2B4381"/>




            <mx:FormItem>
                <mx:Label text="Driver's License:" color="#CC3333" fontWeight="bold" fontStyle="italic" textDecoration="underline"/>
            </mx:FormItem>
            <mx:TextInput id="searchDL" change="filterDL()" 
            enabled="true" 
            focusIn="clearDLTextInput()" 
            text="Filter/Search Driver's License"
            width="200" height="26" color="#2B4381"/>

            <mx:FormItem>
                <mx:Label text="Decal Number:" color="#CC3333" fontWeight="bold" fontStyle="italic" textDecoration="underline"/>
            </mx:FormItem>

            <mx:TextInput id="searchDecal" change="filterDecal()" 
                          enabled="true" 
                          focusIn="clearDecalTextInput()" 
                          text="Filter/Search Decal Number"
                          width="200" height="26" color="#2B4381"/>

        </mx:Form>  

    </mx:ApplicationControlBar> 
    <mx:FormItem label="Confirmation No:" x="299" y="403" width="219" fontStyle="italic">
        <mx:TextInput id="txtConfNo" width="119" editable="false" contentBackgroundAlpha="1.0" dropShadowVisible="false" borderVisible="false" color="#CC3333" maxChars="5"/>
    </mx:FormItem>
    <mx:FormItem label="System Tranaction ID:" x="276" y="426" width="240" fontStyle="italic">
        <mx:TextInput id="txtTuid" width="118" editable="false" borderVisible="false" color="#CC3333"/>
    </mx:FormItem>
    <mx:Label x="16" y="325" text="Search" fontWeight="bold" color="#CC3333" fontSize="22"/>
    <mx:FormItem label="Justification/Notes:" x="294" y="586">
        <mx:TextArea id="txtNote"  width="292" height="85"/>
    </mx:FormItem>
    <mx:FormItem label="Decal#:" x="571" y="477" width="121">
        <mx:TextInput id="txtDecNo" width="65" maxChars="5"/>
    </mx:FormItem>
    <mx:FormItem label="Category" x="489" y="507">
        <mx:ComboBox id="cmbCategory"
                     prompt="Select Decal Category"
                     selectedIndex="-1">
            <mx:dataProvider>
                <mx:Object label="White" data="WHIT" />
            </mx:dataProvider>
        </mx:ComboBox>

    </mx:FormItem>
    <mx:FormItem label="Payment Type" x="445" y="535">
        <mx:ComboBox id="cmbPayment"
                     prompt="Select Payment Type"
                     selectedIndex="-1" width="160">
            <mx:dataProvider>
                <mx:Object label="Payment Upon Request" data="A" />
                <mx:Object label="Tag or 25yrs service FREE" data="T" />
            </mx:dataProvider>
        </mx:ComboBox>
    </mx:FormItem>
    <mx:FormItem id="lblAdditional" color="#2FAB5E" x="525" y="561">
        <mx:CheckBox label="$1.00 Additional" fontStyle="italic" color="#2F3F81" id="chkAdditional" click="chkAdditional_clickHandler(event)"/>
    </mx:FormItem>
    <mx:FormItem label="" id="lblVoidValue" color="#D21703" fontSize="13" fontFamily="Verdana" fontWeight="bold" fontStyle="normal" x="410" y="687">
        <mx:CheckBox label="Void" id="chkVoid" click="chkVoid_clickHandler(event)" color="#2F3F81" fontSize="10" fontFamily="Arial" fontStyle="italic"/>
    </mx:FormItem>
    <mx:FormItem label="Order Date:" x="509" y="415" width="62">
    </mx:FormItem>
    <mx:FormItem label="Pick-up Date:" x="501" y="448" width="72">
    </mx:FormItem>
    <mx:FormItem label="Dec Year:" x="310" y="448" fontStyle="italic">
        <mx:TextInput id="txtDecalYear" width="79" borderVisible="false" color="#CC3333"/>
    </mx:FormItem>
    <mx:FormItem label="Guest Name" x="460" y="371">
        <mx:TextInput id="txtStudentName" width="152" maxChars="100"/>
    </mx:FormItem>
    <mx:Button label="Save" width="156" id="btnSave" click="btnSave_clickHandler(event)" x="539" y="685"/>
    <mx:FormItem label="Decal Type:" x="458" y="477" width="103">
        <mx:TextInput id="txtDecalType" width="26"/>
    </mx:FormItem>
    <mx:Label x="297" y="324" text="Decal Info" fontWeight="bold" color="#CC3333" fontSize="22"/>
    <mx:TextInput x="571" y="413" width="119" id="txtOriginalDate" maxChars="50"/>
    <mx:TextInput x="571" y="446" width="119" id="txtUpdateDate" maxChars="50"/>
    <mx:Button x="850" y="17" label="Return to Decal Dispatch" width="173" click="button4_clickHandler(event)"/>

</mx:Application>


Change this line:

var itemName:String = (item.DECALNUMPERM as String);

to

return item.DECALNUMPERM && item.DECALNUMPERM.toString().indexOf(searchString) > -1;

item.DECALNUMPERM is a number, casting it as a String will result in a null.


BTW: Amongst other things, I would break this file up into several. 500 line files are generally not a good idea for debugging.

And is there a reason you are using Flex 3 rather than Flex 4?


Edit Also, sometimes item.DECALNUMPERM is null. So, you will need to check for null as well as doing a toString(). Try this line instead:

return item.DECALNUMPERM && item.DECALNUMPERM.toString().indexOf(searchString) > -1;

You'll also need to make the changes in other places such as:

private function filterTagMyArrayCollection(item:Object):Boolean {
var searchString:String = searchTag.text.toLowerCase();
var itemName:String = (item.VTAG as String).toLowerCase();
return itemName.indexOf(searchString) > -1;
}

and

private function filterDLMyArrayCollection(item:Object):Boolean {
var searchString:String = searchDL.text;
var itemName:String = (item.DLNUM as String);
return itemName.indexOf(searchString) > -1;
}


Oh dear, that's painful to read through. You should really try to clean up.

As the error said, the function that's causing the issue is this:

private function filterDecalMyArrayCollection(item:Object):Boolean {
   var searchString:String = searchDecal.text;
   var itemName:String = (item.DECALNUMPERM as String);
   return itemName.indexOf(searchString) > -1;
}

Which probably fails when the DECALNUMPERM property is null, again, as the error mentioned. Have you tried debugging this at all?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜