Android AsyncTask在完成工作后返回值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android AsyncTask在完成工作后返回值相关的知识,希望对你有一定的参考价值。

这是我的第一篇文章。我为不好的英语道歉。我已经阅读了很多关于这个主题的问题。

编写一个应用程序,从服务器上的数据库向客户端下载电话号码和消息。

public class Connect extends AsyncTask<String,Integer,ArrayList<CUSTOMER>>{
ArrayList<CUSTOMER> clients= new ArrayList<CUSTOMER>();
 if(type.equals("login"))
    {
    //... conection code
    while((line = bufferedReader.readLine())!= null) {
                if (line.equals(error)) {

                    break;
                } else {

                    result += line + "
";                        
                    String podziel = new String(line);
                    String[] tab = null;
                    tab= podziel.split(";");
                    for (int i = 0; i < tab.length; i++) {
                        Log.e("peta "+Integer.toString(i), tab[i]);
                    }
                    licznik++;
                    CUSTOMER C= new CUSTOMER(Integer.parseInt(tab[0]), tab[1], tab[2]);
                    clients.add(C);
                    Thread.sleep(3000);
                    //Log.e("k "  , clients.get(0).getId()+" "+clients.get(0).getNumer()+" "+clients.get(0).getDescryption()+"
");

                }
            }

            return clients;
}

1:

public class MainActivity extends AppCompatActivity {

ArrayList<CUSTOMER> to_sent= new ArrayList<CUSTOMER>();

    public void conn(View view)  {
    String type="login";
    Connect connect = new Connect(this, type);
    to_sent=connect.execute(domena,  DB_name, name, password, ip).get();
    }
 }

2:

public class MainActivity extends AppCompatActivity {

ArrayList<CUSTOMER> to_sent= new ArrayList<CUSTOMER>();

    public void conn(View view)  {
    String type="login";
    Connect connect = new Connect(this, type);
    connect.execute(domena,  DB_name, name, password, ip).get();
    to_sent=connect.clients;
    }
 }

3:

    public void sent(View view) {
    String type="sent";
    Connect connect = new Connect(this, type);
    connect.clients=to_sent;
    connect.execute(domena,  DB_name, name, password, ip);


}

如果他使用第一种方法,则无法看到UI块和ProgresDialog。另一个在我看来不正确,但它与ProgresDialog正常工作。尽可能简单地将ArrayList客户端返回到Main Activity?我需要这个数组到下一个按钮。

如果我写错了,请告诉我。

答案

你错过了AsyncTask的全部内容。它不返回值,因为它并行执行。如果你要等到它完成,那么根本不会使用AsyncTask。任务完成后需要完成的任何代码都应该放在onPostExecute中。

以上是关于Android AsyncTask在完成工作后返回值的主要内容,如果未能解决你的问题,请参考以下文章

201709013工作日记--Android异步通信AsyncTask

Android攻城狮AsyncTask

AsyncTask 完成后关闭 Activity 并返回父 Activity

Android 多线程 AsyncTask 完成后台任务并反馈给UI

在 AsyncTask 完成后做某事

深入理解AsyncTask的工作原理