我首先想要获取存储在FTP目录中的文件列表,然后使用时间戳获取上次创建的文件的名称。我正在收到一个警告框:Activity is not responding
。检查logcat条目后,我注意到代码永远不会到达行:
Log.e("FTP", "number of filenames: " + count);
但我到了Log.e("FTP", "Connexion successful ");
所以对服务器的联系似乎没问题。
看起来好像出了什么问题。有人可以帮我处理它。或者向我展示一个从FTP服务器控制器获取最后创建的文件的简单方法?
FTPClient ftpClient = new FTPClient();
try
{
ftpClient.connect(InetAddress.getByName(Fonctions.address), Integer.parseInt(Fonctions.port));
if (ftpClient.login(Fonctions.login, Fonctions.pass))
{
Log.e("FTP", "Connexion successful ");
String workDir = ftpClient.printWorkingDirectory();
//Log.e("FTP", "workdir:" + workDir);
int count = ftpClient.listNames().length;
Log.e("FTP", "number of filenames: " + count);
FTPFile [] dossier = new FTPFile[count];
FTPFile back = new FTPFile();
dossier = ftpClient.listDirectories("Sarelo_FTP");
back = dossier[0];
Log.e("FTP", "Avant boucle " + back);
int buf = 0;
for (int i=0;i<(dossier.length) - 1;i++)
{
for (int j=1;j<dossier.length;j++)
{
buf = back.getTimestamp().compareTo(dossier[j].getTimestamp());
if (buf == -1)
back = dossier[j];
}
}
Log.e("FTP", "fichier final le plus récent: " + back.getName());
}
else{
Log.e("Restore FTP", "Error while connecting to FTP server");
}
}
catch(IOException e)
{
String title = "Error connecting to FTP server";
String msg = "Please check your parameters and connexion info: login, password,port number";
f.alert(c, title, msg).show();
Log.e("Restore FTP", "Error while connecting to FTP server", e);
}
P.S:我无法获取目录中的文件列表,因此,我不知道检索上一个创建文件的代码是否正常工作。对此的任何帮助也将不胜感激。
[编辑]这是我的AsyncTask,用于检索目录中的文件列表。但它仍然无法正常工作。我不再获得应用程序无响应,但它似乎没有做任何其他事情。执行卡在同一点(无法到达Log.e("FTP", "number of filenames: " + count);
)
class getFilesFromFtp extends AsyncTask
{
@Override
protected String doInBackground(Object... params)
{
int count = 0;
try
{
Log.e("FTP", "avant names: " + count);
count = ftpClient.listNames().length;
Log.e("FTP", "names: " + count);
handler.sendMessage(handler.obtainMessage());
}
catch (IOException e) {
Log.e("FTP", "Error getting number of files ", e);
}
return null;
}
}
感谢您的帮助。
答案 0 :(得分:1)
您不能在UI线程上执行长时间运行的代码。 Thia阻止了UI重绘和事件处理。它还产生ANR。
您应该在后台线程中运行它,最好是通过'AsyncTask'。
答案 1 :(得分:0)
第一个问题解决了。我只需要激活FTP数据连接被动模式:
ftpClient.enterLocalPassiveMode();
在行int count = ftpClient.listNames().length;
之前。
希望这会对其他人有所帮助。感谢@Peter Knego带我去AsynkTask。我学到了新东西。 :)