【发布时间】:2013-05-25 04:17:20
【问题描述】:
我想我在这篇文章中遇到了类似的问题:Return ArrayList and use it in another method problm。
在多个类中,将使用“new”创建一个 ArrayList<...>。在这个列表中,我存储了几个 DataContainer(由另一个类定义)。
现在,如果我保存了所有数据类,我会通过“OnMessageReceived”将此列表返回到我的 Activity。
奇怪的是,有时它有效,但大多数情况下我得到一个空列表。
我压缩了代码以获得更好的视图。如果我调试,我可以看到数据是可访问的,直到它跳转到方法“public void messageReceived(final ArrayList _Container){...}”
这样的回归是不可能的吗?
一些代码:
(Class 1) 获取数据的方法:
public boolean run() {
try {
...
try {
....
while (mRun) {
if(in.ready()) {
...
...
mMessageListener.messageReceived(_ConvertData.GetMessage(new String(Puffer).substring(0,length)));
}
}
}
}
}
(第 2 类)
public ArrayList<DatenContainer> GetMessage(String message) {
Sensoren SensorName = Sensoren.NONE;
int _Length = 0;
int _ID = 0;
double _TimeStamp = 0;
int _NumberOfPackage = 0;
String _msg = "";
while (!message.isEmpty()) {
...
...
Container.add(new DatenContainer(_Length, _ID, _TimeStamp, _NumberOfPackage, _msg, SensorName));
}
catch (Exception e) {}
}
return Container;
}
(活动)
TCP_Client_Thread = new Thread() {
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
try {
// create a TCPClient object and
mTcpClient = new TCP_Client(new TCP_Client.OnMessageReceived() {
@Override
//here the messageReceived method is implemented
public void messageReceived(final ArrayList<DatenContainer> _Container) {
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
try {
for (DatenContainer datenContainer : _Container) {
...
...
}
} catch (Exception e) {
Show_Toast(e.toString());
}
}
});
}
},Infos.getSERVERIP(),Infos.getSERVERPORT());
}
catch (Exception e) {}
}
【问题讨论】:
-
请构造一个简单的测试用例。所有这些带有异常和 TCP 访问等的代码只是隐藏了问题......
-
你能提供一个 zip 中所有三个类的链接吗?
-
听起来你已经大部分时间在那里了。如果您使用调试器来查找发生问题的方法,您应该能够逐步执行该方法并找出容器何时发生意外情况。我也遇到过类似的事情,不得不进行大量的逐步调试来追踪它。问题是不小心放置了一个右大括号,其中包括一些我不想在特定情况下运行的初始化代码。我只是移动了支架来修理东西。由于您要嵌套很多大括号,这可能是一个问题。
-
@meewok tf-kiel.de/stuff/src.rar
-
@Oli Charlesworth 我会尝试创建一个测试用例
标签: java class methods arraylist null