Error #1009: Il est impossible d'accéder à la propriété ou à la méthode d'une référen
Bonjour tout le monde,
Voilà mon code MXML:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| <?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%" showEffect="{IrisEffectId}">
<!-- On fait appel au fichier ActionScript contenant toutes les fonctions
et les packages Actionscript utilisés -->
<mx:Script source="../actionscript/amfphp/upload.as"/>
<!-- RemoteObject: accès service distant AMFPHP -->
<mx:RemoteObject id="ROService" showBusyCursor="true"
source="classif_amfphp.traitement" destination="amfphp">
<mx:method name="traitementMajPonctuelle" result="traitementMajPonctuelleResult(event)" />
</mx:RemoteObject>
<!--Effet permettant de rendre les transitions de l'interface plus douces-->
<mx:Iris id="IrisEffectId" duration="400"/>
<mx:TitleWindow title="Transfert du fichier" y="230" horizontalCenter="0">
<mx:HBox width="100%" paddingTop="10">
<mx:VBox height="100%" width="100">
<mx:Button label="Upload" click="{upload()}" id="button1" themeColor="0xf37021"/>
</mx:VBox>
<mx:Label text="Fichiers CSV uniquement" id="label1"/>
</mx:HBox>
<mx:Spacer top="10"/>
<mx:HRule width="325" horizontalCenter="0" verticalCenter="-150"/>
<mx:Spacer top="10"/>
<mx:HBox width="100%">
<mx:VBox height="100%" width="100">
<mx:Button label="Traitement" toolTip="Lancer le traitement pour la 'Classification des Sites Radio'" click="{traitementMajPonctuelle()}" themeColor="0xf37021" fillColors="[0xf37021,0xf37021]" fillAlphas="[1.0, 1.0, 1.0, 1.0]"/>
</mx:VBox>
<mx:Label text="Lancement de la MàJ ponctuelle" paddingTop="4"/>
</mx:HBox>
<mx:TextArea width="327" height="134" id="textarea1" horizontalCenter="0" verticalCenter="-44" text="Cette fenêtre vous permet d'effecuer les ajustements de priorités, demandés par les régions." editable="false" fontSize="11" color="#2434CD" />
</mx:TitleWindow>
<mx:Label text="Ajustement de priorités" styleName="titre2" horizontalCenter="0" y="195">
</mx:Label>
</mx:Canvas> |
Mon code ActionScript:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
| [Embed(source="../../css/icones/Down32x32.png")]
private var infoIconeClass:Class;
/* On fait appel aux différents packages ActionScript utilisés */
import flash.events.DataEvent;
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.rpc.events.ResultEvent; // Personnaliser le curseur "busy"
import flash.net.FileFilter;
/* Déclaration des variables */
public var fileRef:FileReference = new FileReference();
/* Déclaration des variables faisant le lien avec les vues */
[Bindable]
private var fichierAC: ArrayCollection;
/*La classe FileFilter permet dindiquer quels fichiers du système de lutilisateur sont répertoriés dans
la boîte de dialogue de recherche de fichiers qui saffiche lors de lappel de FileReference.browse() ou
FileReferenceList.browse()
Syntaxe: [Description (chaîne de caractères), extensions de fichier à proposer à l'utilisateur (*.CSV)]
*/
public var typesDocuments:FileFilter = new FileFilter("Fichier CSV uniquement(*.csv;)", "*.csv;");
public function upload():void
{
// listen for the file selected event
// listen for the upload complete event
fileRef.addEventListener(Event.SELECT, selectHandler);
fileRef.addEventListener(Event.COMPLETE, completeHandler);
fileRef.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, uploadCompleteHandler);
// browse for the file to upload
// when user selects a file the select handler is called
try {
var success:Boolean = fileRef.browse([typesDocuments]);
}
catch (error:Error) {
trace("Unable to browse for files.");
}
}
// when a file is selected you upload the file to the upload script on the server
public function selectHandler(event:Event):void {
var request:URLRequest = new URLRequest("http://OBERON/classif/test/flex/uploads/file_upload.php")
try {
// upload file
fileRef.upload(request);
//textarea1.text = "uploading " + fileRef.name + "...";
textarea1.text = fileRef.name;
//Alert.show( "Upload du fichier fileRef.name réalisé et accepté");
}
catch (error:Error) {
trace("Unable to upload file.");
}
}
// dispatched when file has been given to the server script. does not receive a response from the server
public function completeHandler(event:Event):void {
Alert.show("Fichier \""+fileRef.name+"\" transféré avec succès! ", "", Alert.OK, this, null, infoIconeClass);
}
/*private function initialisation():void
{
fileRef = new FileReference();
fileRef.addEventListener(Event.SELECT, selectHandler);
fileRef.addEventListener(Event.COMPLETE, completeHandler);
fileRef.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, uploadCompleteHandler);
//ROService.upload_fichier();
//datagrid_players.addEventListener(DelEvent.DEL_PLAYER, delListPlayers);
} */
// dispatched when file has been uploaded to the server script and a response is returned from the server
// event.data contains the response returned by your server script
public function uploadCompleteHandler(event:DataEvent):void {
trace("uploaded... response from server: \n" + String(event.data));
textarea1.text += event.data as String;
}
// méthode de récupération de tous les joueurs
private function traitement_fichierResult(evt:ResultEvent):void
{
fichierAC = ArrayCollection(evt.result);
}
private function traitementMajPonctuelleResult(evt:ResultEvent):void
{
fichierAC = ArrayCollection(evt.result);
}
/* "Fonction AS faisant appel à la fonction "traitement_fichier" contenu dans la classe "traitement"
du fichier "traitement.php"
function as --> class traitement -> function traitement_fichier
*/
private function traitementFichier():void
{
ROService.traitement_fichier();
}
private function traitementMajPonctuelle():void
{
ROService.traitementMajPonctuelle();
} |
Ma classe PHP est la suivante:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
| <?php
class traitement
{
function traitementMajPonctuelle()
{
/*==================
Début de traitement du fichier maj.csv
//==================*/
$fp = fopen("../../../classif/test/flex/uploads/maj.csv","r"); //lecture
if (!$fp)
{
echo "Echec de l'ouverture du fichier";
exit;
}
else {
// votre code;
echo "C'est OK";
$hostname = "localhost"; // nom du serveur
$database = "classif"; // nom de la base de données
$username = "****"; // nom d'utilisateur !!! ATTENTION, ne pas utiliser l'utilisateur root,
//dans ce cas, tous les visiteurs auraient tous les droits sur la base
$password = "****"; // mot de passe (aucun par défaut mais il est conseillé d'en mettre un)
$db = mysql_connect($hostname, $username, $password) or die ("Impossible de se connecter à la base de données, veuillez vérifier les informations de connexion");
//=====================
// Initialisation
//=====================
mysql_select_db($database,$db);
while (!feof($fp)) // teste la fin du fichier téléchargé,
{
// Tant qu'on est pas arrivé à la fin du fichier on continue...
$ligne = fgets($fp); // récupère la ligne courante sur laquelle se trouve le pointeur du fichier
$liste = explode(";",$ligne); // on place les élements séparés par des points virgule dans un tableau.
// ";" étant le séparateur pour un fichier de type CSV
// premier élément
$liste[0] = ( isset($liste[0]) ) ? $liste[0] : Null;
$liste[1] = ( isset($liste[1]) ) ? $liste[1] : Null;
$champs1=$liste[0];
$champs2=$liste[1];
$champs1_=rtrim($champs1); // la fonction PHP rtrim() supprime les espaces (ou d'autres caractères) de fin de chaîne
$champs2_=rtrim($champs2); // fonction très important sinon toutes les informations insérés seront suivies de "\n\r".
// ceci a un impact direct sur l'opération de comptage du nombre total de chaque priorité...
// pour eviter qu'un champ "nom" du fichier soit vide
if ($champs1!='')
{
// requete et insertion ligne par ligne
// champs1 id en general dc on affecte pas de valeur
$query = "REPLACE INTO majPonctuelle (site_theorique,priorite_finale) VALUES('$champs1_','$champs2_')";
$result= mysql_query($query);
if (mysql_error())
{
echo 'ERREUR DE REQUETE SUR LA BASE';
fclose($fp); // fermeture du fichier
exit();
}
else
{
}
}
}
fclose($fp); // fermeture du fichier
/*==================
Fin de traitement du fichier maj.csv
//==================*/
}
}
}
}?> |
Ma fonction "traitementMajPonctuelle" effectue l'import de mon fichier "maj.csv" vers une BDD. Lorsque je fais appel à ma fonction "traitementMajPonctuelle" via le bouton "traitement", au bout d'un moment j'ai l'erreur suivante:
Code:
1 2 3 4 5 6 7 8 9 10 11
| [RPC Fault faultString="Channel disconnected" faultCode="Client.Error.DeliveryInDoubt" faultDetail="Channel disconnected before an acknowledgement was received"]
at mx.rpc::AbstractInvoker/http://www.adobe.com/2006/flex/mx/internal::faultHandler()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\rpc\AbstractInvoker.as:220]
at mx.rpc::Responder/fault()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\rpc\Responder.as:53]
at mx.rpc::AsyncRequest/fault()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\rpc\AsyncRequest.as:103]
at NetConnectionMessageResponder/channelDisconnectHandler()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\messaging\channels\NetConnectionChannel.as:646]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at mx.messaging::Channel/disconnectSuccess()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\messaging\Channel.as:1091]
at mx.messaging.channels::NetConnectionChannel/internalDisconnect()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\messaging\channels\NetConnectionChannel.as:163]
at mx.messaging.channels::AMFChannel/internalDisconnect()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\messaging\channels\AMFChannel.as:312]
at mx.messaging.channels::AMFChannel/statusHandler()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\messaging\channels\AMFChannel.as:382] |
Quand je teste ma fonction dans le Browser AmfPHP, j'ai l'erreur suivant:
Code:
1 2 3 4 5
| TypeError: Error #1009: Il est impossible d'accéder à la propriété ou à la méthode d'une référence d'objet nul.
at RawAmfService/readData()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/onComplete() |
Et toutes les lignes de mon fichier CSV ne sont pas importées. Quelqu'un saurait d'ou ça vient? Merci d'avance.