在执行doInBackground时出错 [英] An error occured while executing doInBackground

查看:164
本文介绍了在执行doInBackground时出错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想与FTP连接并获取弗罗姆有文件列表。这是我的code:

 公共类MainActivity延伸活动{@覆盖
保护无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.activity_main);
    任务getson =新任务();
    getson.execute();}FTPClient客户端;公共FTPClient connectWithFTP()抛出IOException
     客户端=新FTPClient();
     尝试{         client.connect(服务器,21);
         client.login(用户名,密码);
         的System.out.println(状态::+ client.getReplyString());
         INT回复= client.getReply code();
            如果(!FT preply.isPositiveCompletion(回复)){
                抛出新的异常(连接失败:+ client.getReplyString());
            }
            尝试{
                client.enterLocalPassiveMode();
                如果(!client.setFileType(FTP.BINARY_FILE_TYPE)){
                    Log.v(的getClass()的toString()设置二进制文件类型失败。);
                }
            }赶上(例外五){
                e.printStackTrace();
            }
         checkFiles(客户端);
    }赶上(例外五){
        的System.out.println(状态::+ client.getReplyString());
    }
      返回客户端;
}私有类的任务扩展的AsyncTask<太虚,太虚,FTPClient> {    @覆盖
    在preExecute保护无效(){
        //手术前做的东西
    }
    @覆盖
    保护FTPClient doInBackground(虚空...... PARAMS){
        FTPClient FTP = NULL;
        尝试{
            的ftp = connectWithFTP();
        }赶上(IOException异常五){
            e.printStackTrace();
        }
        返回null;
    }
}公共无效disconnectWithFTP()抛出IOException
    client.logout();
    client.disconnect();
}私人无效checkFiles(FTPClient客户端){
      尝试{
          FTPFile [] = ftpFiles clients.listFiles();
          INT长度= ftpFiles.length;
          的for(int i = 0; I<长度;我++){
            字符串名称= ftpFiles [I] .getName();
            日历日期= ftpFiles [I] .getTimestamp();
            Log.v(AASD名+,+日期);          }
        }赶上(例外五){
          e.printStackTrace();
        }
}
@覆盖
公共布尔onCreateOptionsMenu(菜单菜单){
    //充气菜单;如果是present这增加了项目操作栏。
    。getMenuInflater()膨胀(R.menu.main,菜单);
    返回true;
}}

的logcat

  20 01-22:05:46.994:E / AndroidRuntime(616):致命异常:AsyncTask的
1#01-22 20:05:46.994:E / AndroidRuntime(616):了java.lang.RuntimeException:05:46.994:E / AndroidRuntime(616):在机器人在执行doInBackground()01-22 20时出错.os.AsyncTask $ 3.done(AsyncTask.java:200)
01-22 20:05:46.994:E / AndroidRuntime(616):在java.util.concurrent.FutureTask中$ Sync.innerSetException(FutureTask.java:274)01-22 20:05:46.994:E / AndroidRuntime(616) :在java.util.concurrent.FutureTask.setException(FutureTask.java:125)
01-22 20:05:46.994:E / AndroidRuntime(616):在java.util.concurrent.FutureTask中$ Sync.innerRun(FutureTask.java:308)
01-22 20:05:46.994:E / AndroidRuntime(616):在java.util.concurrent.FutureTask.run(FutureTask.java:138)
01-22 20:05:46.994:E / AndroidRuntime(616):在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
01-22 20:05:46.994:E / AndroidRuntime(616):在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:581)
01-22 20:05:46.994:E / AndroidRuntime(616):在java.lang.Thread.run(Thread.java:1019)
01-22 20:05:46.994:E / AndroidRuntime(616):java.lang.NoClassDefFoundError的:产生的原因org.apache.commons.net.ftp.FTPClient
01-22 20:05:46.994:E / AndroidRuntime(616):在com.example.listfile.MainActivity.connectWithFTP(MainActivity.java:38)
01-22 20:05:46.994:E / AndroidRuntime(616):在com.example.listfile.MainActivity $ task.doInBackground(MainActivity.java:75)
01-22 20:05:46.994:E / AndroidRuntime(616):在com.example.listfile.MainActivity $ task.doInBackground(MainActivity.java:1)
01-22 20:05:46.994:E / AndroidRuntime(616):在android.os.AsyncTask $ 2.call(AsyncTask.java:185)
01-22 20:05:46.994:E / AndroidRuntime(616):在java.util.concurrent.FutureTask中$ Sync.innerRun(FutureTask.java:306)
01-22 20:05:46.994:E / AndroidRuntime(616):... 4个


解决方案

 产生的原因:java.lang.NoClassDefFoundError的:org.apache.commons.net.ftp.FTPClient
在com.example.listfile.MainActivity.connectWithFTP(MainActivity.java:38)

未找到的Apache FTPClient库。

您必须将库添加到您的项目。最重要的是将库复制到你的项目库文件夹中。然后,你可以参考这种方式(假设你使用Eclipse):

项目 - >属性 - > Java构建路径 - >库 - >添加罐

不要忘了在勾选订单和出口库已添加的jar后。

I want to connect with FTP and get frome there list of files. This is my code:

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;
}

}

Logcat

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) 

The apache FTPClient library not found.

You have to add the library to your project. The important thing is to copy the library to your projects "libs" folder. Then you can reference it this way (assuming you use Eclipse):

Project --> Properties --> Java Build Path --> Libraries --> Add Jars

Don't forget to tick the library in "Order and Export" after you have added the jar.

这篇关于在执行doInBackground时出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆