Hi All I want to pass a Variables to AsyncTask
I've This Variables
private static String NAMESPACE = "aaa";
private static String METHOD_NAME = "bbb";
private static String SOAP_ACTION = NAMESPACE + METHOD_NAME ;
private static String URL = "ccc";
and I've This Task
public class Login extends AsyncTask<Void, Void, String>
{
ProgressDialog progress;
String response = "";
private ProgressDialog pDialog;
public void onPreExecute()
{
super.onPreExecute();
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Please Wait");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected String doInBackground(Void... arg0) {
final SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("username", user_name);
request.addProperty("userpass", user_pass);
final SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
envelope.dotNet = true;
try
{
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.call(SOAP_ACTION, envelope);
SoapPrimitive result = (SoapPrimitive) envelope.getResponse();
response = result.toString();
}
catch (IOException e)
{
response = "Error In The Operation(1) !!\n Check Internet Connection And TRY AGAIN.";
}
catch (Exception e)
{
response = "Error In The Operation(2) !!\n Check Internet Connection And TRY AGAIN.";
}
return response;
}
@Override
public void onPostExecute(String res)
{
if(!(res.equalsIgnoreCase("")))
{
if (res.toString().contains(",") == true)
{
String[] separated = res.split(",");
tv.setText(separated[1]);
return;
}
if(res.toString().equals("1"))
{
res = "Wrong User name OR password ,, TRY AGAIN ..";
tv.setText(res);
pDialog.dismiss();
return;
}
if(res.toString().equals("2"))
{
res = "Your Account Is temporarily Blocked ,, Please Call The Admin";
tv.setText(res);
pDialog.dismiss();
return;
}
if(res.toString().equals("3"))
{
res = "Error While Retrieve S Information ,, Try Again Later .";
tv.setText(res);
pDialog.dismiss();
return;
}
tv.setText(res);
pDialog.dismiss();
}
}
}
I Need When I Want To Execute this Taks
To Call It And Pass The Above Variables
Like
new Login().execute();
Make It
new Login().execute(URL,NAMESPACE,METHOD,USERNAME,USERPASS);
With Knolledge That this task return a String :)
AND THE doInBackground MUST HAVE a value for user_name & user_pass Need To Pass It With Execution Call ..
Regards ...
Why not create a Constructor for the Login class, like below? In my case, I'm passing an Activity to my AsyncTask so that I can call a callback function when done, but in your case, you could also pass an Array of your Strings.
In this case below, the args array is passed to the class constructor while the params array is passed to the doInBackground function. The MainActivity is passed to the AsyncTask so that the taskDone callback can be called in MainActivity once the task completes.
public class Login extends AsyncTask<String, Void, String>
{
private MainActivity activity;
//These private strings are only needed if you require them
//outside of the doInBackground function....
//If not, just use the params argument of doInBackground by itself
private String METHODNAME,
private String NAMESPACE;
private String SOAPACTION;
private String USER_NAME;
private String USER_PASS;
public Login(String[] args, MainActivity activity) {
this.NAMESPACE= args[0];
this.METHODNAME = args[1];
this.SOAPACTION = args[2];
this.USER_NAME = args[3];
this.USER_PASS= args[4];
this.activity = activity;
}
@Override
protected Void doInBackground(String... params) {
//Again, use either params local to this function
//or args local to the entire function...
//both would be redundant
String _NAMESPACE = params[0];
String _METHODNAME = params[1];
String _SOAPACTION = params[2];
String _USER_NAME = params[3];
String _USER_PASS= params[4];
//Do background stuff
}
protected void onPostExecute() {
//dismiss progress dialog if needed
//Callback function in MainActivity to indicate task is done
activity.taskDone("some string");
}
}
MainActivity.java
private String[] args= {"mynamespace", "mymethods", "mysoap", "myuser", "mypass"}; //to pass to constructor
private String[] params= {"mynamespace", "mymethods", "mysoap", "myuser", "mypass"}; //to pass to doInBackground
//Pass your args array and the current activity to the AsyncTask
new Login(args, MainActivity.this).execute(params);
//Callback for AsyncTask to call when its completed
public void taskDone(String returnVal) {
//Do stuff once data has been loaded
returnText = returnVal;
}