Autore Topic: Non riesco a ottenere il json di risposta dopo una chiamata json-RPC  (Letto 910 volte)

Offline AndreaF

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S
Ho un metodo web nella seguente forma


Codice: [Seleziona]
@Webservice(paramNames = {"email", "password", "stayLogged", "idClient"},
public Response startSession(String email, String password, Boolean stayLogged, String idClient) throws Exception {
    boolean rC = stayLogged != null && stayLogged.booleanValue();
    UserService us = new UserService();
    User u = us.getUsersernamePassword(email, password);
    if (u == null || u.getActive() != null && !u.getActive().booleanValue()) {
        return ErrorResponse.getAccessDenied(id, logger);
    }
    InfoSession is = null;
    String newKey = null;
    while (newKey == null) {
        newKey = UserService.md5(Math.random() + " " + new Date().getTime());
        if (SessionManager.get(newKey) != null) {
            newKey = null;
        } else {
            is = new InfoSession(u, rC, newKey);
            if (idClient != null && idClient.toUpperCase().equals("ANDROID")) {
                is.setClient("ANDROID");
            }
            SessionManager.add(newKey, is);
        }
    }
    logger.log(Level.INFO, "New session started: " + newKey + " - User: " + u.getEmail());
    return new Response(new InfoSessionJson(newKey, is), null, id);
}


Sto provando ad accedervi inviando un json sul link del server

e dovrei ricevere guardando il metodo un json in risposta, ma non ricevo nulla

e non riesco a capire se il problema è nel json che non ha una sintassi corretta o è dovuto ad altro

il json che invio da come ho visto sul debugger, è tale e quale a quello postato qua

Codice: [Seleziona]
{"method":"startSession",
"params": { "email": "testmail@test.it",
            "password": "1234",
            "stayLogged": "1",
            "idClient": "ANDROID"
           }
}

Se questo json è corretto forse sto sbagliando la procedura per "catturare" i parametri di risposta che mi da il server e gradirei se qualcuno mi aiutasse indicandomi come fare all'atto pratico.
« Ultima modifica: 03 Marzo 2012, 12:55:09 CET da AndreaF »

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Non riesco a ottenere il json di risposta dopo una accesso RPC
« Risposta #1 il: 02 Marzo 2012, 18:26:40 CET »
0
manca una graffa di chiusura alla fine nel json
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline AndreaF

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S
Re:Non riesco a ottenere il json di risposta dopo una accesso RPC
« Risposta #2 il: 03 Marzo 2012, 12:32:07 CET »
0
manca una graffa di chiusura alla fine nel json

ho dimenticato di copiarla, ma comunque ora mi sta venendo il dubbio che l'errore sia altrove


guardando il debugger ho notato che

Codice: [Seleziona]
StringEntity stringEntity = new StringEntity(oggettoJson.toString());
                                            httpost.setEntity(stringEntity);
                                            httpost.setHeader("Accept", "application/json");
                                            httpost.setHeader("Content-type", "application/json");


se uso il blocco di codice *1

Codice: [Seleziona]
HttpResponse response = mClient.execute(httppost);
l'esecuzione del metodo va avanti ma non ricevo nessuna risposta dal webservice in esame

il codice che uso per catturare i parametri di risposta è


Codice: [Seleziona]
    if(response != null){
                                   
                                                BufferedReader reader = new BufferedReader(new InputStreamReader(is));
                                                StringBuilder sb = new StringBuilder();
                                                System.out.println("\nLa risposta è:\n"+sb);
                                                String line = null;
                                                loggato=true;
                                        try {
                                                System.out.println("\nSecondo blocco try");
                                                        while ((line = reader.readLine()) != null) {
                                                sb.append(line + "\n");
                                                        }
                                                        System.out.println("\nLa risposta è:\n"+line);
                                                        String result=sb.toString();
                                                    JSONArray jArray = new JSONArray(result);
                                            } catch (IOException e) {
                                                    e.printStackTrace();
                                            }


se uso invece al posto del blocco di codice *1 uso

Codice: [Seleziona]
ResponseHandler responseHandler = new BasicResponseHandler();
HttpResponse response = mClient.execute(httpost, responseHandler);       

l'esecuzione del codice si ferma con il messaggio "address not supported by protocol" dopo questo punto




è la prima volta che mi trovo a fare un'operazione di questo tipo su android e non so che pesci pigliare


su ios


con questo metodo riportato qui in objectiveC
Codice: [Seleziona]
(void)asynchronousRPCWithMethod:(NSString *)method andParams:(NSArray *)params{
   
    NSLog(@"Chiamata RPC su %@", method);
    self.rpcMethod = method;
   
    NSMutableString *requestString = [[NSMutableString alloc] init];
   
    //setto il metodo
    [requestString appendFormat:@"{\"method\":\"%@\"", method];
   
    //setto i parametri
    [requestString appendString:@", \"params\":["];
   
    int max = [params count];
    int c = 0;
   
    for (NSString *str in params){
        c++;
        [requestString appendFormat:@"\"%@\"", str];
        if (c==max){
           
        }
        else{
            [requestString appendString:@", "];
        }
    }
   
    [requestString appendFormat:@"], \"id\":1}"];



NSLog(@"Request:\n%@", requestString);
   
    NSData *requestData = [NSData dataWithBytes:[requestString UTF8String] length:[requestString length]];
   
    [requestString release];
   
    NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:LINKSITO]] autorelease];
   
    [request setHTTPMethod:@"POST"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [request setHTTPBody:requestData];





la comunicazione funziona,



Su android non riesco a farla comunicare :(



Chiunque mi darà un aiuto utile a venire a capo del problema verrà incluso nei crediti dell'app una volta terminata, e includerò un link a questo forum come ulteriore ringraziamento.
« Ultima modifica: 03 Marzo 2012, 17:18:30 CET da AndreaF »

Offline AndreaF

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S
Re:Non riesco a ottenere il json di risposta dopo una chiamata json-RPC
« Risposta #3 il: 06 Marzo 2012, 02:30:12 CET »
0
problema risolto anche qua il problema era dovuto a un maledetto settaggio errato dell'header