在Android中使用反射(不明白)

我的学生时代 2016-07-04 09:04:42
我想调用一个静态内部类中的一个方法,但是不能得到它?希望能帮帮忙

就是这个静态内部类 : android.os.Environment.UserEnvironment


Class<?> class_UserEnvironment = Class.forName("android.os.Environment")
.getDeclaredClasses()[0];
Method method_getExternalDirs = class_UserEnvironment
.getMethod("getExternalDirs", null);

异常为:


java.lang.NoSuchMethodException: getExternalDirs []
at java.lang.Class.getMethod(Class.java:664)
at java.lang.Class.getMethod(Class.java:643)
at c508.yangming.mysdcard.MySDCard.getSDCardPaths(MySDCard.java:231)
at c508.yangming.mysdcard.ActivityMain.onCreate(ActivityMain.java:15)
at android.app.Activity.performCreate(Activity.java:5990)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2377)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2486)
at android.app.ActivityThread.access$800(ActivityThread.java:164)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1358)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:147)
at android.app.ActivityThread.main(ActivityThread.java:5513)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:971)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:766)


我的问题是我使用反射错了吗?——我不知道哪里错了
或者是反射不能完成这个动作?
或者是存在我不知道的假设?
...全文
567 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
developerzjy 2016-07-05
  • 打赏
  • 举报
回复
UserEnvironment是Environment的内部类?中间不要用点连接,用$符号试试
我的学生时代 2016-07-05
  • 打赏
  • 举报
回复
总结一下吧,我出这个问题的原因是什么呢? 日志说得明白,没有这个方法,这时候我在源码中明确的看到了这个方法的存在。这时候我不知道该怎么办了。 这个问题就是经验不太够造成的。
我的学生时代 2016-07-05
  • 打赏
  • 举报
回复
引用 4 楼 Simple_Simple_Simple 的回复:
UserEnvironment是Environment的内部类?中间不要用点连接,用$符号试试
这么做确实能得到我们希望的结果,谢谢啦 ---------------------------------------------------------------------------------------------------继续之间的问题--------------------------------------------- * 关于这个问题的解决,我认为可能是不同版本的Android系统源码不同造成的,可能我用来测试的机器中根本就没有这个方法。——我接下来的事情就是去验证这个猜测。 --------------------------------------------------------------------------------------------------- 在android开发必备的*****SDK文件夹中,sources文件夹下我们可以轻易的查阅到各种版本的源码,能够知道,我这里的目标方法只有在 版本号为23 的源码中才有,也就是说我这几句代码如果跑在 6.0 的机器上就不会有问题的。 这个问题到这里就算是解决了,我继续我的思路,做我的事, !!!好人一生平安!!!
我的学生时代 2016-07-04
  • 打赏
  • 举报
回复
引用 2 楼 u014587769 的回复:
具体说来是这样的我想获取一个Class实例 通过如下代码:
Class.forName("android.os.Environment.UserEnvironment");
但是失败了 异常信息为
java.lang.ClassNotFoundException: android.os.Environment.UserEnvironment
所以我这样
Class<?> class_UserEnvironment = Class.forName("android.os.Environment")
                               .getDeclaredClasses()[0];
可能问题出在这里 我们如果能解决 这里提出的问题,本帖获取就解决了
但是我就通过
Class<?> class_UserEnvironment = Class.forName("android.os.Environment")
                               .getDeclaredClasses()[0];
也确实得到了这个内部类中除目标方法以为的其他方法啊, 那不能得到目标方法,到底是为什么,要怎么规避呢?
我的学生时代 2016-07-04
  • 打赏
  • 举报
回复
具体说来是这样的我想获取一个Class实例 通过如下代码:
Class.forName("android.os.Environment.UserEnvironment");
但是失败了 异常信息为
java.lang.ClassNotFoundException: android.os.Environment.UserEnvironment
所以我这样
Class<?> class_UserEnvironment = Class.forName("android.os.Environment")
                               .getDeclaredClasses()[0];
可能问题出在这里 我们如果能解决 这里提出的问题,本帖获取就解决了
YaYicho 2016-07-04
  • 打赏
  • 举报
回复
我不知道该怎么回答你这个问题

80,490

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧