2012-11-03 36 views
0

我正在开发一个项目。我的项目第一步连接到ftp。我阅读文档并在stackoverflow中搜索,但我没有找到解决方案。 我是Android开发者的初学者。当运行应用程序时,我看到LogCat和java文件下面的致命错误。我如何解决这个问题,请帮助我这个项目对我非常重要。我无法在Android中访问FTP

的logcat:

11-03 04:27:37.640: E/AndroidRuntime(330): FATAL EXCEPTION: main 
11-03 04:27:37.640: E/AndroidRuntime(330): java.lang.NoClassDefFoundError: org.apache.commons.net.ftp.FTPClient 
11-03 04:27:37.640: E/AndroidRuntime(330): at com.example.cka.MainActivity$1.onClick(MainActivity.java:33) 
11-03 04:27:37.640: E/AndroidRuntime(330): at android.view.View.performClick(View.java:2408) 
11-03 04:27:37.640: E/AndroidRuntime(330): at android.view.View$PerformClick.run(View.java:8816) 
11-03 04:27:37.640: E/AndroidRuntime(330): at android.os.Handler.handleCallback(Handler.java:587) 
11-03 04:27:37.640: E/AndroidRuntime(330): at android.os.Handler.dispatchMessage(Handler.java:92) 
11-03 04:27:37.640: E/AndroidRuntime(330): at android.os.Looper.loop(Looper.java:123) 
11-03 04:27:37.640: E/AndroidRuntime(330): at android.app.ActivityThread.main(ActivityThread.java:4627) 
11-03 04:27:37.640: E/AndroidRuntime(330): at java.lang.reflect.Method.invokeNative(Native Method) 
11-03 04:27:37.640: E/AndroidRuntime(330): at java.lang.reflect.Method.invoke(Method.java:521) 
11-03 04:27:37.640: E/AndroidRuntime(330): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
11-03 04:27:37.640: E/AndroidRuntime(330): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
11-03 04:27:37.640: E/AndroidRuntime(330): at dalvik.system.NativeStart.main(Native Method) 
11-03 04:27:40.810: I/Process(330): Sending signal. PID: 330 SIG: 9 

-

主要活动:

Button btn = (Button) findViewById(R.id.button1); 
    final TextView tv = (TextView) findViewById(R.id.textView1);   
    btn.setOnClickListener(new View.OnClickListener() {   
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     core f = new core(); 
     f.mFTPClient = new FTPClient(); 
     f.ftpConnect("**.***.***.**", "****", "****", 21); 
     try { 
      tv.setText(f.ftpStatus()); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
    }); 

-

core.java

package com.example.cka; 

import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import org.apache.commons.net.ftp.*; 
import android.util.Log; 

public class core { 


    private static final String TAG = null; 
    public FTPClient mFTPClient = null; 

    public boolean ftpConnect(String host, String username,String password, int port){ 

     try { 
      mFTPClient = new FTPClient(); 
      // connecting to the host 
      mFTPClient.connect(host, port); 

      if (FTPReply.isPositiveCompletion(mFTPClient.getReplyCode())) { 
      boolean status = mFTPClient.login(username, password); 

      mFTPClient.setFileType(FTP.BINARY_FILE_TYPE); 
      mFTPClient.enterLocalPassiveMode(); 

      return status; 
      } 
     }  

     catch(Exception e) { 
      Log.d(TAG, "Error: could not connect to host " + host); 
     } 

     return false; 
    } 



    public boolean ftpDisconnect() 
    { 
     try { 
      mFTPClient.logout(); 
      mFTPClient.disconnect(); 
      return true; 
     } catch (Exception e) { 
      Log.d(TAG, "Error occurred while disconnecting from ftp server."); 
     } 

     return false; 
    } 

    public String ftpStatus() throws IOException{ 

      String status = mFTPClient.getStatus(); 
      return status; 
    }  
} 
+0

你给INTERNET权限在AndroidManifest.xml – Lucifer

+0

是的,我有一个 <使用许可权的android:name = “android.permission.INTERNET对”/> – ir2d2

回答

1

org.apache.commons.net.ftp.*似乎没有包含在android API中。尝试将库添加到您的项目/库文件夹。

编辑:你的FTP库是否包含在构建路径中?右键单击该项目并转至Properties-> Java Build Path-> Libraries,单击Add JAR,然后从项目的/ libs文件夹添加库。然后点击“订购和导出”,并确保它在生成时被选中以包含在您的应用程序中。

+0

哦,它的工作,当我tikked感谢很多:) – ir2d2

+0

西蒙告诉你同样的事情... – alfasin

+0

不完全。将JAR添加到/ libs文件夹包含在项目中,但不会使其成为编译后的.apk文件的一部分。这告诉Eclipse JAR应该与.apk一起导出,以便Android在需要时可以找到该类,因为它不是Android API的一部分。 – Techwolf

1

阅读日志输出:java.lang.NoClassDefFoundError: org.apache.commons.net.ftp.FTPClient。把你的FTP库放到libs文件夹中。

+0

感谢这个答复我已经把FTP libary到libs文件夹。 – ir2d2

0

根据您的堆栈跟踪,您缺少org.apache.commons.net.ftp.FTPClient类。这可能意味着你没有在你的项目中包含该库。你应该把ftp客户端jar文件放到project/libs目录中

+0

我有jar文件是apache-commons-net.jar和commons-net-ftp-2.0.jar,在Referenced Libraires中为什么仍然无法工作,我无法理解。 – ir2d2