Android-JSON-RPC, получая неверный ответ - PullRequest
0 голосов
/ 28 октября 2011

Я пытаюсь получить ответы от службы JSON-RPC на Android, сейчас я работаю на 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 ]

2 голосов
/ 18 мая 2012

Я проверил вашу систему, используя последнюю версию библиотеки.Это прекрасно работает.Вам нужно позвонить нам callInt («counter»), и все будет в порядке.

Вот код, который я использовал:

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: в этой новой версии вы используете параметры, отправляемые в виде массива, или JSONObject для отправки именованных параметров.Это возможно только при использовании версии 2.0 протокола JSON-RPC.

0 голосов
/ 28 января 2012

Это единственный JSON-RPC клиент, с которым мне удалось поработать с Zend_Json_Server на Android (и я пробовал несколько).

Убедитесь, что установленверсия до 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();
...