How to pass parameter to a webservice using ksoap2?

前端 未结 6 1640
后悔当初
后悔当初 2020-12-16 17:28

I\'m using Eclipse IDE to develop an android app. I\'m trying to connect to a .net webservice. I\'m using ksoap2 version 2.3

When I\'m calling a webmethod with no

相关标签:
6条回答
  • 2020-12-16 17:45

    Instead of

        request.addProperty("a", "myprop"); 
    

    try using

        request.addProperty("arg0", "myprop");         
    

    I'm not an expect on ksoap2 but i'm pretty sure this sets the value of the first parameter to your web service function. Has worked perfectly for me.

    0 讨论(0)
  • 2020-12-16 17:49

    Try commenting out the line:

    envelope.dotNet=true;

    I did the same thing you did and when I read about this property being a really ugly hack, I commented it out for testing purposes and my parameter got passed correctly.

    0 讨论(0)
  • 2020-12-16 17:52

    You will have to declare parameter type in client code:

    SoapObject request = new SoapObject("http://tempuri.org/", "mymethod"); 
    PropertyInfo p = new PropertyInfo();
    p.setName("param_name_from_webservice");
    p.setValue(true);
    p.setType(Boolean.class);
    request.addProperty(p);
    
    0 讨论(0)
  • 2020-12-16 17:55

    Calling webservice by passing parameters from j2me

    SoapObject request = new SoapObject("http://www.webserviceX.NET", "GetCitiesByCountry");
    String soapAction = "http://www.webserviceX.NET/GetCitiesByCountry";
    
    request.addProperty("CountryName", "india");
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.bodyOut = request;
    envelope.dotNet = true;
    
    HttpTransport ht = new HttpTransport("http://www.webservicex.net/globalweather.asmx");
    ht.debug = true;
    //System.err.println( ht.requestDump );
    
    ht.call(soapAction,envelope);
    System.out.println("####################: " +envelope.getResponse());
    //SoapObject result = (SoapObject)envelope.getResponse();
    
    0 讨论(0)
  • 2020-12-16 17:57

    In here Problem With the Order of Codes You Wrote, Don't Worry Try this, It's Worked for me.

    private class ConversionAsyncTask extends AsyncTask<Void,Void,Void> {
        private SoapPrimitive response;
        protected Void doInBackground(Void... params) {
    
            SoapObject request = new SoapObject(NAMESPACE, METHOD);
    
    
            request.addProperty("a","5");
            SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            soapEnvelope.setOutputSoapObject(request);
    
            soapEnvelope.dotNet = true;
            soapEnvelope.implicitTypes = true;
    
            try {
                HttpTransportSE aht = new HttpTransportSE(URL);
                aht.call(SOAP_ACTION, soapEnvelope);
    
                response = (SoapPrimitive) soapEnvelope.getResponse();
    
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            temperatureTxt.setText("Status: " + response);
        }
    }
    
    0 讨论(0)
  • 2020-12-16 18:10

    I have been working with this for 2 days now and i finally got the solution. I submit my complete code and hope this will help. It Can pass Parameters and get response.

    Inside the WebService file in .net C#:

    [WebService(Namespace = "http://something/webservice/v1")]
    
    [WebMethod]
    public DateTime[] Function(Guid organizationId, Guid categoryId)
        {
            return ...;
        }
    

    Inside the Android code:

    private final static String URL = "http://something/WebServices/WebService.asmx";
    private final static String NAMESPACE = "http://something/webservice/v1";
    
    
    public ArrayList<Object> getSoapObject(String METHOD_NAME, String SOAP_ACTION, Map<String, String> parameters){
    
    try {
    
            ArrayList<Object> sol = new ArrayList<Object>();
            SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
    
            if(parameters != null){
                for (Entry<String, String> para : parameters.entrySet()) {
                    request.addProperty(para.getKey(), para.getValue());
                }
            }
    
            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            envelope.dotNet=true;
            envelope.setOutputSoapObject(request);
    
            Log.d("Body", envelope.bodyOut.toString());
    
            HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
            androidHttpTransport.call(SOAP_ACTION, envelope);
            SoapObject result=(SoapObject)envelope.getResponse();
    
                for(int i = 0; i < result.getPropertyCount(); i++){
                    sol.add(result.getProperty(i));
                }
    
                return sol;
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }       
        }
    
    
        public void getMenuEndDate(String orgId, String categoryId){
    
            Date startDate = null;
            Date endDate = null;
    
            HashMap<String, String> parameters = new HashMap<String, String>();
            parameters.put("organizationId", orgId);
            parameters.put("categoryId", categoryId);
    
    
            ArrayList<Object> sol = getSoapObject("Function", "http://something/webservice/v1/Function", parameters);
    
            SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd");
    
            try {
                startDate = (Date)dateFormatter.parse(sol.get(0).toString());
                endDate = (Date)dateFormatter.parse(sol.get(1).toString());
            } catch (ParseException e) {
                Log.d(TAG, "Exception i Date-Formatering");
                e.printStackTrace();
            }
    
        }
    

    Things to check:

    • Are the parameters named exactly the same as what is expected in the Web Service?
    • Check if you use Trailing "/" for the Namespace. Have the same in you application.
    0 讨论(0)
提交回复
热议问题