0

I created a simple class for call web service

public class CallSoap {
    public final String SOAP_ACTION = "http://tempuri.org/Add";

    public  final String OPERATION_NAME = "Add"; 

    public  final String WSDL_TARGET_NAMESPACE = "http://tempuri.org/";

    public  final String SOAP_ADDRESS = "http://localhost:41614/Service1.asmx";
    public CallSoap() 
    { 
    }
    public String Call(int a,int b)
    {
    SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE,OPERATION_NAME);
    request.addProperty("a",a);
    request.addProperty("b",b);

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

    HttpTransport httpTransport = new HttpTransport(SOAP_ADDRESS);
    Object response=null;
    try
    {
    httpTransport.call(SOAP_ACTION, envelope);
    response = envelope.getResponse();
    }
    catch (Exception exception)
    {
    response=exception.toString();
    }
    return response.toString();
    }
}

This is my Activity click method

public void clickData(View v)
{
    //Intent intent = new Intent(this, DisplayMessageActivity.class);
    EditText et=(EditText) findViewById(R.id.editText1);
    EditText et2=(EditText) findViewById(R.id.editText2);
    TextView tv=(TextView) findViewById(R.id.textView1);

    int a=Integer.parseInt(et.getText().toString());
    int b=Integer.parseInt(et2.getText().toString()); 

    CallSoap cs=new CallSoap();
    tv.setText(cs.Call(a, b));
}

There is an error "Unportunately App1 has sttoped". Please help me..

Shivam Kumar
  • 1,892
  • 2
  • 21
  • 33
Sithira Pathmila
  • 145
  • 1
  • 3
  • 10

2 Answers2

0

This is due to NetworkOnMainThread exception after android 2.2 you cannot run long running operations such as network access in your mainUi Thread,as mainUI thread is for loading of Ui components to make your application smooth and efficient.you should probably use AsynTask class to keep it off the main thread

Muhammad Babar
  • 8,084
  • 5
  • 39
  • 56
0

For starters, and also as a very good practice, make the call into a separate thread. I do it like this:

public void call() {
    Log.d("TAG", "Started call");
    new Thread(new Runnable()
    {
        public void run() {
            Looper.prepare();

            /** UI stuff/ This runs on the main thread to update the UI. This can be used for displaying something like "please wait */

            AppPrefFragment.updateSyncJobsNumber(AppPrefFragment.JOB_START);
            if (AppPrefActivity.context != null) {
                ((Activity) AppPrefActivity.context).runOnUiThread(new Runnable()
                {
                    public void run() {
                        //AppPrefFragment.setSyncPreferenceStatusShowingOngoingJobs();
                        ... show "please wait"
                    }
                });
            }


            /** Actual stuff  that you want to do */

            ... the HttpCall or SOAP etc
        }
    }).start();
}

Please note that the return has to be handled asynchronously.

msysmilu
  • 2,015
  • 23
  • 24