我想知道我是怎么去上课的,我们称之为Class Master,其中: - 你调用Class Master并调用A类,然后调用A类的一些方法,然后返回A类,这样你就可以从返回的A类中调用方法,你可以调用类Master。
基本上,我想改变这段代码:
//Create FTPClient object and connect
FTPClient ftpClient = new FTPClient();
ftpClient.connect(server);
ftpClient.enterLocalPassiveMode();
ftpClient.login(username);
ftpClient.listFiles("/");
进入此代码:
FTPClient ftpClient = new ftpConnection(); //Connects, enters passive mode and logs in then returns the FTPClient object we created so we can do other stuff with it, like below:
ftpClient.listFiles("/");
如果您理解我的意思,那么我可以通过一个单独的呼叫在不同的活动中使用它来连接到FTP。
我试过自己,但由于某种原因我没有得到预期的效果(没有我尝试过的代码)
谢谢, 亚历克斯。
答案 0 :(得分:2)
使用工厂设计模式:
public class ftpClientFactory {
public ftpClientFactory(){}
public FTPClient getNewClient(){
FTPClient ftpClient = new FTPClient();
ftpClient.connect(server);
ftpClient.enterLocalPassiveMode();
ftpClient.login(username);
return ftpClient;
}
}
使用:
FTPClient ftpClient = new ftpClientFactory().getNewClient();
ftpClient.listFiles("/");
答案 1 :(得分:1)
如果使用类构造函数创建ftp连接,则类创建将花费太长时间。您应该在额外的线程中运行ftp调用。如果任何调用(即网络)阻止UI线程太长,则应用程序将因ANR而中断。这可能就是您的解决方案无法正常工作的原因。
无论如何 - 您可以在任何类中创建静态方法,例如:
class MyMaster{
static FTPClient doAllThatCrazyStuffAndGetMeThatFTPClient(){
FTPClient ftpClient = new FTPClient();
ftpClient.connect(server);
ftpClient.enterLocalPassiveMode();
ftpClient.login(username);
ftpClient.listFiles("/");
return ftpclient;
}
}
然后从代码中的任何位置调用静态方法:
FTPClient connectedClient = MyMaster.doAllThatCrazyStuffAndGetMeThatFTPClient();
或者您正在寻找Singleton Pattern。它还可以保存状态信息。所以你可以在任何地方使用相同的连接。但是不要创建memory leaks!