Превратить команду FTP в задачу ASync? - PullRequest
0 голосов
/ 05 января 2012

Во-первых, не расстраивай меня за то, что я не ищу, я искал ответы на это, и пока есть ответы, я не могу понять ни одного из них.

Теперь, с этимКроме того, я пытаюсь поместить свою команду ftp в задачу ASync для 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, чтобы я мог запустить ее в фоновом режиме и обновить индикатор выполнения, а также указать, сколько байт загруженоПока?

Приветствия

РЕДАКТИРОВАТЬ Сам код работает в данный момент, мне просто нужно знать, как превратить его в асинхронную задачу

1 Ответ

1 голос
/ 05 января 2012

Не уверен, если вы спрашиваете, как использовать AsyncTask, но в случае, если вы находитесь здесь, руководство по использованию AsyncTask для отправки запросов к веб-сервису.Это может быть легко расширен для выполнения FTP в фоновом режиме.AsyncTask также может поддерживать Progress, хотя я не думаю, что это упомянуто в руководстве.

В основном ваша функция upload должна перейти на doInBackground, как и код подключения.Смотри http://geekjamboree.wordpress.com/2011/11/22/asynctask-call-web-services-in-android/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...