1
HTTPUrlConnection.setContentHandlerFactory()
方法拋出異常說工廠已經定義。我明白那個。是否可以取消設置工廠並更改內容處理工廠?如何在HTTPUrlConnection中取消設置ContentHandlerFactory
HTTPUrlConnection.setContentHandlerFactory()
方法拋出異常說工廠已經定義。我明白那個。是否可以取消設置工廠並更改內容處理工廠?如何在HTTPUrlConnection中取消設置ContentHandlerFactory
factory
字段URLConnection
(超類HttpURLConnection
)是一個靜態包訪問成員變量。它通過API修改的唯一地方是setContentHandlerFactory()
方法,正如您已經注意到的,您只能爲應用程序中的任何URL連接(或子類)調用一次。我相信有一種解決方法,但它並不理想:您可以使用反射來重置和/或更改factory
字段的值(假設您的應用程序具有相應的安全管理員權限以製作field accessible)。
這裏有一個片段,將這樣做:
ContentHandlerFactory newFactory = ... // create factory instance
factoryField = URLConnection.class.getDeclaredField("factory");
factoryField.setAccessible(true);
factoryField.set(null, newFactory);
這樣做的問題是,API並不期望這將不會發生,所以有可能是不必要的副作用(因爲它適用於所有的網址連接子類)。基本上你會冒這個風險。
我試過你的建議,但它仍然會顯示同一工廠已經定義的錯誤。 – artsince 2010-05-03 06:18:43
@自:我沒有任何這樣的問題。你應該注意到我上面的代碼片段實際上是設置一個新的工廠實例。如果你想「重置」它爲null(所以你可以再次調用'setContentHandlerFactory'),你應該這樣做:'factoryField.set(null,null);' – Ash 2010-05-03 10:03:34
是的,實際上我已經將該字段設置爲null。如果此方法適用於您,我可能會遇到另一個問題... – artsince 2010-05-03 12:53:37