简体   繁体   中英

Consuming SOAP web services from Android

I am trying to create a project in android studio to consume a web service from android. My app compiles without error but when I run it the required output is not displayed as if it is not working at all.

Web Service Links:-

http://202.54.216.49/logs/test.asmx

http://202.54.216.49/logs/test.asmx?WSDL

MainActivity.java-

package com.example.abhimanyu.ws_soap;

import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;

public class MainActivity extends AppCompatActivity {
    EditText textBox,textBox2;
    Button button;
    TextView ans;

    String URL = "http://202.54.216.49/logs/test.asmx?WSDL";
    String NAMESPACE = "http://tempuri.org";
    String SOAP_ACTION = "http://tempuri.org/calculation";
    String METHOD_NAME = "calculation";
    String PARAMETER_NAME1 = "a";
    String PARAMETER_NAME2 = "b";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textBox = (EditText)findViewById(R.id.txtBox);
        textBox2 = (EditText)findViewById(R.id.txtBox2);
        button = (Button)findViewById(R.id.btn);
        ans = (TextView)findViewById(R.id.answer);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new CallWebService().execute(textBox.getText().toString(),textBox2.getText().toString());
            }
        });
    }

    class CallWebService extends AsyncTask<String, Void, String> {
        @Override
        protected void onPostExecute(String s) {
            ans.setText(s);
        }

        @Override
        protected String doInBackground(String... params) {
            String result = "";

            SoapObject soapObject = new SoapObject(NAMESPACE, METHOD_NAME);

            PropertyInfo propertyInfo1 = new PropertyInfo();
            propertyInfo1.setName(PARAMETER_NAME1);
            propertyInfo1.setValue(params[0]);
            propertyInfo1.setType(String.class);

            PropertyInfo propertyInfo2 = new PropertyInfo();
            propertyInfo2.setName(PARAMETER_NAME2);
            propertyInfo2.setValue(params[1]);
            propertyInfo2.setType(String.class);

            soapObject.addProperty("a",propertyInfo1);
            soapObject.addProperty("b",propertyInfo2);

            SoapSerializationEnvelope envelope =  new SoapSerializationEnvelope(SoapEnvelope.VER11);
            envelope.setOutputSoapObject(soapObject);

            HttpTransportSE httpTransportSE = new HttpTransportSE(URL);

            try {
                httpTransportSE.call(SOAP_ACTION, envelope);
                SoapPrimitive soapPrimitive = (SoapPrimitive)envelope.getResponse();
                result = soapPrimitive.toString();
            } catch (Exception e) {
                e.printStackTrace();
            }

            return result;

        }
    }
    }

activity_main.xml-

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="10dp"
    tools:context="com.example.abhimanyu.ws_soap.MainActivity">

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/txtBox"
    android:layout_marginBottom="5dp" />

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/txtBox2"
    android:layout_below="@id/txtBox"
    android:layout_marginBottom="5dp"/>

<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Calculate"
    android:id="@+id/btn"
    android:layout_below="@+id/txtBox2"
    android:layout_marginBottom="5dp"/>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/answer"
    android:layout_below="@id/btn"/>
</RelativeLayout>

Note: I copied this code from internet and made some adjustments according to my requirements. But, I'm new in android studio so most probably those adjustments did something wrong.

Try this.

public class test extends AsyncTask<String,Void,Integer>{
    int a;
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected Integer doInBackground(String... params) {
            String value1 = params[0];
            String value2 = params[1];
        try {
            SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
            request.addProperty("a", Integer.valueof(value1));
            request.addProperty("b", Integer.valueof(value2));
            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            envelope.dotNet = true;
            envelope.setOutputSoapObject(request);
            HttpTransportSE androidHttpTransport = new HttpTransportSE(URL, 60 * 10000);
            androidHttpTransport.call(SOAP_ACTION, envelope);
            SoapPrimitive soapPrimitive = (SoapPrimitive) envelope.getResponse();
            a = new Integer(Integer.valueOf(soapPrimitive.toString()));
        }catch (Exception e){

        }

        return a;
    }

    @Override
    protected void onPostExecute(Integer integer) {
        super.onPostExecute(integer);
        Toast.makeText(MeetActivity.this, ""+String.valueOf(integer), Toast.LENGTH_SHORT).show();
    }
}

This is my final code and now its working perfectly fine. Thanks for help though.

package com.example.abhimanyu.ws_soap;

import android.content.Context;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;

public class MainActivity extends AppCompatActivity {
    EditText textBox, textBox2;
    Button button;
    TextView ans;


    String URL = "http://202.54.216.49/logs/test.asmx";
    String NAMESPACE = "http://tempuri.org/";
    String SOAP_ACTION = "http://tempuri.org/calculation";
    String METHOD_NAME = "calculation";
    String PARAMETER_NAME1 = "a";
    String PARAMETER_NAME2 = "b";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textBox = (EditText) findViewById(R.id.txtBox);
        textBox2 = (EditText) findViewById(R.id.txtBox2);
        button = (Button) findViewById(R.id.btn);
        ans = (TextView) findViewById(R.id.answer);
        final Context context;
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new CallWebService().execute(textBox.getText().toString(), textBox2.getText().toString());
            }
        });
    }

    class CallWebService extends AsyncTask<String, Void, String> {
        @Override
        protected void onPostExecute(String s) {
            ans.setText(s);
        }

        @Override
        protected void onPreExecute() {
            Log.i("onPreexecute","running");
            super.onPreExecute();
        }

        @Override
        protected String doInBackground(String... params) {
            String result = null;

            SoapObject soapObject = new SoapObject(NAMESPACE, METHOD_NAME);

            PropertyInfo propertyInfo1 = new PropertyInfo();
            propertyInfo1.setName(PARAMETER_NAME1);
            propertyInfo1.setValue(params[0]);
            propertyInfo1.setType(String.class);
            soapObject.addProperty(propertyInfo1);

            PropertyInfo propertyInfo2 = new PropertyInfo();
            propertyInfo2.setName(PARAMETER_NAME2);
            propertyInfo2.setValue(params[1]);
            propertyInfo2.setType(String.class);
            soapObject.addProperty(propertyInfo2);

            SoapSerializationEnvelope envelope =  new SoapSerializationEnvelope(SoapEnvelope.VER11);
            envelope.dotNet=true;
            envelope.implicitTypes=true;
            envelope.setOutputSoapObject(soapObject);

            HttpTransportSE httpTransportSE =  new HttpTransportSE(URL);

            try {
                httpTransportSE.call(SOAP_ACTION, envelope);
                SoapPrimitive soapPrimitive = (SoapPrimitive)envelope.getResponse();
                result = soapPrimitive.toString();
            } catch (Exception e) {
                e.printStackTrace();
            }

            return result;

        }
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM