Android 执行doInBackground时出错

Android 执行doInBackground时出错,android,ftp,android-asynctask,Android,Ftp,Android Asynctask,我想连接FTP并从那里获取文件列表。这是我的代码: public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); task getson = new task();

我想连接FTP并从那里获取文件列表。这是我的代码:

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    task getson = new task();
    getson.execute();

}

FTPClient client;

public FTPClient connectWithFTP() throws IOException{
     client = new FTPClient();  
     try {

         client.connect("server", 21);  
         client.login("username", "password");
         System.out.println("status :: " + client.getReplyString());
         int reply = client.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                throw new Exception("Connect failed: " + client.getReplyString());
            }
            try {
                client.enterLocalPassiveMode();
                if (!client.setFileType(FTP.BINARY_FILE_TYPE)) {
                    Log.v(getClass().toString(), "Setting binary file type failed.");
                }
            } catch(Exception e) {
                e.printStackTrace();
            } 
         checkFiles(client);
    } catch (Exception e) {
        System.out.println("status :: " + client.getReplyString());
    }
      return client;
}

private class task extends AsyncTask <Void, Void, FTPClient> {

    @Override
    protected void onPreExecute() {
        // Do stuff before the operation
    }


    @Override
    protected FTPClient doInBackground(Void... params) {
        FTPClient ftp = null;
        try {
            ftp = connectWithFTP();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}

public void disconnectWithFTP() throws IOException{
    client.logout();  
    client.disconnect();  
}

private void checkFiles(FTPClient clients){
      try {  
          FTPFile[] ftpFiles = clients.listFiles();  
          int length = ftpFiles.length;  
          for (int i = 0; i < length; i++) {  
            String name = ftpFiles[i].getName();  
            Calendar date = ftpFiles[i].getTimestamp();
            Log.v("aasd", name+", "+date);

          }  
        } catch(Exception e) {  
          e.printStackTrace();  
        }  
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

}
找不到apache FTPClient库

您必须将库添加到项目中。重要的是将库复制到项目的“libs”文件夹中。然后您可以这样引用它(假设您使用Eclipse):

项目-->属性-->Java生成路径-->库-->添加JAR


添加jar后,别忘了在“Order and Export”中勾选库。

您在lib文件夹中使用了一些外部jar吗?用户似乎自己实现了这个方法,所以我相信它不是一个外部库(这就是为什么我问它的原因)。好吧,完整的类名是“org.apache.commons.net.ftp.FTPClient”所以我猜它是外部的:)我正在库中添加jar,但我无法运行这个项目。你把它添加到“libs”文件夹了吗?您是否已将其添加到构建路径中,如我上面所述?您是否在“订单和出口”部分勾选了lib?还有,在你完成项目后,试着清理项目。哦,我只是把你的jar文件复制并通过它进入libs文件夹,这就是工作,
01-22 20:05:46.994: E/AndroidRuntime(616): FATAL EXCEPTION: AsyncTask
#1 01-22 20:05:46.994: E/AndroidRuntime(616): java.lang.RuntimeException: An error occured while executing doInBackground() 01-22 20:05:46.994: E/AndroidRuntime(616):  at android.os.AsyncTask$3.done(AsyncTask.java:200)
01-22 20:05:46.994:   E/AndroidRuntime(616):    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)                    01-22 20:05:46.994: E/AndroidRuntime(616):    at java.util.concurrent.FutureTask.setException(FutureTask.java:125) 
01-22 20:05:46.994: E/AndroidRuntime(616):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308) 
01-22 20:05:46.994: E/AndroidRuntime(616):  at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
01-22 20:05:46.994: E/AndroidRuntime(616):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 
01-22 20:05:46.994: E/AndroidRuntime(616):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 
01-22 20:05:46.994: E/AndroidRuntime(616):  at java.lang.Thread.run(Thread.java:1019)   
01-22 20:05:46.994: E/AndroidRuntime(616): Caused by: java.lang.NoClassDefFoundError: org.apache.commons.net.ftp.FTPClient 
01-22 20:05:46.994: E/AndroidRuntime(616):  at com.example.listfile.MainActivity.connectWithFTP(MainActivity.java:38) 
01-22 20:05:46.994: E/AndroidRuntime(616):  at com.example.listfile.MainActivity$task.doInBackground(MainActivity.java:75) 
01-22 20:05:46.994: E/AndroidRuntime(616):  at com.example.listfile.MainActivity$task.doInBackground(MainActivity.java:1) 
01-22 20:05:46.994: E/AndroidRuntime(616):  at android.os.AsyncTask$2.call(AsyncTask.java:185) 
01-22 20:05:46.994: E/AndroidRuntime(616):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 
01-22 20:05:46.994: E/AndroidRuntime(616):  ... 4 more
Caused by: java.lang.NoClassDefFoundError: org.apache.commons.net.ftp.FTPClient
at com.example.listfile.MainActivity.connectWithFTP(MainActivity.java:38)