gpt4 book ai didi

java - 如何防止列表字段自动刷新后显示重复数据

转载 作者:行者123 更新时间:2023-12-01 14:58:04 24 4
gpt4 key购买 nike

我使用下面的代码每分钟刷新一个列表字段,其中包含从 xml Web 服务返回的数据。但第一次刷新后,数据会重复。如何防止重复?

public final class MyScreen extends MainScreen implements ListFieldCallback
{
ResponseHandler handler = new ResponseHandler();
ListField listUsers = new ListField(handler.getItem().size());
Manager mainManager = getMainManager();

protected void onUiEngineAttached(boolean attached) {
if (attached) {
Timer timer = new Timer();
// schedule the web service task to run every minute
timer.schedule(new WebServiceTask(), 0, 3000);
}
}

public MyScreen() {
setTitle("Uikro");
listUsers.setEmptyString("No Users found", 0);
listUsers.setCallback(this);
add(listUsers);
handler.getItem().removeAllElements();
}

private class WebServiceTask extends TimerTask {
public void run() {
//Fetch the xml from the web service
String wsReturnString = GlobalV.Fetch_Webservice("myDs");
//Parse returned xml
SAXParserImpl saxparser = new SAXParserImpl();
ByteArrayInputStream stream = new ByteArrayInputStream(wsReturnString.getBytes());
try {
saxparser.parse( stream, handler );
}
catch ( Exception e ) {
response.setText( "Unable to parse response.");
}

// now, update the UI back on the UI thread:
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run() {
//Return vector sze from the handler class
int currentIndex = listUsers.getSelectedIndex();
int scrollPosition = getMainManager().getVerticalScroll();
//Return vector sze from the handler class
listUsers.setSize(handler.getItem().size());
listUsers.setSelectedIndex(currentIndex);
getMainManager().setVerticalScroll(scrollPosition);
}
});
}
}

public void drawListRow(ListField list, Graphics g, int index, int y, int w) {
String personToDraw = (String) this.get(list, index);
int drawColor = Color.RED;
g.setColor(drawColor);
g.drawText(personToDraw, 0, y, 0, w);
}

// get the selected index from the correct Vector
public Object get(ListField list, int index) {
return handler.getItem().elementAt(index);
}

public void insert(String toInsert, int index) {
handler.getItem().insertElementAt(toInsert, index);
}

public int getPreferredWidth(ListField list) {
return Display.getWidth();
}

public int indexOfList(ListField listField, String prefix, int start) {
return handler.getItem().indexOf(prefix, start);
}
}

public class ResponseHandler extends DefaultHandler
{
boolean username=false;
Vector _vectorUser = new Vector();

public void startElement(String uri, String localName, String qName, Attributes attributes){
if (qName.equalsIgnoreCase("U_Username")){
username = true;
}
}

public void characters(char[] ch, int start, int length) {
if (username){
_vectorUser.addElement(new String( ch, start, length ));
username=false;
}
}

Vector getItem(){
return _vectorUser;
}
}

最佳答案

所以,我认为问题出在 ResponseHandler 类中。该类使用成员变量_vectorUser来存储数据。该 vector 是在创建 ResponseHandler 时创建的,并在调用 characters(char[],int,int) 方法时添加元素。

但是,_vectorUser从未真正被清除(它在使用之前已被清除,但这并不能阻止此问题)。

因此,您应该在每次向网络服务请求新数据时清除 vector :

private class WebServiceTask extends TimerTask {
public void run() {
//Fetch the xml from the web service
String wsReturnString = GlobalV.Fetch_Webservice("myDs");
//Parse returned xml
SAXParserImpl saxparser = new SAXParserImpl();
ByteArrayInputStream stream = new ByteArrayInputStream(wsReturnString.getBytes());
try {
// clear out the vector first
handler.getItem().removeAllElements();
saxparser.parse( stream, handler );
}
catch ( Exception e ) {
response.setText( "Unable to parse response.");
}

或者,只需创建一个新的ResponseHandler,它也将创建一个新的 vector :

private class WebServiceTask extends TimerTask {
public void run() {
//Fetch the xml from the web service
String wsReturnString = GlobalV.Fetch_Webservice("myDs");
//Parse returned xml
SAXParserImpl saxparser = new SAXParserImpl();
ByteArrayInputStream stream = new ByteArrayInputStream(wsReturnString.getBytes());
try {
// create a new handler
handler = new ResponseHandler();
saxparser.parse( stream, handler );
}
catch ( Exception e ) {
response.setText( "Unable to parse response.");
}

关于java - 如何防止列表字段自动刷新后显示重复数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14086650/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com