如何退还从AsyncTask的一个布尔值? [英] How do I return a boolean from AsyncTask?
问题描述
我有一个用户输入FTP地址,用户名,密码,端口安达testConnection按钮一些EditTexts。如果连接成功estabished它返回一个布尔值。
布尔状态= ftpConnect(_address,_username,_password,_port);
ftpDisconnect();
如果(状态==真){
Toast.makeText(SiteManager.this,连接成功的,
Toast.LENGTH_LONG).show();
} 其他 {
Toast.makeText(SiteManager.this,
连接失败:+状态,Toast.LENGTH_LONG).show();
}
我返工我的code使用AsyncTasks执行各种FTP操作,但我怎么能传回一个布尔值,如果成功建立连接?
testConnection.setOnClickListener(新OnClickListener(){
@覆盖
公共无效的onClick(视图v){
_name = etSitename.getText()的toString()。
_address = etAddress.getText()的toString()。
_username = etUsername.getText()的toString()。
_password = etPassword.getText()的toString()。
_port =的Integer.parseInt(etPort.getText()的toString());
AsyncConnectTask任务=新AsyncConnectTask(SiteManager.this,
_address,_username,_password,_port);
task.execute();
//布尔状态= ftpConnect(_address,_username,_password,
// _端口);
// ftpDisconnect();
//如果(状态==真){
// Toast.makeText(SiteManager.this,连接成功的,
// Toast.LENGTH_LONG).show();
// savesite.setVisibility(0);
// } 其他 {
// Toast.makeText(SiteManager.this,
//连接失败:+状态,Toast.LENGTH_LONG)
// 。显示();
//}
}
});
和我的AsyncTask
公共类AsyncConnectTask扩展的AsyncTask<虚空,虚空,虚空> {
私人语境mContext;
私人FTPHelper ftpHelper =新FTPHelper();
私人字符串_address;
私人字符串_user;
私人字符串_pass;
私人诠释_port;
ProgressDialog progressDialog;
公共AsyncConnectTask(上下文的背景下,字符串的地址,字符串用户,
字符串传递,INT端口){
mContext =背景;
_address =地址;
_user =用户;
_pass =通;
_port =口;
}
//声明其他对象按你的需要
@覆盖
在preExecute保护无效(){
progressDialog = ProgressDialog.show(mContext,请等待,
流程说明文字,真正的);
//需要的对象做初始化对象这里
};
@覆盖
保护无效doInBackground(虚空...... PARAMS){
布尔值状态= ftpHelper.ftpConnect(_address,_user,_pass,_port);
返回null;
}
@覆盖
保护无效onPostExecute(无效的结果){
super.onPostExecute(结果);
progressDialog.dismiss();
};
}
公共接口MyInterface的{
公共无效myMethod的(布尔结果);
}
公共类AsyncConnectTask扩展的AsyncTask<虚空,虚空,布尔> {
私人MyInterface的mListener;
公共AsyncConnectTask(上下文的背景下,字符串的地址,字符串用户,
字符串传递,INT端口,MyInterface的mListener){
mContext =背景;
_address =地址;
_user =用户;
_pass =通;
_port =口;
this.mListener = mListener;
}
@覆盖
保护布尔doInBackground(空... PARAMS){
....
返回结果;
}
@覆盖
保护无效onPostExecute(布尔结果){
如果(mListener!= NULL)
mListener.myMethod(结果);
}
}
AsyncConnectTask任务=新AsyncConnectTask(SiteManager.this,
_address,_username,_password,_port,新MyInterface的(){
@覆盖
公共无效myMethod的(布尔结果){
如果(结果==真){
Toast.makeText(SiteManager.this,连接成功的,
Toast.LENGTH_LONG).show();
} 其他 {
Toast.makeText(SiteManager.this,连接失败:+状态,Toast.LENGTH_LONG).show();
}
}
});
task.execute();
如果你调用 myMethod的
从 onPostExecute
里面的code将运行在UI线程。否则,你需要发布一个Runnable通过处理程序
I have some EditTexts that a user enters an ftp address, username, password, port anda testConnection button. If a connection is successfully estabished it returns a boolean value of 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();
}
I'm reworking my code to use AsyncTasks to perform the various ftp operations, but how can I pass back a boolean value if a connection is successfully made?
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();
// }
}
});
And my 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();
If you call myMethod
from onPostExecute
the code inside it will run on the UI Thread. Otherwise you need to post a Runnable through a Handler
这篇关于如何退还从AsyncTask的一个布尔值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!