从 iOS 到 Android 的 Json-RPC 方法

Posted

技术标签:

【中文标题】从 iOS 到 Android 的 Json-RPC 方法【英文标题】:Json-RPC Method from iOS to Android 【发布时间】:2012-03-03 12:32:41 【问题描述】:

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

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 上实现相同的客户端方法???

【问题讨论】:

【参考方案1】:

你必须以适当的形式制作 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 请求的信息,这里有很多教程。

【讨论】:

以上是关于从 iOS 到 Android 的 Json-RPC 方法的主要内容,如果未能解决你的问题,请参考以下文章

我想把EC公钥从android导出到iOS,最好的方法是什么?

是否可以将音乐从 Android/iOS 设备流式传输到桌面设备?

从 iOS 到 Android 的 Json-RPC 方法

拉拢苹果用户,谷歌推出“从iOS转移到Android”App

Android-从Basic IO到NIO内核机制(原理篇)

Android-从Basic IO到NIO内核机制(原理篇)