Comunidad de diseño web y desarrollo en internet online

¿Como se escribe en un txt con JSON en FLEX/AIR?

Citar            
MensajeEscrito el 04 Ene 2012 04:28 pm
Hola a tod@s y feliz año nuevo,
obtengo correctamente los datos del archivo JSONSample.txt y los muestra por pantalla como quiero pero cuando le doy a actualizar no logro sobreescribir los datos del mismo archivo.

JSONSample.txt

Código :

[{"id":"2","name":"Strapless Wedding Dress Tips","author":"Ramona Waters","rating":"1"},{"id":"3","name":"Coordinating Your Brides Maids","author":"Ericka Brown","rating":"3"}]


¿sabeis de alguna idea? El mxml es este, simplemente extrae la informacion del archivo de texto y lo muestra en un datagrid. ¿Podría ser la llamada al httpservice que no es metodo post?

Código ActionScript :

<?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"
                  width="536" height="416">
   <fx:Declarations>
      
      <s:HTTPService id="getData" url="JSONSample.txt"
                  useProxy="false" method="GET" resultFormat="text"
                  result="getPHPData(event)">
      </s:HTTPService>
      
      <mx:HTTPService id="sendData" url="JSONSample.txt"
                  useProxy="false" method="POST" resultFormat="text"
                  result="updatedPHPDataResult(event)">
      </mx:HTTPService>
      
      
   </fx:Declarations>
   
   <fx:Script>
      <![CDATA[
         import mx.events.DataGridEvent;
         import mx.controls.TextInput;
         import mx.rpc.events.ResultEvent;
         import mx.collections.ArrayCollection;
         import com.adobe.serialization.json.JSON;
         
         
         
         [Bindable]
         private var dataArray:ArrayCollection;
         
         private function initDataGrid():void
         {
            dataArray = new ArrayCollection();
            getData.send();
         }
         
         private function getPHPData(event:ResultEvent):void
         {
            var rawArray:Array;
            var rawData:String = String(event.result);
            rawArray = JSON.decode(rawData) as Array;
            dataArray = new ArrayCollection(rawArray);
         }
         
         private function sendPHPData():void
         {
            var objSend:Object = new Object();
            var dataString:String = JSON.encode(dataArray.toArray());
            trace("TEXTO LEIDO: " + dataString);
            //sendData.send(dataString);
            dataString = escape(dataString);
            objSend.setTutorials = "true";
            objSend.jsonSendData = dataString;
            sendData.send(objSend);
            //trace(dataString);
         }
         
         private function updatedPHPDataResult(event:ResultEvent):void
         {
            var file:File = File.documentsDirectory; 
            file = file.resolvePath("JSONSample.txt"); 
            
            var fileStream:FileStream = new FileStream(); 
            fileStream.open(file, FileMode.WRITE); 
            fileStream.writeUTFBytes("HOLA");
            fileStream.close();
            lblStatus.text = "";//String(event.result);
            
         }
         
         private function checkRating(event:DataGridEvent):void
         {
            var txtIn:TextInput = TextInput(event.currentTarget.itemEditorInstance);
            trace("Valor: "+txtIn.text);
            var curValue:Number = Number(txtIn.text);
            if(isNaN(curValue) || curValue < 0 || curValue > 10)
            {
               event.preventDefault();
            }
         }
      ]]>
   </fx:Script>
   
   <fx:Binding source="dgData.dataProvider as ArrayCollection"
            destination="dataArray"/>
   
   <s:Panel x="0" y="0" width="525" height="406" title="Lectura">
      <mx:DataGrid id="dgData" x="10" y="10" width="495" height="241"
                dataProvider="{dataArray}" creationComplete="{initDataGrid()}"
                editable="true" itemEditEnd="{checkRating(event)}">
         <mx:columns>
            <mx:DataGridColumn headerText="Name" dataField="name" editable="false"/>
            <mx:DataGridColumn headerText="Author" dataField="author" width="115"
                           editable="false"/>
            <mx:DataGridColumn headerText="Rating" dataField="rating" width="50"
                           editable="true" />
         </mx:columns>
      </mx:DataGrid>
      <mx:Button id="butUpdate" x="9" y="258" height="58" label="UpdateDatabase"
               click="{sendPHPData()}"/>
      <mx:Label id="lblStatus" x="140" y="261" width="365" height="74"/>
   </s:Panel>
   
</s:WindowedApplication>


haber si me podeis echar una ayudita, muchas gracias y de nuevo, feliz 2.012

Alvaro

Por alvaroqp85

7 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Ene 2012 11:52 am
¿nadie sabe de qué estoy hablando?

Por alvaroqp85

7 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Ene 2012 04:43 pm
Hola, yo no tengo ni idea de flex/air,,, pero en flash/air puedes guardar un archivo txt de la siguiente forma:

Código ActionScript :

import flash.filesystem.*;  
import flash.events.Event;  
  
function saveFile():void {  
    var file:File=File.desktopDirectory;  
    file=file.resolvePath("test.txt");  
    var fileStream:FileStream = new FileStream();  
    fileStream.open(file, FileMode.WRITE);  
    fileStream.writeUTFBytes("Hi this file was saved from AIR application without dialog");        
    fileStream.close();  
  
     
}  
 
saveFile(); 



Saludos


eXe

Por exekiel21

Claber

164 de clabLevel



Genero:Masculino  

programador

firefox
Citar            
MensajeEscrito el 10 Ene 2012 10:02 am
Nada, eso me ejecuta pero despues de cerrar la aplicación no encuentro el archivo de texto creado :(

Por alvaroqp85

7 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Ene 2012 12:56 pm
Muchas veces se confunden los formatos de transferencia de datos, por ejemplo XML o Json con la fuente de datos, que casi siempre es una BD. Los formatos de transferencia de datos (y tambien las distintas serializaciones) son para hacer legibles una cantidad de datos sobre distintos sistemas heterogéneos. Asi casi siempre son operaciones de lectura. Luego hacer operaciones de escritura es muy complicado porque no son formatos pensados para eso. En XML armar un documento entero para agregarle un nodo es costosísimo a nivel memoria y uso de CPU, siendo incluso bloqueante en documentos grandes. Y con Json, si bien es mucho mas sintético en su notación, pasa 3/4 partes de lo mismo, con el agravante que no hay un objeto nativo como en XML (no se si las bibliotecas de deserialización de Json traen eso)
Luego lo obvio del problema es que mandas datos a un txt que no tiene ni idea que hacer con ellos ... de ahí que sea un txt y no un script

mx:HTTPService id="sendData" url="JSONSample.txt"

Mándaselos en cambio a un script de PHP, que tiene que abrir el txt, agregar los datos que recibe y volverlo a guardar.

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 13 Ene 2012 09:25 am
Es una aplicación AIR (de escritorio) que graba unas muestras en disco local. Si utilizo php necesita conexión a internet y quiero realizarlo sin conexión.

Tengo que hacerlo en JSON pero todos los ejemplos que he visto son como dices, lanzandolo a un php (necesario internet para establecer conexión). He visto que JSON viene nativo en AIR 3 pero por más que he actualizado sigue trabajando con la version AIR 2.6

Esta es la línea que tengo que poner, si pongo version 3.0 no ejecuta. Archivo xxx-app.xml

Código :

<application xmlns="http://ns.adobe.com/air/application/2.6">


El caso es que estoy volviendo loco y no lo estoy sacando.... Me parece que tendré que utilizar XML en vistas de que no lo saco, de todas formas las diferencias entre JSON y XML no las veo muy grandes asi que no creo que pierda mucho en este aspecto..

gracias

Por alvaroqp85

7 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 Ene 2012 12:29 pm
Si no tienes que comunicarte con otro sistema y manejas tu mismo el store de datos, con un listado separado por comas es suficiente

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 13 Ene 2012 02:45 pm
ya, pero los clientes son los que mandan XD

Por alvaroqp85

7 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 Ene 2012 02:54 pm
¿El cliente te indica que uses JSon en vez de un listado separado con comas? Entonces no es un cliente, es tu jefe técnico

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.