有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    任何与视图有关的操作都应该在UI线程上完成。 您可以使用activityInstance。runOnUIThread()来处理从不同线程更新视图的这种情况

    参考:Android: RunOnUiThread vs AsyncTask