android-json-rpc,收到无效响应

时间:2011-10-28 12:35:56

标签: android json json-rpc

我正在尝试从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;
    }
}

2 个答案:

答案 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();