我想我在这篇文章中遇到了类似的问题:Return ArrayList and use it in another method problm。
在多个类中,将使用“new”创建 ArrayList<...>。在这个列表中,我存储了几个 DataContainer(由另一个类定义)。
现在,如果我保存了所有数据类,我会通过“OnMessageReceived”将此列表返回给我的活动。
奇怪的是,有时它有效,但大多数情况下我得到一个空列表。
我压缩了代码以获得更好的视图。如果我调试,我可以看到数据是可访问的,直到它跳转到方法“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) {}              
        }