java - programacion - ¿Cómo devuelvo un booleano de AsyncTask?
manual de programacion android pdf (3)
Declara tu asynctask como
public class AsyncConnectTask extends AsyncTask<Void, Void, Boolean>
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.
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<Void, Void, Void> {
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 class AsyncConnectTask extends AsyncTask<Void, Void, Boolean> {
@Override
protected Boolean doInBackground(Void... params) {
....
return true; /* or false */
}
@Override
protected void onPostExecute(Boolean result) {
// result holds what you return from doInBackground
}
}
public interface MyInterface {
public void myMethod(boolean result);
}
public class AsyncConnectTask extends AsyncTask<Void, Void, Boolean> {
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