Я думаю, что у меня была аналогичная проблема, как в этом посте: Return ArrayList and use it in another method problm.Проблемы с доступом к классам внутри ArrayList
В нескольких классах ArrayList < ...> будет создан с "новым". В этом списке я храню несколько DataContainer (определенный другим классом).
Теперь, если я сохранил все классы данных, я верну этот список обратно в свою деятельность через «OnMessageReceived».
Странная вещь, иногда она работает, но в основном я получаю пустой список.
Я сжал код для лучшего обзора. Если я отлаживаю, я могу видеть, что данные доступны до тех пор, пока они не перейдут в метод «public void messageReceived (final ArrayList _Container) {...}"
Возможно ли такое возвращение?
Некоторые Код:
(класс 1) Способ получения данных:
public boolean run() {
try {
...
try {
....
while (mRun) {
if(in.ready()) {
...
...
mMessageListener.messageReceived(_ConvertData.GetMessage(new String(Puffer).substring(0,length)));
}
}
}
}
}
(Class 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? –
Похоже, вы уже в основном там. Если вы использовали отладчик для поиска метода, в котором возникла проблема, вы должны пройти этот метод и узнать, когда что-то неожиданное произойдет с вашим контейнером. У меня было что-то подобное со мной, и мне пришлось сделать много пошаговой отладки, чтобы отследить ее. Проблема заключалась в непреднамеренном размещении закрывающей скобки, которая включала некоторый код инициализации, который я не хотел запускать для конкретного случая. Я просто переместил скобу, чтобы исправить ситуацию. Так как вы вложенные в брекеты, это может быть проблемой. – scottb