从android发送json数组作为post参数

时间:2011-03-28 11:32:55

标签: java android curl httpclient

我需要通过post方法从android发送json数组作为参数...并接收jsonarray作为响应..

在java中应该转换下面提到的请求.. ??

curl -H "X-OpenSRF-service: open-ils.search" --data 'osrf-msg=[{"__p" : {"threadTrace" : 0, "payload" : { "__c" : "osrfMethod","__p" : { "params" :"30007004981493","method" : "open-ils.search.biblio.find_by_barcode"}},"type" : "REQUEST","locale" : "en-US"},"__c" : "osrfMessage"} ]' http://localhost/osrf-http-translator

我这样做了..

    HttpParams httpParams = new BasicHttpParams();

    HttpClient client = new DefaultHttpClient(httpParams);

    HttpPost httpost = new HttpPost("http://"+hostname+"/osrf-http-translator");
   // httpost.setHeader("Accept", "application/json");
 //    httpost.setHeader("Content-type", "application/json");
    httpost.setHeader("X-OpenSRF-service", "open-ils.search");
    System.out.println("2");
    JSONObject data = new JSONObject();
    JSONObject _p = new JSONObject();
    JSONObject _p1 = new JSONObject();
    JSONObject osrfmsg = new JSONObject();
    HttpResponse response = null;
    try {
        _p.put("params",bookid);//"30007004981493"
        _p.put("method","open-ils.search.biblio.find_by_barcode");
        JSONObject payload = new JSONObject();
        payload.put("_c", "osrfMethod");
        payload.put("_p", _p);
        _p1.put("threadTrace",0);
        _p1.put("payload", payload);
        _p1.put("locale","en-US" );
        _p1.put("type", "REQUEST");
        osrfmsg.put("_c","osrfMessage");
        osrfmsg.put("_p",_p1);
        data.put("osrf-msg",osrfmsg);   


    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

          JSONArray osrfmsg2=new JSONArray();
    osrfmsg2.put(osrfmsg);

        httpost.getParams().setParameter("osrf-msg",osrfmsg2);
   response = client.execute(httpost);
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));

StringBuilder builder = new StringBuilder();
        for (String line = null; (line = reader.readLine()) != null;) 
        {     builder.append(line).append("\n"); } 

        JSONTokener tokener = new JSONTokener(builder.toString());
        JSONArray finalResult = new JSONArray(tokener); 

但是我无法获得json数组...

还有其他方法吗?

1 个答案:

答案 0 :(得分:0)

您正在构建一个JSONObject作为参数

尝试使用

JSONArray作为您的有效负载对象。

 JSONArray payload = new JSONArray();

使用集合。 希望有所帮助。 您发送的上下文类型也不是JSON,它是表单编码的