¿Cómo devuelvo un booleano de AsyncTask?

Tengo algunos EditTexts que un usuario ingresa una dirección ftp, nombre de usuario, contraseña, puerto y botón testConnection. Si una conexión se establece satisfactoriamente, devuelve un valor booleano de verdadero.

boolean status = ftpConnect(_address, _username, _password,_port); ftpDisconnect(); if (status == true) { Toast.makeText(SiteManager.this, "Connection Succesful", Toast.LENGTH_LONG).show(); } else { Toast.makeText(SiteManager.this, "Connection Failed:" + status, Toast.LENGTH_LONG).show(); } 

Estoy reelaborando mi código para usar AsyncTasks para realizar las diversas operaciones ftp, pero ¿cómo puedo devolver un valor booleano si la conexión se realiza con éxito?

 testConnection.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { _name = etSitename.getText().toString(); _address = etAddress.getText().toString(); _username = etUsername.getText().toString(); _password = etPassword.getText().toString(); _port = Integer.parseInt(etPort.getText().toString()); AsyncConnectTask task = new AsyncConnectTask(SiteManager.this, _address, _username, _password, _port); task.execute(); // boolean status = ftpConnect(_address, _username, _password, // _port); // ftpDisconnect(); // if (status == true) { // Toast.makeText(SiteManager.this, "Connection Succesful", // Toast.LENGTH_LONG).show(); // savesite.setVisibility(0); // } else { // Toast.makeText(SiteManager.this, // "Connection Failed:" + status, Toast.LENGTH_LONG) // .show(); // } } }); 

Y mi AsyncTask

 public class AsyncConnectTask extends AsyncTask { private Context mContext; private FTPHelper ftpHelper = new FTPHelper(); private String _address; private String _user; private String _pass; private int _port; ProgressDialog progressDialog; public AsyncConnectTask(Context context, String address, String user, String pass, int port) { mContext = context; _address = address; _user = user; _pass = pass; _port = port; } // declare other objects as per your need @Override protected void onPreExecute() { progressDialog = ProgressDialog.show(mContext, "Please wait for ", "Process Description Text", true); // do initialization of required objects objects here }; @Override protected Void doInBackground(Void... params) { boolean status = ftpHelper.ftpConnect(_address, _user, _pass, _port); return null; } @Override protected void onPostExecute(Void result) { super.onPostExecute(result); progressDialog.dismiss(); }; } 

 public interface MyInterface { public void myMethod(boolean result); } public class AsyncConnectTask extends AsyncTask { private MyInterface mListener; public AsyncConnectTask(Context context, String address, String user, String pass, int port, MyInterface mListener) { mContext = context; _address = address; _user = user; _pass = pass; _port = port; this.mListener = mListener; } @Override protected Boolean doInBackground(Void... params) { .... return result; } @Override protected void onPostExecute(Boolean result) { if (mListener != null) mListener.myMethod(result); } } AsyncConnectTask task = new AsyncConnectTask(SiteManager.this, _address, _username, _password, _port, new MyInterface() { @Override public void myMethod(boolean result) { if (result == true) { Toast.makeText(SiteManager.this, "Connection Succesful", Toast.LENGTH_LONG).show(); } else { Toast.makeText(SiteManager.this, "Connection Failed:" + status, Toast.LENGTH_LONG).show(); } } }); task.execute(); 

Si llama a myMethod desde onPostExecute el código que onPostExecute se ejecutará en el subproceso UI. De lo contrario, debe publicar un Runnable a través de un controlador

 public class AsyncConnectTask extends AsyncTask { @Override protected Boolean doInBackground(Void... params) { .... return true; /* or false */ } @Override protected void onPostExecute(Boolean result) { // result holds what you return from doInBackground } } 

Declara tu asynctask como

 public class AsyncConnectTask extends AsyncTask 

El tercer parámetro es el parámetro de resultado devuelto por doinbackground. (El primero es param asynctask y el segundo es parámetro de progreso)

por lo que su hacer en segundo plano y onpostexecute será

 @Override protected Boolean doInBackground(Void... params) { boolean status = ftpHelper.ftpConnect(_address, _user, _pass, _port); return status; } @Override protected void onPostExecute(Boolean result) { // use the result super.onPostExecute(result); progressDialog.dismiss(); }; 

Recuerde que el valor devuelto por doInBackground es modificado por onPostExecute como parámetro. así que use esto en el método onPostExecute. puedes actualizar tu UI en este método también.