从 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”App