Java 在微调器小部件(Android Studio)中选择项目时没有响应

Java 在微调器小部件(Android Studio)中选择项目时没有响应,java,android,android-studio,spinner,Java,Android,Android Studio,Spinner,下面的代码从xml页面检索数据,并将数据存储在名为NameList的ArrayList中。名称列表中的元素被指定显示在微调器下拉列表中。我的问题是,每当我在微调器中选择一个项目时,控制台上都不会显示任何内容。假设显示一条消息,如代码中所示,同时显示此错误消息: Attempted to finish an input event but the input event receiver has already been disposed. 显示。有人知道我如何解决这个问题吗

下面的代码从xml页面检索数据,并将数据存储在名为NameList的ArrayList中。名称列表中的元素被指定显示在微调器下拉列表中。我的问题是,每当我在微调器中选择一个项目时,控制台上都不会显示任何内容。假设显示一条消息,如代码中所示,同时显示此错误消息:

Attempted to finish an input event but the input event receiver has already
been disposed.
显示。有人知道我如何解决这个问题吗

            boolean done = false;
            Thread thread = new Thread(new Runnable()
            {
            @Override
            public void run()
            {
                try
                {
                        try
                        {


                     URL url = new URL("http://www.xmlWebsite.ca");
                            URLConnection urlConnection = url.openConnection();
                            input = new BufferedInputStream(urlConnection.getInputStream());

//....................................

                            namesList.add(name);
                            done=true;

                        }

                    }
                    catch (IOException e1)
                    {
                        System.out.println("The URL is not valid.");
                        System.out.println(e1.getMessage());
                    }
                    catch (XmlPullParserException e)
                    {
                        System.out.println("xml error");
                    }
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
            }
        });

        thread.start();
    while (done == false)
    {
        try
        {
            Thread.sleep(1500);
        }
        catch (InterruptedException e)
        {
            e.printStackTrace();
        }
    }
        adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, namesList);
                    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
        {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
            {
                Toast.makeText(getBaseContext(), parent.getItemAtPosition(position) + " selected", Toast.LENGTH_LONG).show();
                System.out.println(parent.getItemAtPosition(position) + " selected!!!!!!!!!!!!!!!!!!");
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent)
            {

            }
        });
    }
我添加了一个while循环以等待线程完成。我不确定这是否是最有效的方法。

你知道吗-

在它的doInBackground方法中执行网络操作,在onPostExecute方法中执行适配器和操作侦听器。这是最好的处理方法


这样做,您不需要创建单独的线程并使用循环来等待网络操作完成。您还可以在从XML文件获取数据的过程中显示“进度”对话框。

令人惊讶的是,您可以在微调器中看到项目,因为此代码存在并发问题。您正在运行一个线程,该线程获取名称,将它们放入名称列表,而微调器不会等到它完成。微调器中的名称来自何处?我从从从xml网页检索的名称列表arraylist中获取名称。是的,我在这里看到了一个并发问题,也许这就是我收到错误消息的原因。我更新了代码。我添加了一个等待线程完成的while循环。我不确定这是否是最有效的方法。检查名称列表是否为空,并使用asynctask而不是线程