(Réglé) Traitement d'une requête très long (presque 20 secondes)

13

Réponses

  • Je t'avoue que le "débat" est ma foi fort très intéressant, et je prends note pour mes projets et expériences futurs, cependant mon problème de base n'est toujours pas réglé, donc je veut bien un peu d'aide s'il vous plait ^^


     




     


    AliGator je viens de penser à  un truc ma requête synchrone est posté dans le 1er message de ce sujet

     



    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
            self.title=@Mon compte;
        }
        
        loadingView = [[UIView alloc] initWithFrame:CGRectMake(75, 200, 170, 170)];
        loadingView.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5];
        loadingView.clipsToBounds = YES;
        loadingView.layer.cornerRadius = 10.0;
        
        actview = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
        actview.frame = CGRectMake(65, 20, actview.bounds.size.width, actview.bounds.size.height);
        [loadingView addSubview:actview];
        
        loadingLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 80, 140, 22)];
        loadingLabel.backgroundColor = [UIColor clearColor];
        loadingLabel.textColor = [UIColor whiteColor];
        loadingLabel.adjustsFontSizeToFitWidth = YES;
        loadingLabel.text = @Récupération de vos données. Veuillez patientez svp...;
        loadingLabel.lineBreakMode = NSLineBreakByWordWrapping;
        loadingLabel.numberOfLines=0;
        loadingLabel.textAlignment = NSTextAlignmentCenter;
        [loadingLabel sizeToFit];
        [loadingView addSubview:loadingLabel];
        [self.view addSubview:loadingView];
        [actview startAnimating];

        
        [self getMemberInfo];
        
        return self;
    }

    -(void)getMemberInfo
    {
        dispatch_queue_t downloadQueue = dispatch_queue_create("Get Member Infos", NULL);
        
        dispatch_async(downloadQueue, ^{
            NSData *result = [self searchMemberInfo];
            id strResult=nil;
            int cpt;
            NSError* error;
            strResult = [NSJSONSerialization JSONObjectWithData:result options:0 error:&error];
            
            _liste = [[NSMutableArray alloc]init];
            
            for(cpt=0; cpt<[strResult count];cpt++)
            {
                NSDictionary *dicoTemp = [strResult objectAtIndex:cpt];
                NSMutableArray* arrayTemp = [[NSMutableArray alloc]init];
                
                [arrayTemp addObject:[dicoTemp objectForKey:@myCivilitu]];                  //0
                [arrayTemp addObject:[dicoTemp objectForKey:@mySurname]];                       //1
                [arrayTemp addObject:[dicoTemp objectForKey:@myFirstName]];                    //2
                [arrayTemp addObject:[dicoTemp objectForKey:@myAdress]];                   //3
                [arrayTemp addObject:[dicoTemp objectForKey:@myZip]];                  //4
                [arrayTemp addObject:[dicoTemp objectForKey:@myCity]];                     //5
                [arrayTemp addObject:[dicoTemp objectForKey:@myTelephone]];                       //6
                [arrayTemp addObject:[dicoTemp objectForKey:@myEmail]];                     //7
    [_liste addObject:arrayTemp];
            }
            
            if(_liste.count!=0)
            {
            [actview stopAnimating];
            [loadingView removeFromSuperview];
                
            _civilite.text=[[_liste objectAtIndex:0]objectAtIndex:0];
            _nom.text=[[_liste objectAtIndex:0]objectAtIndex:1];
            _prenom.text=[[_liste objectAtIndex:0]objectAtIndex:2];
            _region.text=@"";
            _dep.text=@"";
            _adresse.text=[[_liste objectAtIndex:0]objectAtIndex:3];
            _cp.text=[[_liste objectAtIndex:0]objectAtIndex:4];
            _ville.text=[[_liste objectAtIndex:0]objectAtIndex:5];
            _tel.text=[[_liste objectAtIndex:0]objectAtIndex:6];
            _mail.text=email;
            }

        });
    }
    - (NSData *)searchMemberInfo {
        
        NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@%@", @http://www.mywebsite.org/getInfos.php]];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        
        NSString *requestFields = @"";
        requestFields = [requestFields stringByAppendingFormat:@pwd=%@&;", password];
        requestFields = [requestFields stringByAppendingFormat:@admail=%@", email];
        
        requestFields = [requestFields stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
        NSData *requestData = [requestFields dataUsingEncoding:NSUTF8StringEncoding];
        request.HTTPBody = requestData;
        request.HTTPMethod = @POST;
        
        NSHTTPURLResponse *response = nil;
        NSError *error = nil;
        NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
        if (error == nil && response.statusCode == 200) {
        }
        else {
        }
        
        return responseData;
    }

    _liste me retournait ça lors d'un NSLog:

     



    Maintenant le traitement asynchrone:

     



    - (void)searchMemberInfo {
        
        NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@%@", @http://www.monsite.org/getInfos.php]];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        
        NSString *requestFields = @"";
        requestFields = [requestFields stringByAppendingFormat:@pwd=%@&;", password];
        requestFields = [requestFields stringByAppendingFormat:@admail=%@", email];
        
        requestFields = [requestFields stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
        NSData *requestData = [requestFields dataUsingEncoding:NSUTF8StringEncoding];
        request.HTTPBody = requestData;
        request.HTTPMethod = @POST;
        
        NSHTTPURLResponse *response = nil;
        NSError *error = nil;
        [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc]init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
            if ([data length] >0 && error == nil)
            {
                
                // DO YOUR WORK HERE
                
                id strResult=nil;
                int cpt;
                NSError* erreur;
                strResult = [NSJSONSerialization JSONObjectWithData:data options:0 error:&erreur];
                
                _liste = [[NSMutableArray alloc]init];
                
                for(cpt=0; cpt<[strResult count];cpt++)
                {
                    NSDictionary *dicoTemp = [strResult objectAtIndex:cpt];
                    NSMutableArray* arrayTemp = [[NSMutableArray alloc]init];
                    
                    [arrayTemp addObject:[dicoTemp objectForKey:@laCivilite]];                  //0
                    [arrayTemp addObject:[dicoTemp objectForKey:@leNom]];                       //1
                    [arrayTemp addObject:[dicoTemp objectForKey:@lePrenom]];                    //2
                    [arrayTemp addObject:[dicoTemp objectForKey:@lAdresse]];                   //3
                    [arrayTemp addObject:[dicoTemp objectForKey:@leCodePostal]];                  //4
                    [arrayTemp addObject:[dicoTemp objectForKey:@laVille]];                     //5
                    [arrayTemp addObject:[dicoTemp objectForKey:@leTelephone]];                       //6
                    [arrayTemp addObject:[dicoTemp objectForKey:@lEmail]];                     //7
                    [arrayTemp addObject:[dicoTemp objectForKey:@type]];                      //8
                }
                
                if(_liste.count!=0)
                {
                    //NSLog(@liste: %@", _liste);
                    
                    [actview stopAnimating];
                    [loadingView removeFromSuperview];
                    
                    _civilite.text=[[_liste objectAtIndex:0]objectAtIndex:0];
                    _nom.text=[[_liste objectAtIndex:0]objectAtIndex:1];
                    _prenom.text=[[_liste objectAtIndex:0]objectAtIndex:2];
                    _adresse.text=[[_liste objectAtIndex:0]objectAtIndex:3];
                    _cp.text=[[_liste objectAtIndex:0]objectAtIndex:4];
                    _ville.text=[[_liste objectAtIndex:0]objectAtIndex:5];
                    _tel.text=[[_liste objectAtIndex:0]objectAtIndex:6];
                    _mail.text=email;
                }

                
            }
            else if ([data length] == 0 && error == nil)
            {
                NSLog(@Nothing was downloaded.);
            }
            else if (error != nil){
                NSLog(@Error = %@", error);
            }
        }];
    }


  • LarmeLarme Membre

    Pourrais-tu rappeler quel est ton " dernier soucis " ?


    Parce que je vois beaucoup de lignes de code, et j'ai l'impression que certaines pourraient être occultées...


    Genre, est-ce qu'on a besoin de lire toutes les lignes [arrayTemp addObject:XxX] ? La mise en place de la loading view ?




  • Bah en fait ça me chagrine, car mes labels restent avec la valeur par défaut, donc je me suis dit que l'erreur venait peut être de la mais visiblement c'est pas le cas.


     


    Je continue de chercher, si jamais vous voyez faites moi signe.


     


    Ps: J'ai juste modifié et changé en "[self searchMemberInfo];" dans initWithNibName


     


     


     


    Edit: Chose étonnante ma liste est tout le temps vide, bizarre quand j'utilisais la manière synchrone avec une manière identique ça fonctionnait


     


    Edit 2: Bon visiblement il ne rentre jamais dans la boucle for


     


    Edit 3: ma variable strResult est vide, WTF ?


     


    Edit 4: Si dans strResult, je remplace "data" par "requestData" ça m'affiche null


     


    Edit 5: Data m'affiche <5b5d>




     


    Voila le dernier problème en date, et merci de chercher à  m'aider Larme ;)

  • NasatyaNasatya Membre
    mai 2014 modifié #65

    Dans ton for du deuxième block de code celui de l'asynchrone tu fais pas le


     


    - [_list addObject:arrayTemp]


     


    je sais pas si ça peut jouer mais vu que tu fais un test sur sa taille par le suite je penses que ça doit pas aider quand même.


    Enfin je penses que tu peux arranger tout ça genre la boucle for ne sert a rien vu que tu prend que l'index 0 de ton mutable array si je devais corriger un truc rapidement dans ton code ça serait remplacer ça :



    _liste = [[NSMutableArray alloc]init];

    for(cpt=0; cpt<[strResult count];cpt++)
    {
    NSDictionary *dicoTemp = [strResult objectAtIndex:cpt];
    NSMutableArray* arrayTemp = [[NSMutableArray alloc]init];

    [arrayTemp addObject:[dicoTemp objectForKey:@laCivilite]]; //0
    [arrayTemp addObject:[dicoTemp objectForKey:@leNom]]; //1
    [arrayTemp addObject:[dicoTemp objectForKey:@lePrenom]]; //2
    [arrayTemp addObject:[dicoTemp objectForKey:@lAdresse]]; //3
    [arrayTemp addObject:[dicoTemp objectForKey:@leCodePostal]]; //4
    [arrayTemp addObject:[dicoTemp objectForKey:@laVille]]; //5
    [arrayTemp addObject:[dicoTemp objectForKey:@leTelephone]]; //6
    [arrayTemp addObject:[dicoTemp objectForKey:@lEmail]]; //7
    [arrayTemp addObject:[dicoTemp objectForKey:@type]]; //8
    //Ligne de code manquante
    }

    if(_liste.count!=0)
    {
    //NSLog(@liste: %@", _liste);

    [actview stopAnimating];
    [loadingView removeFromSuperview];

    _civilite.text=[[_liste objectAtIndex:0]objectAtIndex:0];
    _nom.text=[[_liste objectAtIndex:0]objectAtIndex:1];
    _prenom.text=[[_liste objectAtIndex:0]objectAtIndex:2];
    _adresse.text=[[_liste objectAtIndex:0]objectAtIndex:3];
    _cp.text=[[_liste objectAtIndex:0]objectAtIndex:4];
    _ville.text=[[_liste objectAtIndex:0]objectAtIndex:5];
    _tel.text=[[_liste objectAtIndex:0]objectAtIndex:6];
    _mail.text=email;
    }

    par ça : 



    strResult = [NSJSONSerialization JSONObjectWithData:data options:0 error:&erreur];
    NSDictionary *dicoTemp = [strResult objectAtIndex:0];
    _civilite.text = [dicoTemp objectForKey:@laCivilite];
    _nom.text = [dicoTemp objectForKey:@leNom];
    _prenom.text = [dicoTemp objectForKey:@lePrenom];
    _adresse.text = [dicoTemp objectForKey:@lAdresse];
    _cp.text = [dicoTemp objectForKey:@leCodePostal];
    _ville.text = [dicoTemp objectForKey:@laVille];
    _tel.text = [dicoTemp objectForKey:@laCivilleTelephonete];
    [actview stopAnimating];
    [loadingView removeFromSuperview];

  • Le addObject, est bien effectuée, seulement en voulant effaçant certaines données inutiles de mon code pour vous je l'ai supprimé, mais il est bien présent dans le code ;)


     


    Sinon j'ai bien pris note de la modification suggérée et je vais la tester et te ferais un retour.


     


    En tout cas merci à  toi pour ces conseils et réponses


  • Bon il a pas l'air d'aimer le code que tu m'a envoyé. Je suis en synchrone (en attendant de trouver pourquoi le asynchrone déconne), et mon code passait très bien hier, et la avec ton code il me sors ça


     



     


    2014-05-22 10:16:11.593 App[828:3c03] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 0 beyond bounds for empty array'


    *** First throw call stack:


    (


    0   CoreFoundation                      0x0000000101dd2495 __exceptionPreprocess + 165


    1   libobjc.A.dylib                     0x0000000101b3199e objc_exception_throw + 43


    2   CoreFoundation                      0x0000000101d8ae3f -[__NSArrayI objectAtIndex:] + 175


    3   App                                          0x000000010001bbb4 __23-[Profil getMemberInfo]_block_invoke + 260


    4   libdispatch.dylib                   0x00000001021f1851 _dispatch_call_block_and_release + 12


    5   libdispatch.dylib                   0x000000010220472d _dispatch_client_callout + 8


    6   libdispatch.dylib                   0x00000001021f3dcf _dispatch_queue_drain + 481


    7   libdispatch.dylib                   0x00000001021f3b94 _dispatch_queue_invoke + 112


    8   libdispatch.dylib                   0x00000001021f49fc _dispatch_root_queue_drain + 81


    9   libdispatch.dylib                   0x00000001021f4d12 _dispatch_worker_thread2 + 40


    10  libsystem_pthread.dylib             0x0000000102551ef8 _pthread_wqthread + 314


    11  libsystem_pthread.dylib             0x0000000102554fb9 start_wqthread + 13


    )


    libc++abi.dylib: terminating with uncaught exception of type NSException


  • NasatyaNasatya Membre
    mai 2014 modifié #68

    Oui l'erreur te dis que ton array est vide il faut juste ajouter une condition if (array non vide) {} ça devrait le faire pour ton code je viens de le tester chez moi en me faisant un script en php rapidos sur mon serveur et il marche très bien le problème vient pas de la. Moi je te conseille de log le strResult pour voir ce qu'il contient et toujours de sniffer la connexion via "Charles" ou un autre pour voir ce qui se passe c'est pas du temps perdu si tu connais pas le logiciel car c'est assez pratique de savoir s'en servir.


     


    en tout cas vu ton message d'erreur je penses que ton strResult est vide essais de faire un :



    NSString *dataString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@data = %@", dataString); 

    En gros tu devrais recevoir un truc du genre de 



    [{"laCivilite":"Mr","leNom":"Son Nom","lePrenom":"Son Prenom","lAdresse":"Adresse","leCodePostal":"11111","laVille":"Sa Ville","leTelephone":"0101010101","lEmail":"son@mail.com","type":"Son Type"}]

    Si il te renvoies pas ce que tu attends c'est a dire un array sous forme de json c'est que ton appel ne marche pas comme tu le souhaites.


     


    Si il te renvoies ce que tu souhaites alors c'est la façon de gérer les données reçus qui est mauvaise.


     


    Log aussi requestFields pour le cas où.


     


    J'espère que ça aidera.


  • Ben77650Ben77650 Membre
    mai 2014 modifié #69

    Bon c'est bon merci, ça n'empeche que mon traitement est toujours long (presque 20 secondes)


  • NasatyaNasatya Membre
    mai 2014 modifié #70

    Un problème à  la fois. Déjà  il faut que tu règle le souci du pass qui est null et la tu auras tes données qui remontent et ça sera déjà  plus simple pour le reste (puis on verra si y a des gains de performance aussi). Ceci dis il est quand même un peu étrange qu'il n'y ai pas un système de retour de message d'erreur.


     


    Ensuite pour revenir sur l'autre point de un la notation pointé n'est pas trop utilisé en objective c bien que ça commence a venir peu à  peu il me semble.


     


    Moi je serais toi je tenterais un 



    if ([strResult count] > 0)
    {
    //Le code ici
    }

    Tu vas voir ça va faire des miracles.


  • J'ai édité juste quand tu postais, me demande pas pourquoi, ça remarche comme par miracle, il me récupère mail et mdp alors que je n'ai rien touché.


     


    De quel autre point parle tu ?


  • Ben vu que tu as viré tout ton message on voit plus trop de quoi je parles effectivement bref tu faisais un 



    if (dicoTemp.count>0)
    {
    //Code ici
    }

    Or ça ne fonctionne pas parce que tu fais un : 



    NSDictionary *dicoTemp=[strResult objectAtIndex:0]; // ici strResult (qui est un array en passant pas une string) est vide == plantage ici
    //Donc ton test arrive trop tard
    if (dicoTemp.count=0) //Ton code n'arrive jamais ici.
    {

    }

    Ce que tu aurais pu debugger facilement en créant un breakpoint qui léve toutes les exceptions.


  • AliGatorAliGator Membre, Modérateur
    Ben merci d'arrêter de faire des EDIT de partout, c'est très difficile à  suivre.
  • Vaut mieux faire 5 messages à  la suite plutot que 5 edit ? Okay je prends note.


     


    Bref ma requete est toujours aussi longue a s'executer, et le traitement asynchrone ne marche toujours pas :/


  • NasatyaNasatya Membre
    mai 2014 modifié #75

    Pour ton souci de 20 secondes essais de changer le 



    [NSOperationQueue alloc] init]

    par 



    [NSOperationQueue MainQueue]

  • AliGatorAliGator Membre, Modérateur

    Vaut mieux faire 5 messages à  la suite plutot que 5 edit ? Okay je prends note.
     
    Bref ma requete est toujours aussi longue a s'executer, et le traitement asynchrone ne marche toujours pas :/

    Clairement oui car (1) les gens ne voient pas forcément les "EDIT" (ils ont peut-être chargé la page et sont en train de lire ton message avant que tu n'aies rajouté ton EDIT, et sont en train de répondre à  ton message avant l'EDIT, etc) et (2) sinon on perd l'histoirique et on a des messages croisés impossible à  suivre. 5 messages à  la suite c'est bien mieux. Ou alors prendre le temps de chercher de ton côté et faire tes tests avant de poster à  la va-vite pour éditer ensuite, c'est encore mieux.
  • Bon en fait en asynchrone je le répète il me met "Récupération de vos données" et ne m'affiche en aucun cas les données, j'ai juste le texte de base du label


  • Ben77650Ben77650 Membre
    mai 2014 modifié #78

    Pourtant quand je fais un log de requestFields, il me récupère bien le mail et le mot de passe.


  • En revanche mon strResult est null


  • Et le log des data? La on parle dans le vide je sais pas ce que tu veux ce qui marche ce qui marche pas je sais pas a quoi ressemble le code en fait on ne sait pas ou tu en est c'est pas facile de t'aider.


     


    Personnellement la aussi je le répéte j'ai fait un bouchon rapide sur un serveur et j'ai copié collé ton code la seule chose que j'ai modifié c'est évidemment l'url pour que ça pointe sur mon serveur et j'ai viré les textField parce l'interface j'espère qu'elle fonctionne. Bref ça fonctionne parfaitement chez moi j'ai changé ensuite le NSOperationQueue et affiché un de mes retour dans un label pour voir et c'est relativement réactif de l'ordre du dixième de seconde (en même temps j'envoie presque rien) 


     


    Bref le code que tu nous as donné plus haut fonctionne si c'est pas le cas c'est que tu as changé un truc.


    En tout cas ce que je vois la c'est que seul un debug ligne par ligne te diras quel variable ne contient pas ce qu'elle devrait contenir et te donnera une piste sur comment réagir la c'est pas du tout un souci sur un point technique mais bien un debugage pur et dure.


  • AliGatorAliGator Membre, Modérateur
    Ouais enfin quand je disais de faire des posts séparés...

    Ou alors prendre le temps de chercher de ton côté et faire tes tests avant de poster à  la va-vite pour éditer ensuite, c'est encore mieux.

    Prend peut-être un peu le temps de rédiger ton post et de mettre de suite tout ce que tu veux dedans plutôt que de faire un post par phrase quand même.
  • Alors la seul chose a dire sur le strResult est null est que ton "data" n'est pas bon tu es censé faire une vérification dessus donc tu ne devrais pas pouvoir avoir un strResult à  null.


     



     


     



    Return Value

    A Foundation object from the JSON data in data, or nil if an error occurs.



     


    C'est la doc de JSONObjectWithData tu dois avoir une erreur dans ta variable "erreur"


  • Ben77650Ben77650 Membre
    mai 2014 modifié #83

    Bon il y a de l'amélioration, puisqu'il ne cherche plus, il m'affiche mes labels vide.


     


    Voici mon code:



    - (void)getMemberInfo {
        
        NSURL *url = [NSURL URLWithString:@http://www.mywebsite.org/getInformation.php];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

        NSString *requestFields = [NSString stringWithFormat:@password=%@&;email=%@",password,email];
        NSLog(@password=%@ & email=%@",password,email);
    //    NSString *requestFields = @"";
    //    requestFields = [requestFields stringByAppendingFormat:@pwd=%@&;", password];
    //    requestFields = [requestFields stringByAppendingFormat:@admail=%@", email];
        
        requestFields = [requestFields stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
        NSData *requestData = [requestFields dataUsingEncoding:NSUTF8StringEncoding];
        request.HTTPBody = requestData;
        request.HTTPMethod = @POST;
        
        NSError *error = nil;
        [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc]init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
            NSLog(@Réponse: %@",response);
            NSLog(@Erreur: %@",error);
            NSLog(@Erreur de connexion: %@",connectionError);
            NSLog(@Données: %@",data);
            if ([data length] >0 && error == nil)
            {
            id strResult=nil;
                NSError* erreur;
                strResult = [NSJSONSerialization JSONObjectWithData:requestData options:0 error:&erreur];
                
                NSDictionary *dicoTemp = [strResult objectAtIndex:0];
                    _civilite.text=[dicoTemp objectForKey:@macivilite];
                    _nom.text=[dicoTemp objectForKey:@nom];
                    _prenom.text=[dicoTemp objectForKey:@monprenom];
                    _region.text=@"";
                    _dep.text=@"";
                    _adresse.text=[dicoTemp objectForKey:@monadresse];
                    _cp.text=[dicoTemp objectForKey:@moncode_pos];
                    _ville.text=[dicoTemp objectForKey:@maville];
                    _tel.text=[dicoTemp objectForKey:@montel];
                    _mail.text=email;
                    
                    [actview stopAnimating];
                    [loadingView removeFromSuperview];           
            }
            else if ([data length] == 0 && error == nil)
            {
                NSLog(@Nothing was downloaded.);
            }
            else if (error != nil){
                NSLog(@Error = %@", error);
            }
        }];
    }

    Et voila mes Logs:


     



    2014-05-22 13:41:54.297 App[1564:60b] pwd=mdp & admail=aadresse@fai.com


    2014-05-22 13:41:54.421 App[1564:1303] Réponse: <NSHTTPURLResponse: 0x1093c09e0> { URL: http://www.mywebsite.org/getInformation.php } { status code: 200, headers {


        Connection = close;


        "Content-Type" = "text/html";


        Date = "Thu, 22 May 2014 11:41:54 GMT";


        Server = Apache;


        "Transfer-Encoding" = Identity;


        "X-Powered-By" = PleskLin;


    } }


    2014-05-22 13:41:54.422 App[1564:1303] Erreur: (null)


    2014-05-22 13:41:54.422 App[1564:1303] Erreur de connexion: (null)


    2014-05-22 13:41:54.422 App[1564:1303] Données: <some datas>


     



  • muqaddarmuqaddar Administrateur

    Déjà , il renvoie du HTML et pas du JSON.


    Ensuite, faudrait voir les logs côté serveur (la requête reçue) et voir pourquoi ça ne semble pas authentifier.


  • Pour tous ceux qui me conseillaient d'utiliser Charles et qui doute de la fiabilité de la requête, je viens de discuter avec mon collègue, le serveur web et la requête marche très bien, et la requête se fait en moins d'une demi seconde sur Android ;)


  • Ok j'ai trouvé tu appel "requestData" dans :



    strResult = [NSJSONSerialization JSONObjectWithData:requestData options:0 error:&erreur];

    Or c'est le résultat du block que tu veux donc "data" :



    strResult = [NSJSONSerialization JSONObjectWithData:data options:0 error:&erreur];
  • muqaddarmuqaddar Administrateur


    Pour tous ceux qui me conseillaient d'utiliser Charles et qui doute de la fiabilité de la requête, je viens de discuter avec mon collègue, le serveur web et la requête marche très bien, et la requête se fait en moins d'une demi seconde sur Android ;)




     


    Je doutais de la construction de la requête et c'est toujours super intéressant de voir les logs du serveur pour vérifier les paramètres reçues, et les réponses envoyées. Du moins, je m'en sers tout le temps en ruby... en php, je ne sais pas comment ça se passe.

  • Et non je te conseillais pas charles pour voir ce que le serveur te renvoyais mais bien pour voir le contenu de ta requête... Et si je me réfères à  tes messages au dessus tu envoyais bien un password égale à  null. Quand tu fais des requêtes sur un serveur premier point a vérifier "l'url est elle bonne" deuxième "les paramêtres sont ils bons" troisième "le serveur répond ou non?" après tu peux vérifier ton code. Pour moi ça revient a regarder si ton câble ethernet est branché avant de démonté ton réseau quand tu as plus internet sur ta machine.


     


    Quand au temps d'execution de la requête d'autre outils sont fait pour ça et on a compris que ça ne venait pas de ça mais bien du fait que tu fasses des actions sur l'interface dans des threads secondaire. Bref déjà  concentre toi sur le fait de récupérer tes données après on verra pour ce qui était ou pas des bonnes idées.


  • Bien vu effectivement Nasatya ça fonctionne correctement ;)


     


     


    Cependant le souci est toujours la, même en asynchrone ça me prends 20 secondes, alors que sur Android c'est moins d'une seconde.


  • muqaddarmuqaddar Administrateur

    La question c'est qu'est-ce qui prend 20 secondes... et pour ça tu as les outils dont a parlé plus haut.


  • Réference a quelques messages au dessus 


    Change ton 



    [[NSOperationQueue alloc] init]

    Par



    [NSOperationQueue mainQueue]

    Dans l'appel asynchrone ça devrait le faire


Connectez-vous ou Inscrivez-vous pour répondre.