2012-03-03 13 views
1

私はいくつかの方法でJava Webサービスを持っています。iOSからAndroidへのJson-RPCメソッド

Webサービスメソッドは、この形式は以下のとおりである。

@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); 
} 

Webサービスは、JSON-RPCコールを受信 とIOSで、Webサービスのメソッドを呼び出すことができ、クライアント側のコードは、この形態を有することができます。

-(void)asynchronousRPCWithMethod:(NSString *)method andParams:(NSArray *)params{ 

    NSLog(@"REMOTE PROCEDURE CALL ON %@", method); 
    self.rpcMethod = method; 

    NSMutableString *requestString = [[NSMutableString alloc] init]; 

    //setting method 
    [requestString appendFormat:@"{\"method\":\"%@\"", method]; 

    //setting params 
    [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:WEBSITELINK]] autorelease]; 

    [request setHTTPMethod:@"POST"]; 
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
    [request setHTTPBody:requestData]; 

    NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO]; 
    [conn scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes]; 
    [conn start]; 

    UIApplication *app = [UIApplication sharedApplication]; 
    app.networkActivityIndicatorVisible = YES; 

    if (conn) { 
     NSMutableData *data = [[NSMutableData alloc] init]; 
     self.receivedData = data; 
     [data release]; 
    } 
    else { 
     NSError *error = [NSError errorWithDomain:RPCErrorDomain 
              code:RPCErrorNoConnection 
             userInfo:nil]; 
     NSLog(@"*** error ***\n%@", error); 
     /** 
     * SENT A MESSAGE WITH A ERROR 
     */ 
     if ([self.delegate respondsToSelector:@selector(rpcDidFailWithError:)]) 
      [delegate rpcDidFailWithError:error]; 

    } 

} 

どのように私はAndroidで同じクライアント側の方法を実装できますか?

答えて

4

あなたはJSONの要求についての詳細情報が必要な場合はあなたが

JSONArray params = new JSONArray(); 
       params.put(""); 
       params.put(""); 
       .... 

       JSONObject rpcCall = new JSONObject(); 
       rpcCall.put("method", METODNAME); 
       rpcCall.put("params", params); 
       rpcCall.put("id", 1); 

ようなもので、適切な形でJSONを作り、HttpPost httppost

HttpResponse response = androidClient.execute(httppost); 

と、それをサーバに送信することがされている必要があり多くのチュートリアル。

関連する問題