我更新了NetBeans的CodenameOne插件,此后每个连接都会产生以下错误
java.lang.ClassCastException:无法将java.lang.Boolean强制转换为java.util.Hashtable
在com.codename1.impl.CodenameOneImplementation.getCookiesForURL(CodenameOneImplementation.java:3934)
在com.codename1.io.ConnectionRequest.performOperation(ConnectionRequest.java:308)
在com.codename1.io.NetworkManager $ NetworkThread.run(NetworkManager.java:263)
在com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)
用于推送通知注册的连接甚至会产生此错误。
有什么帮助吗?
最佳答案
之所以出现此问题,是因为我在一些ConnectionRequest调用中存储,删除和还原了“ Cookies”存储对象。我应该已经将ConnectionRequest的setCookiesEnabled方法设置为false。
使用了错误的代码
try {
ConnectionRequest connectionRequest = new ConnectionRequest() {
@Override
protected void initConnection(Object connection) {
super.initConnection(connection);
storeAndDeleteUserCookiesData();
}
@Override
protected void readResponse(InputStream input) throws IOException {
}
@Override
protected void postResponse() {
restoreCookies();
}
@Override
protected void handleException(Exception err) {
restoreCookies();
}
@Override
protected void handleErrorResponseCode(int code, String message) {
restoreCookies();
}
@Override
public void retry() {
super.retry();
}
};
NetworkManager.getInstance().addToQueue(connectionRequest);
} catch (Exception ex) {
restoreCookies();
}
protected void storeAndDeleteUserCookiesData() {
if (Storage.getInstance().exists("Cookies")) {
Storage.getInstance().writeObject("Cookies_" + appName, Storage.getInstance().exists("Cookies"));
Storage.getInstance().deleteStorageFile("Cookies");
}
Storage.getInstance().clearCache();
}
protected void restoreCookies() {
Storage.getInstance().writeObject("Cookies", Storage.getInstance().readObject("Cookies_" + appName));
Storage.getInstance().clearCache();
}
解决方法是
ConnectionRequest connectionRequest = new ConnectionRequest() {
};
connectionRequest.setCookiesEnabled(false);