如何检查我的应用程序是否从FTP下载文件

时间:2011-11-24 19:09:50

标签: android

我正在尝试通过我的应用程序从FTP下载文件。但我的祝酒词都没有表现出来。如何检查我是否已连接以及文件是否已下载?

代码:

package no.kraftpriser.oversikt;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.SocketException;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;

import org.apache.commons.net.PrintCommandListener;
import org.apache.commons.net.ftp.FTPClient;

public class KraftpriserActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        FTPClient ftp;

        Context context = getApplicationContext();
        int duration = Toast.LENGTH_SHORT;
        int duration2 = Toast.LENGTH_LONG;


        ftp = new FTPClient();
        ftp.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out)));

        try {
            int reply;
            String server = "62.97.235.213";
            int port = 21;
            ftp.connect(server, port);
            ftp.login("anonymous","nobody");
            ftp.enterLocalPassiveMode();
            ftp.changeWorkingDirectory("/Fastpris");
            InputStream inStream = ftp.retrieveFileStream("2011.txt");


            CharSequence tilkoblet = "Connected!";

            Toast toastTilkoblet = Toast.makeText(context, tilkoblet, duration2);
            toastTilkoblet.show();

            reply = ftp.getReplyCode();

        } catch (SocketException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block

            if (ftp.isConnected()) {
                try {
                    ftp.disconnect();
                }
                catch (IOException f) {
                    //Do nothing
                }
            }
            CharSequence ikkeTikoblet = "Kunne ikke koble til server";
            Toast toastIkkeTilkoblet = Toast.makeText(context, ikkeTikoblet, duration);
            toastIkkeTilkoblet.show();
            e.printStackTrace();

        }

    }


}

1 个答案:

答案 0 :(得分:0)

在传输完成之前,您的“已连接”吐司不会显示,因为getFileAsStream将阻止,直到传输完成。此外,您只是将文件加载到上面代码中的InputStream中...如果您想将其保存到SD卡或内部存储中,您仍需要将该输入流写入文件。

为了能够看到下载的进度,您需要在后台线程中进行实际下载(使用AsyncTask)。然后,您可以通过onProgressUpdate方法将状态更新发布回UI线程。

根据您使用的FTP客户端,您还可以检查connect和/或login方法的返回值,以查看每个操作是否成功。