【发布时间】:2010-12-20 01:00:32
【问题描述】:
我查看了Android - how to update ListView item that is currently displayed 和http://commonsware.com/Android/excerpt.pdf 以及Android 文档,但我仍然不明白。
我的问题:
使用处理程序,我正在尝试更新我从从 MySQL 数据库检索数据的 Web 服务填充的 Stock 数据多列列表视图。
为了更新列表视图,我调用了一个 servlet,它返回一个我使用 DOM 循环的 XML。
我找不到将新数据(来自 XML)应用到 Listview 中的有效方法,尽管只需要更新第三列(Trade Column)。此外,当我尝试从 ListView 行投射视图时,我得到一个 NullPointerException 并且无法弄清楚原因。
到目前为止我所做的代码如下。
java代码:
private void updateUI() throws Exception
{
Date dt = new Date();
int hours = dt.getHours();
int minutes = dt.getMinutes();
int seconds = dt.getSeconds();
String curTime = hours + ":" + minutes + ":"+ seconds;
refreshHandler.sleep(60000);
ListView listview = (ListView) findViewById(R.id.listview);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse("http://10.0.0.29:8080/CI3500/FTSEXML");
//Filter and store ALL 'update' XML elements into node array
NodeList nodeList = doc.getElementsByTagName("update");
View v = null;
TextView t = null;
Adapter adapter = listview.getAdapter();
for (int i = 0; i < adapter.getCount(); i++)
{
v = listview.getChildAt(i);
t = (TextView)v.findViewById(R.id.item2);
String companyCode = t.getText().toString(); //Column 1
for(int j = 0; j < nodeList.getLength(); j++)
{
if(companyCode == nodeList.item(j).getFirstChild().getNodeValue())
{
//TODO Update Listview Code
}
}
}
txtStatus.setText(String.valueOf("Last Update: " + curTime));
}
listview映射如下:
// create the grid item mapping
String[] columns = new String[] {"col_1", "col_2", "col_3" };
int[] rows = new int[] { R.id.CodeColumn, R.id.NameColumn, R.id.TradeColumn };
【问题讨论】:
标签: java android android-widget