我正在开发一个我正在使用Socket.io
的android项目。
我从服务器获得了JSONObject
(源代码如下所示)。
在这里,我需要检查JSONObject
中的密钥以显示UI。如果我的JSONObject
有一个特定的密钥,我将继续前进,否则我将使用while循环连续点击服务器。当我得到那个特定的密钥时,我有时会得到array index out of bound exception
(这不会每次都发生),其余时间它没有显示任何错误,输出是预期的。请您查看我的源代码并帮助我解决我的错误。
源代码:
socket tmp = new socket();
In Login.class
JSONObject ca = tmp.countActiveChallenge();
while(!ca.has("myKey")){
JSONObject ca = tmp.countActiveChallenge();
}
在socket.class中 我返回一个带有该特定键的jsonobject
提前感谢您的帮助。
答案 0 :(得分:0)
那里有一些非常奇怪的事情。 HashMap
不应该抛出该异常。我能想到的唯一解释是:
HashMap
对象而导致的。HashMap
的内部数据结构。HashMap
存在错误。第一个解释是最有可能的,IMO。我希望tmp.countActiveChallenge()
返回对其他线程正在更新的JSONObject
的引用。显然,这部分代码没有同步......
我认为使用JSONObject
有一个很好的解决方案。您可以做的最好的事情是更改此代码,以及更新地图以在外部进行同步的代码。但这可能会导致争用问题,特别是如果有很多条目。
也许更好的选择是使用ConcurrentHashMap
代替JSONObject
。