2012-01-05 49 views
0

首先,不要因为没有搜索而激怒我,我寻找答案,虽然有答案,但我无法理解他们中的任何一个。将FTP命令转换为ASync任务?

现在,除此之外,我试图把我的ftp命令放到Android的ASync任务中。

代码

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功能于异步任务,这样我可以运行它在后台活动并更新进度栏,并且还指出迄今为止上传了多少字节?

干杯

编辑 本身工作在此刻的代码,我只需要知道如何将它做成一个异步任务

回答

1

不知道如果你问如何使用AsyncTask但万一你在这里是一个关于使用AsyncTask向Web服务发出请求的教程。这可以很容易地扩展到在后台执行FTP。 AsyncTask也可以支持Progress,但我不认为它在本教程中提到过。

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

+0

谢谢,这有助于我更多地理解它,尽管我并不完全确定如何实现它。我以前从来没有必须使用Async任务,所以我没有任何经验 – 2012-01-05 03:25:09