【问题标题】:Turn FTP command into ASync Task?将 FTP 命令变成异步任务?
【发布时间】:2012-01-05 03:05:01
【问题描述】:

首先,不要因为没有搜索而责骂我,我一直在寻找这个问题的答案,虽然那里有答案,但我无法理解其中的任何一个。

现在,除此之外,我正在尝试将我的 ftp 命令放入 Android 的异步任务中。

代码

package com.dronnoc.ftp;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.io.CopyStreamEvent;
import org.apache.commons.net.io.CopyStreamListener;
import org.apache.commons.net.io.Util;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;

public class Main extends Activity {
    /** Called when the activity is first created. */

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


        FTPTransfer ftp = new FTPTransfer("hostname", "user", "pass");

        String data = Environment.getDataDirectory().toString();
        data += "/data/com.dronnoc.ftp/databases/test.db";

        boolean result = ftp.upload(data, "/ftp_dir/test.db");
        if(result)
        {
            Log.d("message", "Upload Successful.");
        }
        else
        {
            Log.e("message", ftp.error());
        }

    ftp.close();
    }
}

FTPTransfer.java

package com.dronnoc.ftp;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.SocketException;

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


public class FTPTransfer {

    final FTPClient ftp = new FTPClient();
    private String error = null;
    private boolean connected = false;

    public FTPTransfer(String host, String username, String pass) {
        // TODO Auto-generated constructor stub
        try {
            ftp.connect(host);

            if(ftp.login(username, pass))
            {
                ftp.enterLocalPassiveMode();
                connected = true;
            }
        }
        catch (FTPConnectionClosedException e) { error = e.getMessage(); }
        catch (SocketException e) { error = e.getMessage(); }
        catch (IOException e) { error = e.getMessage(); }
    }


    public boolean upload(String localName, String remoteName)
    {
        if(ftp.isConnected() && connected)
        {
            try {
                FileInputStream file = new FileInputStream(localName);
                boolean result = ftp.storeFile(remoteName, file);
                if(result) { return true; }
                else { return false; }
            } 
            catch (FileNotFoundException e) { error = e.getMessage(); return false; } 
            catch (IOException e) { error = e.getMessage(); return false; }
        }
        return false;
    }

    public boolean upload(File localName, String remoteName)
    {
        if(ftp.isConnected() && connected)
        {
            try {
                FileInputStream file = new FileInputStream(localName.getAbsolutePath());
                boolean result = ftp.storeFile(remoteName, file);
                if(result) { return true; }
                else { return false; }
            } 
            catch (FileNotFoundException e) { error = e.getMessage(); return false; } 
            catch (IOException e) { error = e.getMessage(); return false; }
        }
        return false;
    }

    public boolean download(String remote, String local)
    {
        //TODO Put appropriate code here
        return false;
    }


    public boolean close()
    {
        try {
            ftp.disconnect();
            return true;
        } catch (IOException e) {
            error = e.getMessage();
            return false;
        }
    }

    public String error()
    {
        return error;
    }

}

我想知道的是如何将我的 FTP 函数放入 ASync 任务中,以便我可以在后台活动中运行它并更新进度条,并指出到目前为止它上传了多少字节?

干杯

编辑 代码本身现在可以工作,我只需要知道如何将它变成一个异步任务

【问题讨论】:

    标签: android ftp android-asynctask


    【解决方案1】:

    不确定您是否在问如何使用AsyncTask,但如果您在此处有一个关于使用AsyncTask 向网络服务发出请求的教程。这可以很容易地扩展为在后台执行 FTP。 AsyncTask 也可以支持 Progress,虽然我觉得教程里没有提到。

    基本上您的upload 函数需要移动到doInBackground,连接代码也是如此。见http://geekjamboree.wordpress.com/2011/11/22/asynctask-call-web-services-in-android/

    【讨论】:

    • 谢谢,这帮助我理解了更多,虽然我不完全确定如何实现它?我以前从来没有处理过异步任务,所以我完全没有任何经验
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多