0
下面的代碼從xml頁面檢索數據並將數據存儲在名爲namesList的ArrayList中。 namesList中的元素被分配爲顯示在微調器下拉列表中。我的問題是,只要我在微調器中選擇一個項目,控制檯上就沒有任何東西顯示出來。 (這是假設顯示一條消息,如代碼所示)曾經有一段時間此錯誤消息:Spinner Widget中的選定項目時沒有響應(Android Studio)
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循環來等待線程完成。我不確定這是否是最有效的方式。
令人驚訝的是,您可以看到微調器中的項目,因爲此代碼存在併發問題。你正在運行一個提取名字的線程,把它們放在namesList中,而你的微調不等到它完成。 Spinner的名字來自哪裏? – inmyth
我從namesList arraylist中獲取了從xml網頁中檢索的名稱。雅,我在這裏看到一個併發問題,也許這就是我得到這個錯誤信息的原因。 –
你解決了嗎? –