当前位置: 首页 > 面试题库 >

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

长孙阳成
2023-03-14
问题内容

我想使用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?


问题答案:

您已经将ArrayList 设为 static
,也将其设为public。并以您的班级名称使用该名称。并在onPostExecute()中填充您的ArrayList;喜欢

     protected void onPostExecute(ArrayList<String>... result) {

    if(YourClassName.directoriesTeacher.size()>0)
     {
       YourClassName.directoriesTeacher.clear();
      }

      YourClassName.directoriesTeacher.addAll(result);

     }


 类似资料:
  • 我希望在调用/退出子func时结束父func中的执行

  • 我已经阅读了很多stackoverflow的页面,但是我无法将我的ArrayList复制到另一个类中。下面是一个场景,我正在构建一个快速的图书储蓄应用程序,类似于图书馆中的应用程序,但更简单(用于学校)。 我有我的主库类(带有main),它为主菜单/选项设置了swing。 我有一个带有新书构造函数的book类,如下所示: 在这个类中,我在确认按钮上添加了一个,以确认上要作为对象添加的输入,如下所示

  • 我的想法是,我启动一个异步任务,从Tweeter获取状态...在这里之前一切正常...但是当我遇到一些特定的tweets时,我需要用服务器上的一些信息来修改它们,这里我将进行另一个网络操作,因为我需要等待,直到我从服务器上获取信息,我做: 这是从doInBackground()方法中的allready启动的AsyncTask启动的... 我知道我可以在AsyncTask中添加方法并在doInBac

  • 我有一个名为TwoNumbers的类,它创建一个包含两个数字的对象。我创建了一个包含此对象的ArrayList<>,并希望将这些对象复制到新的ArrayList中。 问题是我只想将不同的对象复制到新的ArrayList中。当对象内部的数字可能相同时,Java将每个对象视为不同的对象,我不知道如何阻止它复制每个对象。 我的TwoNumber类:公共TwoNumbers(int n1,int n2)

  • 我看了其他问题,但我无法澄清从另一个任务调用一个任务的疑问,我有以下代码: parseJSON是一个任务,当我运行程序时,它什么也不做,甚至不调用任务,这就像Android为了安全而忽略的一样。

  • 我有一个将arraylist传递给另一个意图的代码,如何将更新后的arraylist的值返回给主意图? 主意图代码中的数组列表: 我必须再次将数组列表传递给主要意图吗?像这样: