代码之家  ›  专栏  ›  技术社区  ›  GVillani82

无法从android应用程序调用REST ws

  •  0
  • GVillani82  · 技术社区  · 11 年前

    我使用以下代码调用web服务:

    protected Boolean doInBackground(Void... params) {
        int resCode;        
    
        String uri = "http://myServer:8080/api/activities/post";
        HttpPost request = new HttpPost(uri);
        request.setHeader("Content-Type", "application/json");
        request.setHeader("Accept","application/json");
    
        try{
            JSONStringer requestData = new JSONStringer()
               .object()
                    .key("codeActivity").value("XLT-900")
                    .key("firstValue").value("9")
                    .key("secondValue").value("3")
               .endObject();
    
            StringEntity entity = new StringEntity(requestData.toString());
            request.setEntity(entity);
    
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpResponse response = httpClient.execute(request); 
            resCode = response.getStatusLine().getStatusCode();
    
            if (resCode == 200) {
                return true;
            }else{
                Log.i("doInBackground","resCode: "+resCode);
                return false;
            }           
    
        }catch(Exception ex){
            ex.printStackTrace();
            return false;
        }
    
    }
    

    应该发送的json数据是(我已验证是否正确创建):

    {"codeActivity":"XLT-900","firstValue":"9","secondValue":"3"}
    

    但我总是得到这样的结果: 400:错误请求

    但如果我从POSTMAN或其他类似应用程序调用相同的ws,我将获得状态 200: Ok 这确保了工人们工作顺利。

    那么错误在哪里呢?

    1 回复  |  直到 11 年前
        1
  •  0
  •   GrIsHu    11 年前
    1. 是否确实要执行POST请求?
    2. 您是否缺少任何标头,如授权?
    3. 试试看:

      StringEntity se = new StringEntity(requestData.toString(), "UTF-8");
      se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));