gpt4 book ai didi

java - UI线程如何等到后台线程完成处理?

转载 作者:行者123 更新时间:2023-11-30 01:13:52 24 4
gpt4 key购买 nike

我在主线程中有这段代码:

//在 MyAsyncTask doinBackground 和 onPostExecute 中用项目填充我的 secondArray

public class MainActivity extends Activity {

ArrayList<String> secondArray = new ArrayList<String>();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ListView lv= (ListView) findViewById(R.id.listView);
final ListView lv2= (ListView) findViewById(R.id.listView2);
AsyncTas o = new AsyncTas();

Toast.makeText(MainActivity.this, secondArray.get(0), Toast.LENGTH_LONG).show();

}

private class AsyncTas extends AsyncTask {
ArrayList<String> firstArray = new ArrayList<String>();
@Override
protected ArrayList<String> doInBackground(Object[] params) {
firstArray.add("item1");
firstArray.add("item2");
firstArray.add("item3");
try {
Thread.sleep(1200);
} catch (InterruptedException e) {
e.printStackTrace();
}
return firstArray;

}
@Override
protected void onPostExecute(ArrayList<String> o) {
secondArray.clear();
secondArray.addAll(o);

}
}
}

但我有一个由 java.lang.IndexOutOfBoundsException 引起的错误:无效索引 0,大小为 0

我的问题是如何挂断或让主线程等待直到后台结束所有处理,谢谢??

我在 Waiting till the async task finish its work 中找到了答案但它对我不起作用..

最佳答案

2 分 - 你实际上并没有执行你的异步任务 - 你用

创建它
AsyncTas o = new AsyncTas();

但是你需要打电话

o.execute();

下一个问题是 Toast 立即尝试访问 由任务创建的数据。你需要移动

Toast.makeText(MainActivity.this, secondArray.get(0), Toast.LENGTH_LONG).show();

...到任务的 onPostExecute() 方法:

@Override
protected void onPostExecute(ArrayList<String> o) {
secondArray.clear();
secondArray.addAll(o);
Toast.makeText(MainActivity.this, secondArray.get(0), Toast.LENGTH_LONG).show();
}

这意味着 Toast 只会在数据准备好并在 UI 线程中执行时执行。

关于java - UI线程如何等到后台线程完成处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38160772/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com