目前我有14个元素添加到数组列表但我希望它们显示在listview活动中到目前为止我有:
public class ListView extends ListActivity{
static final String baseURL ="http://www.dublincity.ie/dublintraffic/cpdata.xml?1354720067473";
TextView tvcp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listview);
StringBuilder URL = new StringBuilder(baseURL);
String fullURL = URL.toString();
try{
URL website = new URL(fullURL);
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
HandelingXML gettingData = new HandelingXML();
xr.setContentHandler(gettingData);
xr.parse(new InputSource(website.openStream()));
ArrayList<CarparkNode>carparks = gettingData.getCarparks();
this.setListAdapter(
new ArrayAdapter<CarparkNode>(ListView.this,R.layout.listview, android.R.id.list, carparks)
);
}catch(Exception e){
tvcp.setText("error");
}
}
}
然而,每次我运行它都会崩溃,我不知道为什么在使用简单数组之前我已经这样做了。如果有人能够指出我做错了什么并给出一个非常感谢的解决方案!
答案 0 :(得分:4)
首先不提供类名ListView
这是Android中的预定义类
秒不要在UI线程上执行网络操作。
修改强>
原因:
Android版3.x或更多设备不允许在UI线程中执行网络操作,当您尝试这样做时,它会抛出一个异常,说明您正在UI线程上执行网络操作,即{{1 }}。所以你需要做的是创建一个单独的线程来执行网络操作或AsyncTask。
答案 1 :(得分:0)
您的崩溃最有可能android.os.NetworkOnMainThreadException
被抛出。默认情况下,应用程序现在以严格模式运行,因此操作系统可以让您知道您正在做一些非常错误的事情。
您需要在后台线程上进行任何和所有网络请求,而不是在UI线程上,这将导致UI在网络请求进行时不响应用户,并可能导致ANR对话框。
请参阅此question的答案,了解如何修复代码以符合最佳做法。