我正在尝试从Android上的JSON-RPC服务获得响应,我目前正在开发3.0 Honeycomb。
这是我正在使用的库: http://code.google.com/p/android-json-rpc/
我正在使用此JSON-RPC服务页面进行测试: http://www.raboof.com/projects/jayrock/demo.ashx
连接似乎有效,但我一直得到这个例外
org.alexd.jsonrpc.JSONRPCException: Invalid JSON response
我尝试了不同的方法和调查页面,但我总是得到相同的例外。我哪里错了?
相关代码如下。使用AsyncTask是因为3.0 Android不允许主流中的网络连接。提前谢谢。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
JSONHandler task = new JSONHandler();
task.execute(new String[] {"http://www.raboof.com/projects/jayrock/demo.ashx"});
}
private class JSONHandler extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
for (String url : urls) {
JSONRPCClient client = JSONRPCClient.create(url);
client.setConnectionTimeout(2000);
client.setSoTimeout(2000);
try {
client.call("counter");
} catch (JSONRPCException e) {
e.printStackTrace(); //Invalid JSON Response caught here
}
}
return null;
}
}
答案 0 :(得分:2)
我使用最新版本的库测试了您的系统。它很棒。你需要我们callInt(“计数器”),它会没问题。
我使用的代码是:
public JSONRPCClient client = JSONRPCClient.create("http://www.raboof.com/projects/jayrock/demo.ashx", JSONRPCClient.Versions.VERSION_2);
try{
int resInt = client.callInt("counter");
} catch (JSONException e) {
Log.i("JSON-RPC Client", e.toString());
}
我希望这可以提供帮助。
PS:使用这个新版本,您可以使用参数send作为数组,或使用JSONObject发送命名参数。只有在使用JSON-RPC协议的2.0版本时才可以这样做。
答案 1 :(得分:0)
这是我在Android上与Zend_Json_Server一起工作的唯一JSON-RPC客户端(我尝过了一些)。
确保将版本设置为2.0,因为除非您的服务器明确使用2.0规范,否则此客户端不起作用:
$server = new Zend_Json_Server();
$server->setClass('My_Class');
$server->getRequest()->setVersion("2.0");
if ('GET' == $_SERVER['REQUEST_METHOD']) {
// Indicate the URL endpoint, and the JSON-RPC version used:
$server->setTarget('/ajax.php')
->setEnvelope(Zend_Json_Server_Smd::ENV_JSONRPC_2);
// Grab the SMD
$smd = $server->getServiceMap();
// Return the SMD to the client
header('Content-Type: application/json');
echo $smd;
return;
}
$server->handle();