2012-01-05 78 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