android-json-rpc, geçersiz yanıt alıyor

Android'de bir JSON-RPC Hizmetinden yanıt almaya çalışıyorum, şu anda 3.0 Honeycomb üzerinde geliştiriyorum.

This is the library I am using: http://code.google.com/p/android-json-rpc/

and I am using this JSON-RPC service page for testing: http://www.raboof.com/projects/jayrock/demo.ashx

Bağlantı işe yarıyor gibi görünüyor, ancak bu Özel Durum'u almaya devam ediyorum

org.alexd.jsonrpc.JSONRPCException: Invalid JSON response

Farklı yöntemler ve anket sayfaları denedim, ancak her zaman aynı İstisna'yı elde ediyorum. Nerede yanlış gidiyorum?

İlgili kod aşağıdadır. AsyncTask kullanılır çünkü 3.0 Android, ana akıştaki ağ bağlantılarına izin vermediğinden. Şimdiden teşekkürler.

 @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 {

    @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 cevap

Sisteminizi kütüphanenin son sürümünü kullanarak test ettim. Harika çalışıyor. Bizi arayın ("sayaç") ve tamam olacak.

Kullandığım kod var:

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());
}

Umarım bu yardımcı olabilir.

Not: Bu yeni sürümde, bir dizi olarak gönderilen parametreleri veya adlandırılmış parametreleri göndermek için bir JSONObject kullanarak kullanırsınız. Bu sadece JSON-RPC protokolünün 2.0 sürümü kullanılıyorsa mümkündür.

2
katma

Bu, alabildiğim tek JSON-RPC müşterisidir. Android'de Zend_Json_Server ile çalışmak (ve birkaç denedim).

Sunucunuzu açıkça 2.0 belirtimini kullanmadığı sürece, bu istemci çalışmadığından, sürümü 2.0 olarak ayarladığınızdan emin olun:

    $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();
0
katma