2016-10-02 4 views
0

Je suis en train de remplir un ArrayCollection avec un json data afin de l'utiliser comme dataprovider pour un LineChart. J'ai essayé d'utiliser le code suivant mais cela ne fonctionnerait pas.remplir une ArrayCollection dynamiquement flex

jsonData= (com.adobe.serialization.json.JSON.decode(dataLoader.data)); 

for (var i:int=0; i<10; i++){ 
     frame.addItem({ date_time:((jsonData[i].date_time).toString()) , glucose:((jsonData[i].content).glucose)}); } 

Quelqu'un peut-il m'aider s'il vous plaît? Merci.

+1

Qu'est-ce qui ne fonctionne pas? Qu'est-ce qui se passe qui ne devrait pas être? Il est considéré comme de mauvaise qualité de ne pas expliquer ces choses dès le départ. –

+0

@NealDavis, Merci pour votre réponse et désolé pour la mauvaise qualité. Ce qui ne fonctionne pas, c'est que je n'ai pas pu obtenir les deux objets (date_time et glucose) dans ArrayCollection pour obtenir dynamiquement des données du tableau json. cela ne fonctionne que si les données sont statiques mais j'en ai besoin pour être dynamiquement placé dans ArrayCollection puisque les données json changent constamment. –

+0

Pouvez-vous publier les données json que vous décodez? –

Répondre

0

Cette application de test fonctionne. Il utilise une version allégée de vos données json. Mais le traite de la même manière. J'utilise aussi un autre décodeur JSON.

La seule chose à laquelle je peux penser est que votre fonction createDate est défectueuse. J'ai utilisé une version simple pour démontrer que tout devrait fonctionner comme prévu.

<?xml version="1.0" encoding="utf-8"?> 
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
         xmlns:s="library://ns.adobe.com/flex/spark" 
         xmlns:mx="library://ns.adobe.com/flex/mx" creationComplete="creationCompleteHandler(event)"> 
    <fx:Script> 
     <![CDATA[ 
      import mx.charts.DateTimeAxis; 
      import mx.charts.series.LineSeries; 
      import mx.collections.ArrayCollection; 
      import mx.events.FlexEvent; 

      [Bindable] 
      private var frame:ArrayCollection; 

      protected function creationCompleteHandler(event:FlexEvent):void { 
       frame = new ArrayCollection(); 

       var data:String = '[{ "content": { "glucose": 135 }, "date_time": "2016,09,15"},' + 
        '{ "content": { "glucose": 55 }, "date_time": "2016,09,16"},' + 
        '{ "content": { "glucose": 13 }, "date_time": "2016,09,17"},' + 
        '{ "content": { "glucose": 70 }, "date_time": "2016,09,18"}]'; 

       var jsonData:Object = JSON.parse(data); 

       for each (var item:Object in jsonData) { 
        frame.addItem({ date_time:((item.date_time).toString()) , glucose:(item.content.glucose)}); 
       } 

       var localSeries:LineSeries = new LineSeries(); 
       localSeries.dataProvider = frame; 
       localSeries.yField = "glucose"; 
       localSeries.xField = "date_time"; 
       localSeries.displayName = "Glucose Level"; 

       var currentSeries:Array = myChart.series; 
       currentSeries.push(localSeries); 
       myChart.series = currentSeries; 

       var hAxis:DateTimeAxis = new DateTimeAxis(); 
       hAxis.parseFunction = createDate; 
       myChart.horizontalAxis = hAxis; 
      } 

      public function createDate(s:String):Date { 
       // Get an array of Strings from the 
       // comma-separated String passed in. 
       var a:Array = s.split(","); 

       // Trace out year, month, and day values. 
       trace("y:" + a[0]); 
       trace("m:" + a[1]); 
       trace("d:" + a[2]); 

       // To create a Date object, you pass "YYYY,MM,DD", 
       // where MM is zero-based, to the Date() constructor. 
       var newDate:Date = new Date(a[0],a[1]-1,a[2]); 
       return newDate; 
      } 

     ]]> 
    </fx:Script> 

    <mx:LineChart id="myChart" /> 

</s:WindowedApplication>