作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Android 应用程序。我正在使用反射来调用 CookieManager 的方法。
我在做什么:
if (Build.VERSION.SDK_INT >= 21) {
Method method;
method = CookieManager.class.getClass().getMethod("setAcceptFileSchemeCookies", boolean.class);
method.setAccessible(true);
method.invoke(null, true);
}
基本上这个方法是静态的。您可以在这里查找:https://developer.android.com/reference/android/webkit/CookieManager.html#allowFileSchemeCookies()
所以我可以在任何地方调用它,而无需启动 CookieManager。 (这甚至是计划,因为您只能在启动 CookieManager 之前设置此属性)
有什么异常(exception):
java.lang.NoSuchMethodException: setAcceptFileSchemeCookies [boolean]
at java.lang.Class.getMethod(Class.java:624)
at java.lang.Class.getMethod(Class.java:603)
at com.sample.app.CookieClass.setup(CookieClass.java:168)
at java.lang.reflect.Method.invoke(Native Method)
at com.sample.app.Application.onCreate(Application.java:111)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1036)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4728)
at android.app.ActivityThread.-wrap1(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1415)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5443)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
问题是:
现在有趣的部分来了。当我在 Application 类的 onCreate 方法中调用它时,它失败并出现此异常。但是当我稍后在我初始化 CookieManager 的地方调用它时它起作用了。这怎么可能?反射必须无处不在?为什么在 onCreate 中找不到该方法,即使它 100% 在那里(并且稍后可以使用?)。
最佳答案
从 CookieManager.class.getClass()
中删除 getClass。您正在 Class 类中查找方法,而不是在 CookieManager 类中。
您似乎在调用公共(public)方法。你不需要反射来做到这一点:
if (Build.VERSION.SDK_INT >= 21) {
CookieManager.setAcceptFileSchemeCookies(true);
}
关于java - NoSuchMethodException 取决于执行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41953222/
我是一名优秀的程序员,十分优秀!