java - 如何将ArrayList从AsyncTask返回到另一个类?

标签 java android android-asynctask ftp-client

我想使用 AsyncTask 从服务器获取 Ftp 文件夹列表,并将文件夹名称 ArrayList 返回到主类并更新微调器适配器。

在主课中,我得到了带有适配器的微调器

//the array i want to update in AsyncTask
static ArrayList<String> directoriesTeacher = new ArrayList<String>();

//The adapter
createfile_spinTeacher = (Spinner) findViewById(R.id.createfile_spinTeacher);   
final ArrayAdapter<String> dataAdapterTeacher = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,directoriesTeacher);
dataAdapterTeacher.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
createfile_spinTeacher.setAdapter(dataAdapterTeacher);

AsyncTask 中的一个:

    package com.nedoGarazas.learnanylanguage;

    import java.util.ArrayList;

    import org.apache.commons.net.ftp.FTP;
    import org.apache.commons.net.ftp.FTPClient;
    import org.apache.commons.net.ftp.FTPFile;
    import org.apache.commons.net.ftp.FTPReply;

    import android.os.AsyncTask;
    import android.util.Log;

    public class FtpTeacher extends AsyncTask<ArrayList<String>, Void, ArrayList<String>> {
    private static final String TAG = "MyFTPClient";
    public FTPClient mFTPClient = null; 
     ArrayList<String> ftpTeacher = new ArrayList<String>();
    @Override
    protected ArrayList<String> doInBackground(ArrayList<String>... params) {
        {                       
            try {
                mFTPClient = new FTPClient();
         // connecting to the host
                mFTPClient.connect("host.ftp.com", 21);

          // now check the reply code, if positive mean connection success
                if     (FTPReply.isPositiveCompletion(mFTPClient.getReplyCode())) {
      // login using username & password
                    boolean status = mFTPClient.login("admin", "admin");
                    if(status == true){

                            try {
                                FTPFile[] ftpFiles = mFTPClient.listFiles("/Wordsftp/");
                                int length = ftpFiles.length;

                                for (int i = 0; i < length; i++) {
                                    String name = ftpFiles[i].getName();
                                    boolean isDirectory = ftpFiles[i].isDirectory();

                                    if (isDirectory) {
//adding to arraylist
                                        ftpTeacher.add(name);
                                        Log.i(TAG, "Yra : " + name);
                                    }
                                    else {
                                        Log.i(TAG, "Directory : " + name);

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


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


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

    protected ArrayList<String>[] onPostExecute(ArrayList<String>... result) {
        ////How to return?

    }

    }

那么我应该如何用主类中的ArrayList替换AsyncTask中的arraylist并动态更新spinner updater?

最佳答案

-- 伪代码--

创建自定义界面,如下所示:

public interface IAsyncTask {

    void IAmFinished(ArrayList<Object> arrayList);

}

AsyncTask 添加构造函数:

private IAsyncTask asyncTaskListener;

public MyAsyncTask(IAsyncTask asyncTaskListener){
     this.asyncTaskListener = asyncTaskListener;
}

AsyncTaskPostExecute 中:

public void onPostExecute(List<String> list) {
    asyncTaskListener.IAmFinished(list);
}

在启动 AsyncTaskActivity 中:

MyAsyncTask asyncTask = new MyAsyncTask(this);
asyncTask.execute(..);

实现接口(interface):

public class MyActivity implements IAsyncTask

实现方法:

public void IAmFinished(ArrayList<Object> list){
    // Do whatever you want with your returned object
}

关于java - 如何将ArrayList从AsyncTask返回到另一个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22325840/

相关文章:

java - 将 ZipEntry 数据写入字符串

android - JSON异常 : End of input at character 0

java - 将 3 个列表从 asynctask 类发送到另一个类

java - 错误记录器和验证身份验证java

java - Mysql datetime 变为 0000-00-00 00 :00:00 in mysql version 5. 6

java - Android 枚举反射

Android Play 控制台 : internal test track is not usable when version code in other track is higher

Java二叉搜索树递归删除删除元素

Java MTLS 主题和发行者顺序

java - 如何在asynctask或非ui线程android中集成admob插页式广告