[英]How do I return a boolean from AsyncTask?
我有一些EditTexts,用戶輸入ftp地址,用戶名,密碼,端口和testConnection按鈕。 如果連接成功建立,則返回布爾值true。
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();
}
我正在重新編寫代碼以使用AsyncTasks來執行各種ftp操作,但是如果成功建立連接,如何傳回布爾值?
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();
// }
}
});
而我的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 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();
如果從onPostExecute
調用myMethod
, onPostExecute
的代碼將在UI Thread上運行。 否則,您需要通過Handler
發布Runnable
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
}
}
聲明你的asynctask就像
public class AsyncConnectTask extends AsyncTask<Void, Void, Boolean>
第三個參數是doinbackground返回的結果參數。 (第一個是asynctask參數,第二個是進度參數)
所以你的背景和onpostexecute將是
@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();
};
請記住,doInBackground返回的值是由onPostExecute作為參數進行的。 所以在onPostExecute方法中使用它。 您也可以使用此方法更新UI。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.