2011-10-28 2 views
0

Android에서 JSON-RPC 서비스의 응답을 얻으려고하고 있습니다. 현재 3.0 Honeycomb를 개발 중입니다. android-json-rpc, 잘못된 응답 수신

내가 사용하고있는 라이브러리입니다 : 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.0 스펙을 사용하지 않으면 작동하지 않는, 또한 2.0 버전을 설정해야합니다 . 그것은 훌륭하게 작동합니다. 우리에게 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()); 
} 

난이 도움이 될 수 있습니다 희망 :

내가 사용하는 코드가있다.

추신 :이 새 버전에서는 매개 변수를 배열로 사용하거나 JSONObject를 사용하여 명명 된 매개 변수를 전송합니다. 이는 버전 2.0의 JSON-RPC 프로토콜을 사용하는 경우에만 가능합니다.

0

이 내가 안드로이드에 Zend_Json_Server 작업을 얻을 수 있었던 유일한 JSON-RPC 클라이언트 (그리고 나는 몇 가지를 시도했습니다). 나는 도서관의 마지막 버전을 사용하여 시스템을 테스트 한

$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(); 
관련 문제