发布webservice无法在Android中运行

时间:2016-02-06 13:55:56

标签: android web-services

我是Android和webservices的新手。我从未使用过post webservice。尝试如下,但它既没有成功也没有失败。

如果我使用高级休息客户端chrome扩展程序,我可以测试并且webservice工作正常,只需花费很多时间。

当尝试从代码运行时,它会立即显示 - 在调用webservices之后 - toast msg - >表示它没有调用Web服务。

花了2天但没有运气。有什么建议?

 public void borrowBook(String barCode, String patronId)
    {
        final int DEFAULT_TIMEOUT = 200000 * 1000000000;

        // Make RESTful webservice call using AsyncHttpClient object
        AsyncHttpClient client = new AsyncHttpClient();
        client.setTimeout(DEFAULT_TIMEOUT);

        progress.setMessage("Please Wait...");
        progress.setIndeterminate(false);
        progress.setCancelable(false);
        progress.show();

        RequestParams params = new RequestParams();

        Toast.makeText(getActivity().getApplicationContext(), "B4 calling webservice", Toast.LENGTH_LONG).show();

        client.post("http://43.555.6.111:8081/SIPServices/SIc.svc/Checkout?barcode=B12&patron=thi", new TextHttpResponseHandler() {
                    @Override
                    public void onSuccess(int i, Header[] headers, String response) {
                        Toast.makeText(getActivity().getApplicationContext(), "Response: " + response, Toast.LENGTH_LONG).show();
                        Log.d("TAG", "Success");
                    }

                    @Override
                    public void onFailure(int statusCode, Header[] headers, String response, Throwable error) {
                        Toast.makeText(getActivity().getApplicationContext(), "Status code :" + statusCode + "errmsg : " + error.getMessage(), Toast.LENGTH_LONG).show();
                        Toast.makeText(getActivity().getApplicationContext(), "Unexpected Error occcured! [Most common Error: Device might not be connected to Internet or remote server is not up and running]", Toast.LENGTH_LONG).show();
                        Log.d("TAG", "Failure");
                    }

                }
        );
        progress.dismiss();
        Toast.makeText(getActivity().getApplicationContext(), "After calling webservice", Toast.LENGTH_LONG).show();
    }

2 个答案:

答案 0 :(得分:1)

您不会将参数设置为任何内容,也不会发送它们。 另外,您尝试拨打电话,但网址包含获取参数:" http://43.555.6.111:8081/SIPServices/SIc.svc/Checkout?barcode=B12&patron=thi"

还要考虑实现onStart方法并记录它,看它是否开始。

答案 1 :(得分:0)

这是我处理请求的自定义类。我在这里使用json,你可以返回并输入你想要的。你需要的只是

  • url:http://43.555.6.111:8081/SIPServices/SIc.svc/Checkout
  • 方法:“POST”
  • params:键和值的数组列表:条形码= B12& patron = thi

    HashMap<String, String> mValueParams = new HashMap<>();
    mValueParams.put("barcode", "B12");
    mValueParams.put("patron", "thi");
    
    JSONObject json = jsonParser.makeHttpRequest(url, "POST",mValueParams);
    

    public JSONObject makeHttpRequest(String url,String method,                                       HashMap params){

        sbParams = new StringBuilder();
        int i = 0;
        for (String key : params.keySet()) {
            try {
                if (i != 0) {
                    sbParams.append("&");
                }
                sbParams.append(key).append("=")
                        .append(URLEncoder.encode(params.get(key), charset));
    
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            i++;
        }
    
        if (method.equals("POST")) {
            // request method is POST
            try {
                urlObj = new URL(url);
    
                conn = (HttpURLConnection) urlObj.openConnection();
    
                conn.setDoOutput(true);
    
                conn.setRequestMethod("POST");
    
                conn.setRequestProperty("Accept-Charset", charset);
    
                conn.setReadTimeout(10000);
                conn.setConnectTimeout(15000);
    
                conn.connect();
    
                paramsString = sbParams.toString();
    
                wr = new DataOutputStream(conn.getOutputStream());
                wr.writeBytes(paramsString);
                wr.flush();
                wr.close();
    
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else if (method.equals("GET")) {
            // request method is GET
    
            if (sbParams.length() != 0) {
                url += "?" + sbParams.toString();
            }
    
            try {
                urlObj = new URL(url);
    
                conn = (HttpURLConnection) urlObj.openConnection();
    
                conn.setDoOutput(false);
    
                conn.setRequestMethod("GET");
    
                conn.setRequestProperty("Accept-Charset", charset);
    
                conn.setConnectTimeout(15000);
    
                conn.connect();
    
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    
        try {
            //Receive the response from the server
            int status = conn.getResponseCode();
            InputStream in = new BufferedInputStream(conn.getInputStream());
            BufferedReader reader = new BufferedReader(new InputStreamReader(in, "iso-8859-1"), 8);
            result = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null) {
                result.append(line);
            }
    
        } catch (IOException e) {
            e.printStackTrace();
        }
    
        conn.disconnect();
    
        // try parse the string to a JSON object
        try {
            jObj = new JSONObject(result.toString());
        } catch (Exception e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }
    
        // return JSON Object
        return jObj;
    }