studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones java android android-asynctask

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