1

我有一个 java webservice,有一些方法。

网络服务方法采用这种形式:

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

webservice可以接收json-rpc调用,客户端代码可以调用webservice的方法,在iOS中有这样的形式:

-(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

1 回答 1

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

HttpPost httppost并将其发送到服务器

HttpResponse response = androidClient.execute(httppost);

如果您需要有关 JSON 请求的更多信息,有很多教程。

于 2012-07-12T02:08:42.813 回答