0
我想我在這篇文章中遇到類似的問題:Return ArrayList and use it in another method problm。訪問ArrayList內部類的問題
在幾個類ArrayList < ...>將被創建與「新」。在此列表中,我存儲了多個DataContainer(由另一個類定義)。
現在,如果我保存了所有的數據類,我會通過「OnMessageReceived」將此List返回到我的Activity。
奇怪的是,有時它可以工作,但大多數情況下我會得到一個空的列表。
我壓縮了代碼以獲得更好的視圖。如果我調試我可以看到數據是可訪問的,直到它跳轉到方法「公共無效messageReceived(最終ArrayList _Container){...}」
這種返回不可能嗎?
一些代碼:
(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中的所有三個類嗎? –
這聽起來像你已經大部分在那裏。如果您使用調試器來查找發生故障的方法,則應該能夠逐步檢查該方法,並找出容器意外事件的發生時間。我有類似的事情發生在我身上,不得不做很多逐步調試來追蹤它。問題在於不小心放置了一個閉合大括號,其中包含了一些我不希望爲特定情況運行的初始化代碼。我只是移動支架來修理東西。既然你嵌套了大括號,這可能是一個問題。 – scottb