#android #json #json-rpc
#Android #json #json-rpc
Вопрос:
Я пытаюсь получить ответы от службы 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;
}
}
Ответ №1:
Я протестировал вашу систему, используя последнюю версию библиотеки. Это отлично работает. Вам нужно позвонить нам («счетчик»), и все будет в порядке.
Вот код, который я использовал:
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.
Ответ №2:
Это единственный клиент 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();