java Android视图不能被其他线程触及?
我是Android的新手,正在为自己创建一个小型FTP下载管理器。。我使用多线程,每个线程处理一个下载或上传。在主要活动中。java,我在视图中使用了两个微调器。一个用于列出服务器上的文件(可以下载),另一个用于列出我手机文件夹中的文件(可以上载)。我想在上载新文件时更新第一个(下载)微调器,在下载新文件时更新第二个(上载)微调器。但是,我无法理解如何仅在相应线程完成其工作时更新微调器。我创建了方法来更新MainActivity中的微调器。java并尝试在线程的run()结束时调用它们,以便在线程完成下载/上载后更新它们。然而,我在LogCat中得到了一个错误
安卓。看法ViewRoot$CalledFromErrorThreadException:只有创建视图层次结构的原始线程才能接触其视图
更新上载微调器的方法是:
void upScrollUpdate() {
spinup=(Spinner)findViewById(R.id.uploadspin);
spinup.setEnabled(false);
String[] upload={"No Files"};
File sdDir=Environment.getExternalStorageDirectory();
File dir=new File (sdDir.getAbsolutePath() + "/aFTP");
File[] fArray=dir.listFiles();
if(fArray.length>0) {
upload=new String[fArray.length];
}
for(int i=0;i<fArray.length;i++) {
upload[i]=fArray[i].getName();
}
ArrayAdapter<String> saaUpload=new ArrayAdapter<String>(this,安卓.R.layout.simple_spinner_dropdown_item,upload);
spinup.setAdapter(saaUpload);
if(spinup.getSelectedItem().toString().equalsIgnoreCase("No Files")) {
uploadButton.setEnabled(false);
}
spinup.setEnabled(true);
}
为什么这个方法不能从另一个线程调用,还有什么其他的解决方法,我只是想更新微调器,但我已经花了一整天的时间在这唯一的事情上
# 1 楼答案
任何与视图有关的操作都应该在UI线程上完成。 您可以使用activityInstance。runOnUIThread()来处理从不同线程更新视图的这种情况
参考:Android: RunOnUiThread vs AsyncTask