1

私は次の方法で試したfree.worldweatheronline.comからxmlデータを取得したい:-

<fx:Script>
    <![CDATA[
        import mx.rpc.events.FaultEvent;
        import mx.rpc.events.ResultEvent;
        private var main_xml_url:String = "http://free.worldweatheronline.com/feed/weather.ashx?q="+cityName.text.toString()+"&format=xml&num_of_days=2&key=my_api_key"; // there I put my api key not showing here//


        protected function weatherService_resultHandler(event:ResultEvent):void
        {
            // TODO Auto-generated method stub
            var result_weather_data:Object = event.result;
            cityNameData.text = data.request.query;

        }

        protected function weatherService_faultHandler(event:FaultEvent):void
        {
            // TODO Auto-generated method stub
            cityNameData.text = event.message.toString();
        }

    ]]>
</fx:Script>

<fx:Declarations>       
    <s:HTTPService id="weatherService"
                   url="main_xml_url"
                   resultFormat="object"
                   result="weatherService_resultHandler(event)"
                   fault="weatherService_faultHandler(event)"/>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<s:TextInput id="cityName" text="Hyderabad" x="10" y="10" width="219" fontWeight="bold" prompt="Enter city Name"/>

<s:Label id="cityNameData" x="108" y="109" width="202" fontSize="20" fontWeight="bold"/>    

しかし、次のようなエラーが発生します: null オブジェクト参照のプロパティまたはメソッドにアクセスできません。プライベート var main_xml_url:String で

解決してよろしくお願いします よろしくお願いします。

4

1 に答える 1

0

上記のコードはcityName.text.toString()、オブジェクトの初期化時に の値を取得して割り当てようとしていることを意味します。

である表示オブジェクトcityNameは、TextInput割り当て時に表示に追加されません。したがって、NPE を取得しています。

これは次のように修正できます。

<fx:Declarations>
    <s:HTTPService id="weatherService"
        url="{BASE_URL}"
        resultFormat="object"
        result="weatherService_resultHandler(event)"
        fault="weatherService_faultHandler(event)">
        <s:request xmlns="">
            <q>{cityName.text.toString()}</q>
            <format>{FORMAT}</format>
            <num_of_days>{NUMBER_OF_DAYS}</num_of_days>
            <key>{API_KEY}</key>
        </s:request>
    </s:HTTPService>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>

<fx:Script>
    <![CDATA[
        import mx.rpc.events.FaultEvent;
        import mx.rpc.events.ResultEvent;

        private static const BASE_URL:String="http://free.worldweatheronline.com/feed/weather.ashx"
        private static const API_KEY:String="your API key here"
        private static const NUMBER_OF_DAYS:uint=2;
        private static const FORMAT:String="xml";

        protected function weatherService_resultHandler(event:ResultEvent):void
        {
            // TODO Auto-generated method stub
            var result_weather_data:Object=event.result;
            cityNameData.text=result_weather_data.request.query;

        }

        protected function weatherService_faultHandler(event:FaultEvent):void
        {
            // TODO Auto-generated method stub
            cityNameData.text=event.message.toString();
        }
    ]]>
</fx:Script>
<s:layout>
    <s:VerticalLayout/>
</s:layout>
<s:TextInput id="cityName"
    width="219"
    text="Hyderabad"
    x="10"
    y="10"
    fontWeight="bold"
    prompt="Enter city Name"/>

<s:Label id="cityNameData"
    width="202"
    x="108"
    y="109"
    fontSize="20"
    fontWeight="bold"/>

<s:Button label="Send" click="{weatherService.send()}"/>

send()また、weatherServiceオブジェクトでを呼び出すのを忘れました。これは、とにかく Web サービス呼び出しがトリガーされなかったことを意味します。

この問題の詳細については、LiveDocsを確認してください。

于 2012-09-24T09:38:36.747 に答える