-2

I'm trying to fetch the username and password values from the mysql database using soap. but i'm getting 'android.os.NetworkOnMainThreadException', please tell me how to use AsyncTask to avoid this exception.

package com.example.androidloginexampleactivity;

import java.io.IOException;

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;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class AndroidLoginExampleActivity extends Activity {
    private final String NAMESPACE = "http://10.0.2.2:80/urn:stockserver";
    private final String URL = "http://10.0.2.2:80/stockserver1.php?wsdl";

    //private final String URL = " http://10.0.2.2:8080/WebApplication2/Login?Tester";
    private final String SOAP_ACTION = "http://10.0.2.2:80/urn:stockserver#getStockQuote";
    private final String METHOD_NAME = "getStockQuote";
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_android_login_example);
        Button login = (Button) findViewById(R.id.btn_login);
        login.setOnClickListener(new View.OnClickListener() {

            public void onClick(View arg0) {
                loginAction();
            }
        });
    }

    private void loginAction(){
        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

        EditText userName = (EditText) findViewById(R.id.tf_userName);
        String user_Name = userName.getText().toString();
        EditText userPassword = (EditText) findViewById(R.id.tf_password);
        String user_Password = userPassword.getText().toString();

        //Pass value for userName variable of the web service
        PropertyInfo unameProp =new PropertyInfo();
        unameProp.setName("userName");//Define the variable name in the web service method
        unameProp.setValue(user_Name);//set value for userName variable
        unameProp.setType(String.class);//Define the type of the variable
        request.addProperty(unameProp);//Pass properties to the variable

        //Pass value for Password variable of the web service
        PropertyInfo passwordProp =new PropertyInfo();
        passwordProp.setName("password");
        passwordProp.setValue(user_Password);
        passwordProp.setType(String.class);
        request.addProperty(passwordProp);

        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER10);
        envelope.setOutputSoapObject(request);
        HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

        try{
            androidHttpTransport.call(SOAP_ACTION, envelope);
            SoapPrimitive response = (SoapPrimitive)envelope.getResponse();

            TextView result1 = (TextView) findViewById(R.id.tv_status);
            result1.setText(response.toString());
            Toast.makeText(getApplicationContext(), response.toString(), 5).show();

        }
        catch(Exception e){
            Toast.makeText(getApplicationContext(), e.toString(), 5).show();


        }
    }

}
Chris
  • 2,955
  • 1
  • 30
  • 43
atul
  • 5
  • 1
  • 7
  • Cmon there are hundrets of thousand of tuts out there https://www.google.de/search?q=android+network+asynctask+tutorial&oq=android+network+asynctask+tutorial&aqs=chrome..69i57j69i60l5.4679j0&sourceid=chrome&espvd=210&es_sm=93&ie=UTF-8 – A.S. Oct 07 '13 at 10:32
  • What did you learn when you Googled for this exception? – Simon Oct 07 '13 at 10:33
  • possible duplicate of [android.os.NetworkOnMainThreadException](http://stackoverflow.com/questions/6343166/android-os-networkonmainthreadexception) – njzk2 Oct 07 '13 at 10:35
  • well, there are some examples but , i couldnt link my example with theirs. i need implementation for this above one actually.. – atul Oct 07 '13 at 10:44

2 Answers2

0

Convert your LoginAction to an inner class that extends AsyncTask. Override the preexecute method to do all of you setup. Use the onexecute method to do you network communication. Do any processing with your results in the postexecute method.

Here is a tutorial: http://codeoncloud.blogspot.com/2013/07/android-web-service-access-using-async.html

wyoskibum
  • 1,869
  • 2
  • 23
  • 43
0

Since Android 3.0 you cannot use a network connection on the main thread. You better create an AsynTask with doInBackground to execute you httpget.

By: @marshallino16

See this post.

Community
  • 1
  • 1
Cold
  • 787
  • 8
  • 23