gpt4 book ai didi

android - android 中的 CountDownLatch 问题

转载 作者:行者123 更新时间:2023-11-30 04:12:10 26 4
gpt4 key购买 nike

我正在使用 countdownlatch,如下例所示。此处 BackgroundDataPopulator 创建了一个 AyncTask,后者又调用 PackagePopulator 中的 displayData。但它永远不会发生并且 Activity 陷入困境。我在这里做错了什么。

public class PackagePopulator implements ServerDataProcessor {

private CountDownLatch counter=new CountDownLatch(1);
String[] packages;

public void getPagesFromServer() {
new BackgroundDataPopulator(IMgrApplication.getAppContext().getString(R.string.list),new PData(),this).execute();

}

public String[] getPages() {
try {

counter.await();
} catch (InterruptedException e) {
packages=new String[0];
}
return packages;
}

@Override
public void displayData(ServerOutput output) {


Page[] pgArray = new Page[((PageData)output).getPages().size()];
pages=new String[pgArray.length];
pgArray = ((PageData)output).getPages().toArray(pgArray);
for(int i=0;i<pgArray.length;i++){
pages[i]=pgArray[i].getName();
}
counter.countDown();

}

}





public class BackgroundDataPopulator extends AsyncTask<Void, String, ServerOutput> {
// connector=new JSONConnector();
Connector connector;
String curUrl;
ServerOutput curServerOutput;
ServerDataProcessor processor;


public BackgroundDataPopulator(String url, ServerOutput serverOutput,ServerDataProcessor curProcessor) {
//connector = new UnitTestConnector();
connector = new JSONConnector();
curUrl = url;
curServerOutput = serverOutput;
processor=curProcessor;
}

@Override
protected ServerOutput doInBackground(Void... params) {

return connector.getData(URLUtils.getFormattedUrl(curUrl),curServerOutput);
}

@Override
protected void onPostExecute(ServerOutput output) {
processor.displayData(output);
//Toast.makeText(BaseFragmentActivity.this, "Done!",Toast.LENGTH_SHORT).show();
}
}




protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
pagePopulator=new PagePopulator();
pagePopulator.getPagesFromServer();
super.onCreate(savedInstanceState);

}

public ArrayAdapter<CharSequence> getSpinnerDataArray(String item) {
return new ArrayAdapter<CharSequence>(this,android.R.layout.simple_spinner_item,pagePopulator.getPages());
}

最佳答案

目前尚不清楚您到底在做什么以及 AscynTask 的启动位置。看起来您正在同一线程上调用 await()countDown(),这就是您被阻止的原因。发布更多详细信息和/或调试您的代码。

关于android - android 中的 CountDownLatch 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10678882/

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