简体   繁体   中英

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:ListEvent ):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?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM