2012-08-31 101 views
0

我正在使用apache的FTPClient從我的服務器獲取特定文件的大小。所以,我在android中遇到的錯誤是530 You aren't logged in。而我的代碼如下,我已經在純Java中進行了測試。我不知道爲什麼這個錯誤發生在Android上,但Java中所有的東西都沒問題。Apache FTPClient:530您尚未登錄

client.connect("my-server-ip"); 
client.login("username", "password"); 
client.setKeepAlive(true); 
client.setFileType(FTP.BINARY_FILE_TYPE, FTP.BINARY_FILE_TYPE); 
client.setFileTransferMode(FTP.BINARY_FILE_TYPE); 

client.sendCommand("SIZE " + "file-path"); 

try { 
    sizeStr = client.getReplyString().trim(); 
    this.M_fileData.M_contentLength = Long.parseLong(sizeStr.split(" ")[1]); 
    System.out.println(sizeStr); 
} catch (NumberFormatException e) { 
    e.printStackTrace(); 
    client.disconnect(); 
} 

純Java的結果是:213 1757682,而Android的結果是530 You aren't logged in

任何人都可以解釋我如何解決這個問題嗎?

在此先感謝。

+1

的FTPClient.login()方法並返回一個布爾以指示成功/失敗。您應該檢查確認登錄成功。我的猜測是login()方法失敗,這就是爲什麼你得到530錯誤。 –

+0

另外,根據文檔http://commons.apache.org/net/api-3.1/org/apache/commons/net/ftp/FTPClient.html,你可以在connect()方法之後檢查getReplyCode()確認它連接到服務器。您也可以在每個操作後調用getReplyCode()來檢查響應狀態。 –

+0

@Steven Mastandrea:login()在'android'中返回false並在'Java'中返回true: - / –

回答

1

-首先,我希望您確定您已授予android.permission.INTERNET權限。

那麼爲了進一步的參考,我給你的代碼,我用我的android應用程序下載音樂剪輯。

我已經使用了Apache's commons library

public void goforIt(){ 


     FTPClient con = null; 

     try 
     { 
      con = new FTPClient(); 
      con.connect("50.xx.xx.xx"); 

      if (con.login("Adminxxxxx", "KUjWbk361wobbyl-xxxxxx")) 
      { 
       con.enterLocalPassiveMode(); // important! 
       con.setFileType(FTP.BINARY_FILE_TYPE); 
       String data = "/sdcard/vivek.m4a"; 

       OutputStream out = new FileOutputStream(new File(data)); 
       boolean result = con.retrieveFile("vivekm4a.m4a", out); 
       out.close(); 
       if (result) Log.v("download result", "succeeded"); 
       con.logout(); 
       con.disconnect(); 
      } 
     } 
     catch (Exception e) 
     { 
      Log.v("download result","failed"); 
      e.printStackTrace(); 
     } 



    }